FreeRADIUS 2.X.X small functionality extensions

Kostas Zorbadelos kzorba at otenet.gr
Fri Jun 6 14:09:15 CEST 2014


Arran Cudbard-Bell <a.cudbardb at freeradius.org> writes:

>     Yes indeed, he refused to add it.
>     I our case I managed to overcome the problem by defining a
>     slightly
>     different regex. It is true that the info I 'd like to extract is
>     only 5
>     variables (fitting in the 8) but more groups can be needed in more
>     compicated expressions. In our case the original regex was
>     
>     /.*_((HUA)|(ALU))_([[:digit:]]+)(.*)? ((atm)|(eth))
>     ([[:digit:]]+)\/([[:digit:]]+)\/([[:digit:]]+)\/([[:digit:]]+)
>     (:)?.*/
>     
>     and I reduced the groups with
>     
>     /.*__([[:digit:]]+)(.*)? [atmeth]{3} 0?([[:digit:]]+)\/0?
>     ([[:digit:]]+)\/0?([[:digit:]]+)\/0?([[:digit:]]+)(:)?.*/)
>     
>     Not exactly the same but fits our purposes fine.
>
>     [HUAALU]{3}
>
> That'll work, but it's pretty bad.
>

Yes, I know.

>     ((HUA)|(ALU))
>
> Inputting (ALU|HUA) on debuggex, you get:
>
> *
>
> Meaning HUA and ALU count as atoms for the alternation. In fact
> (HUA|ALU) is exactly the same thing as ((HUA)|(ALU)) but uses two
> fewer capture groups.
>

This is very nice.

> I can't remember if it's the same in extended regular expressions but
> for PCRE at least 
>
> (?:<expression>) makes expression an atom, but doesn't add the match
> to the capture groups.
>
> 'foo bar baz' =~ /([[:alnum:]]+) (?:[[:alnum:]]+) ([[:alnum:]]+)/
>
> Would result in 
>
> %{0} -> 'foo bar baz'
> %{1} -> 'foo'
> %{2} -> 'baz'
>
> So you don't waste the capture groups if you're not actually going to
> use the data.
>

Very useful, but unfortunately only available in pcre it seems.

> Try it with extended regular expressions and see if it works. If it
> doesn't the only way to fix it would be upgrade to v3.0.x and build
> with PCRE unfortunately.
>

OK.
 
>     I think generally this is the way to go, have it configurable
>     since
>     people can use it. Matching multiple times to reduce the number of
>     groups is at least "not elegant". Maybe you can have it in the
>     v3.x.x
>     branch? 
>
> Yes, i'll have a look.
>

Thanks, although in my case the problem is overcome. Latest version of
regex for my case:

/.*_(HUA|ALU)_([[:digit:]]+)(.*)? (atm|eth) 0?([[:digit:]]+)\/0?([[:digit:]]+)\/0?([[:digit:]]+)\/0?([[:digit:]]+)(:)?.*/ 

which gives me the result in exactly 8 groups. 

>
> Yes, I know what ISPs can be like :)
> 

Then you are in the group of people who understand ;-)

Thank you and keep up the good work.

Regards,

Kostas


More information about the Freeradius-Users mailing list