HI Alan That's perfect - I *should* be able to work with that (and start at least) If I get any issues I'll come back to you - I do appreciate the help here Richard
--- Original message --- Subject: Re: Proxy / reply translation From: Alan DeKok <aland@deployingradius.com> To: FreeRadius users mailing list <freeradius-users@lists.freeradius.org> Date: Thursday, 09/11/2017 1:35 PM
On Nov 9, 2017, at 8:19 AM, Richard J Palmer <richard@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
participants (1)
-
Richard J Palmer