Cisco-AVPair regex

Alan DeKok aland at deployingradius.com
Fri Feb 23 16:42:46 CET 2018


On Feb 23, 2018, at 10:32 AM, Kylián Martin <kylianm at plzen.eu> wrote:
> You're right, thank you. That’s something I forgot to put back after some tries.
> But still got the trouble while expanding the AVPs...
> 
> (12)   Cisco-AVPair = "dhcp-option=\000\014\000\003iP6"
> (12)   Cisco-AVPair = "http-tlv=\000\001\000\031iPhone7,2/11.2.2 (15C202)"
> ...
> (12)           if ("%{string:%{Foreach-Variable-0}}" =~ /^(http-tlv=){1}([\\][0-9]{1,3}){1,5}(.*)$/i) {

  I don't see why you're doing %{string:%{Foreach-Variable-0}}.

  The "string" expansion takes an *attribute name*, finds the attribute, and then outputs it as a printable string.

  What you're doing is taking the *value* of Foreach-Variable-0, and passing that to %{string:...}

> (12)           EXPAND Foreach-Variable-0
> (12)              --> audit-session-id=1ef1a8c0000538f82e22905a

  i.e. the value of this variable.

> (12)           EXPAND %{string:%{Foreach-Variable-0}}
> (12)              -->

  Because there is no attribute named "audit-session-id=1ef1a8c0000538f82e22905a".

  TBH, the simplest thing is to *not* use "foreach".  I'd guess that the Cisco-AVPair attributes come in the same order all the time.  So you can just rely on that.  e.g.

	if (Cisco-AVPair[0] =~ /^dhcp-option=/) {
		update request {
			Tmp-Integer-0 := "%{unpack:&Cisco-AVPair[0] 12 integer}"
		}
	}

  That will get you the binary data (4 octets) into Tmp-Integer-0.

  i.e. *manually* check that Cisco-AVPair[0] is the "dhcp-option".  Then, *manually* check that the binary data you want is at byte offset 12.  And then write an "unpack" rule to do that...

  Alan DeKok.




More information about the Freeradius-Users mailing list