unlang question

Enrik Berkhan enrik#freeradius at planb.de
Thu Jul 5 17:21:29 CEST 2007


Alan DeKok schrieb:
> Enrik Berkhan wrote:
>> But exactly adding the "ok = 1" makes it work. Have you tried it? May be
>> it's a bug though ... :)
> 
>   Hmm... then I'm not sure I understand what the code is doing.

Currently, it works like so (if/elsif, with if condition evaluating to
FALSE):

In modcall(), modcall.c lines 362ff the if-condition is evaluated for if
and elsif blocks. If the condition evaluates to false, goto unroll.

In modcall(), modcall.c lines 564ff (label unroll:), the
child->actions[] are used to determine the next step. For
MOD_ACTION_RETURN and MOD_ACTION_REJECT, which happen to be default
actions in the authenticate action even for if-blocks, goto do_return.

So, if an if-condition evaluates to FALSE within the authenticate
section, the flow stops after evaluating the if-condition via goto
unroll, goto do_return and never ever evaluates the elsif.

And yes, the child->actions can be set in the if-block.

So, I think, if/elsif/else-blocks either need other defaults for their
actions[] or if/elsif/else-blocks need another unroll: mechanism :)

But I don't understand enough of the unlang-processing to provide a
complete solution, sorry. I could provide very simple example configs to
test the behaviour, though, on request.

HTH,
Enrik




More information about the Freeradius-Devel mailing list