using unlang to call a stored procedure

Alex Sharaz alex.sharaz at york.ac.uk
Mon May 20 17:55:26 CEST 2013


Hi,

I've written a mysql stored procedure that accepts 2 arguments, the nas-ip address of one  of our (HP) switches and the calling station Id of a network client ( it's a MAC auth so the User-Name=Calling-Station-Id below). The procedure then queries various back end database tables  to figure out which vlan to drop the client into based upon where it is on the network and the type of client it is.

Once I've got the vlan back I can decide whether to use RFC 3580 or RFC 4675 when creating the attributes to pass back in the access-accept packet.

Only problem is figuring out how to format the unlang statement.

Elsewhere in my sites-enable/default file I've got

 if ( "%{sql:SELECT count(*) from banned_macs where mac_address=UPPER(TRIM('%{Calling-Station-Id}'))}" > "0"   ) {
             update control {
                 Auth-Type := Reject
             }
             update reply {
                Reply-Message := "quarantined, contact ITSO"
             }
          }

which works just fine and I can block specific mac addresses from connecting to our wired network.

In this case I've got 

      Tmp-String-0 := "%{sql:call get_vlan_id('%{NAS-IP-Address}','%{User-Name}')}"

get_vlan_id accepts two varchar arguments.

Which, when I run radiusd -X -d /etc/freeradius  gives me

/etc/freeradius/sites-enabled/default[248]: Unknown action '%{sql:CALL get_vlan_id('%{NAS-IP-Address}','%{User-Name}')}'. 

I found a message on the list that says ………. call a stored procedure by using    "%{<call the stored proc in here>}"

Well, from a mysql cli I'd type call get_vlan_id(…….)  to run the stored procedure.

Rgds
Alex



More information about the Freeradius-Users mailing list