RAD_REQUEST: Calling-Station-Id = ARRAY(0x825a588)

Herwin Weststrate herwin at quarantainenet.nl
Thu Jan 8 14:20:37 CET 2015

On 08-01-15 10:55, Thomas Zenz wrote:

> This session has as Calling-Station-Id an ARRAY. So my script failed,
> and the Port was set to the MAB VLAN where clients only get Updates or
> PXE Boot.

According to Section 5.44 of RFC2865, a request should contain at most 1
Calling-Station-Id, so this client doesn't behave like it should.

>          if ($#array ==1 ){
>             # everyting OK, one Entry
>             ;
>          }
>          elsif ($#array > 1){
>             syslog('info', "More than one Calling-Station-Id");
>             print "\n";
>             print @array;
>             print "\n";
>          }
>          elsif ($#array == 0){
>             syslog('info', "No Calling-Station-Id");
>             print $array[0];
>          }

The syntax $#array return the index of the last element of the array, or
-1 if the array is empty. So with "$#array == 0" you have exactly one
element in @array instead of none, "$#array == 1" means two elements.
You probably want to rewrite "$#array" to "scalar(@array)", which
returns the number of elements. You could even shortcut it to statements
like "if (@array == 0)", which converts the array to a scalar with the
size automatically, but I'm not a big fan of that syntax (it heavily
relies on perl internals and make it less understandable for readers who
know only other programming languages).

Herwin Weststrate

More information about the Freeradius-Users mailing list