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