On 2010-02-18 at 23:32 +0100, Marten Lehmann wrote:
> The final logic in exim would be something like this:
> 
> ${if  and { \
>       { \
>               ${if eq{}{} \
>                       {true} \
>                       { ${if eq{}{} \
>                               {true} \
>                               {false} \
>                       } } \
>               } } \
>       } \
>       { \
>               ${if eq{}{} \
>                       {true} \
>                       { ${if eq{}{} \
>                               {true} \
>                               {false} \
>                       } } \
>               } } \
>       } \
>       } \
> }
> 
> Since the above code does not work, I'm really interessed to see how 
> else I can "and" these if conditions.

The ${if ...} construct is:
  ${if CONDITION {TRUTH-BRANCH}{FALSE-BRANCH}}
(loosely speaking, ignoring ability to omit branches or force failure).

After the "${if " you're in Condition parsing mode.  You need to provide
lexical conditions.

"and" is the name of a condition.  For "and", it's:
  and{{COND1}{COND2}{COND3}}

The contents of COND1 must be a lexical condition.  An arbitrary string
expansion is not a condition.

"${if " is how you introduce conditionals into a string expansion
context.  Your problem is that you're using it too freely.  You need it
for the textual branches but not for the condition locations.

Note that with or{{COND1}{COND2}} the COND2 is parsed but is not
executed unless COND1 fails, so it short-circuits.  This is what lets
you implement the nested else.

This should work:

  ${if  and {\
        {or{\
                {eq{}{}}\
                {eq{}{}}\
        }}\
        {or{\
                {eq{}{}}\
                {eq{}{}}\
        }}\
        }}


Further, as of Exim 4.70, there's a bool{} expansion condition,
which takes an arbitrary string and turns it into a condition.  So if
you truly need to take an arbitrary ${if ...} string you *could* nest it
inside a bool{} condition.  For the simple case shown, you can reduce
this to proper combinations of and{} and or{} conditions though.

  ${if  and {\
        {or{\
                {eq{}{}}\
                {bool{${if eq{}{} \
                        {true}\
                        {false}\
                }}}\
        }}\
        {or{\
                {eq{}{}}\
                {eq{}{}}\
        }}\
        }}


On a separate note, you can use repeated "condition" rules in an ACL but
not on a Router.  (If memory serves).

Regards,
-Phil

-- 
## List details at http://lists.exim.org/mailman/listinfo/exim-users 
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to