Proxy / reply translation
Richard J Palmer
richard at merula.net
Sat Nov 11 20:33:31 CET 2017
HI Alan
I will be using it for Proxy. However I was trying to test / use this
locally as well while debugging the server / code.
Ideally it would be nice to allow both options to work but I am
flexible if it's easier just to use this for requests that are proxied
Thanks
Richard
On Saturday 11/11/2017 at 7:14 pm, Alan Buxey wrote:
> You say you need to modify a reply from their radius server - this
> will be
> in the post-proxy section?
>
> Also if (&reply:Cisco-AVPair ... ?
>
> alan
>
>
> On 11 Nov 2017 6:37 pm, "Richard J Palmer" <richard at merula.net> wrote:
>
> Hi
>
> Sorry for the delay. I am getting close with this I think... BUT
> something
> seems to be slightly wrong.
>
> Happy to post a full log as needed - BUT I hope the bit I need is
> here:
>
> (2) sql1: Framed-Route = ""
> (2) sql1: Framed-IP-Address = 1.2.3.1
> (2) sql1: Framed-IP-Netmask = 255.255.255.248
> (2) sql1: Cisco-AVPair += "ip:route=1.2.3.0 255.255.255.248"
> (2) sql1: Filter-Id = "P"
> (2) sql1: Chargeable-User-Identity = "richard2"
>
> <group SQL statements>
>
> (2) sql1: Group "Hotspot": Merging reply items
> (2) sql1: Acct-Interim-Interval = 600
>
> (2) [sql1] = ok
> (2) } # redundant = ok
> (2) policy rewrite_routes {
> (2) if (&Cisco-AVPair =~ /ip:route=([^ ]+) ([^ ]+)/) {
> (2) ERROR: Failed retrieving values required to evaluate
> condition
> (2) } # policy rewrite_routes = ok
>
> (2) Login OK: [richard2] (from client local port 1)
> (2) Sent Access-Accept Id 69 from 127.0.0.1:1645 to 127.0.0.1:48919
> length 0
> (2) Framed-IP-Address = 1.2.3.1
> (2) Framed-IP-Netmask = 255.255.255.248
> (2) Cisco-AVPair = "ip:route=1.2.3.0 255.255.255.248"
> (2) Filter-Id = "P"
> (2) Chargeable-User-Identity = "richard2"
> (2) Acct-Interim-Interval = 600
> (2) Finished request
>
>
> In my authorise section I have placed:
>
> redundant {
> sql1
> sql2
> handled
> }
> # -sql
> rewrite_routes
>
> (The other sections are there - this is just to show where what I hope
> is
> relevant. The code itself is based on the code provided below
>
> rewrite_routes {
>
> if (&Cisco-AVPair =~ /ip:route=([^ ]+) ([^ ]+)/) {
> switch "%{2}" {
> case "255.255.255.255" {
> update reply {
> Framed-Route = "%{1}/32"
> }
> }
> case "255.255.255.254" {
> update reply {
> Framed-Route = "%{1}/31"
> }
> }
>
>
> and so on (it is in the policy.d folder)
>
> I am aware the key to this is the error
>
> (2) ERROR: Failed retrieving values required to evaluate
> condition
>
> What I am unclear about is why this is failing / and what I have done
> wrong
> here to cause this. If you can give me one more pointer here I'd
> appreciate
> it
>
> More than happy to send any of the extra config or log as needed
>
> Thanks in advance
>
> Richard
>
>
>
>
>
> On Thursday 09/11/2017 at 1:35 pm, Alan DeKok wrote:
>
>>
>> On Nov 9, 2017, at 8:19 AM, Richard J Palmer <richard at merula.net>
>> wrote:
>>
>>>
>>>
>>> This is where my skills are not great (regex) most other areas I can
>>> work
>>> with. Ultimately I am happy to pay someone to help write the little
>>> bit of
>>> code that does this. I do need to cope with Netmasks from /32 to /24
>>> so a
>>> few switch cases.
>>>
>>
>> It shouldn't be difficult.
>>
>>
>>>
>>> Alternatively if someone can provide a few pointers on that bit I can
>>> probably build from there.
>>>
>>
>> If you have:
>>
>>
>>>
>>>
>>>>
>>>>
>>>>>
>>>>> Cisco-AVPair = "ip:route=1.2.3.1 255.255.255.240"
>>>>>
>>>>
>> Step 1, split it into pieces:
>>
>> if (&Cisco-AVPair =~ /ip:route=([^ ]+) ([^ ]+)/) {
>>
>> This matches the "ip:route" prefix. It then matches non-space
>> data,
>> then a space, and more non-space data. As per the FR documentation,
>> the
>> first match goes into %{1}, and the second into %{2}.
>>
>> As there are only a limited number of net masks, you can expand
>> the net
>> mask, and switch over it (inside of the "if" block from above)
>>
>> switch "%{2}" {
>> case "255.255.255.255" {
>> update reply {
>> Framed-Route = "%{1}/32"
>> }
>> }
>>
>> case "255.255.255.254" {
>> update reply {
>> Framed-Route = "%{1}/31"
>> }
>> }
>>
>> case "255.255.255.252" {
>> update reply {
>> Framed-Route = "%{1}/30"
>> }
>> }
>>
>> ... etc...
>>
>> # and the "catch all" case, just mash it to /28
>> case {
>> update reply {
>> Framed-Route = "%{1}/28"
>> }
>> }
>> }
>>
>> A little verbose, but it should work.
>>
>> Alan DeKok.
>>
>>
>> -
>> List info/subscribe/unsubscribe? See http://www.freeradius.org/list
>> /users.html
>>
>
> -
> List info/subscribe/unsubscribe? See http://www.freeradius.org/list
> /users.html
> -
> List info/subscribe/unsubscribe? See
> http://www.freeradius.org/list/users.html
More information about the Freeradius-Users
mailing list