3.0.8: Matching request attribute against multiple check items using unlang
Alan DeKok
aland at deployingradius.com
Thu Jun 25 17:30:54 CEST 2015
On Jun 25, 2015, at 10:57 AM, Adam Hammond <adam.hammond at wicoms.com> wrote:
> Noting that this module has been removed in 3.x and that I should use unlang instead I have been trying to make this work and have got stuck. I haven't been able to find a solution looking through the list archives and I've probably misunderstood how unlang works somehow.
It's possible.
> Here is my messy unlang attempt. Reject a request unless I can match the Calling-Station-Id.
> NOTE: I've expanded the attributes in the if statement to show you what I mean in the debug output below.
>
> authorize {
> sql
> pap
>
> update control {
> Auth-Type := "Reject"
> }
Delete that. The default is to reject unauthorized users
> foreach &control:Calling-Station-Id {
> if ("%{request:Calling-Station-Id}" == "%{control:Calling-Station-Id}") {
That won't work. You're checking the first Calling-Station-Id in the request list against the first Calling-Station-Id in the control list. i.e. you're not using "foreach" at all...
This should be:
if (&request:Calling-Station-Id == "%{Foreach-Variable-0}") {
> NOTE: 'break' doesn't seem to do what I'm expecting it to here (break out of the for loop)
It should.
> Any pointers to what I'm doing wrong most appreciated.
Nothing. I've pushed a fix, and a test based on your use-case, to the v3.0.x branch on github.
Alan DeKok.
More information about the Freeradius-Users
mailing list