sqlippool + MySQL
Roberto Gonzalez Azevedo
rgonzalez at censanet.com.br
Mon Oct 16 23:15:48 CEST 2006
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Does somebody knows how to configure sqlippool with MySQL ?
The sqlippool.conf example is for pgsql. And for MySQL ?
Here is my sqlippool.conf, corrected for MySQL:
"
sqlippool sqlippool {
#
# SQL connection information
#
sql-instance-name = "sql"
# lease_duration. fix for lost acc-stop packets
lease-duration = 3600
# Attribute which should be considered unique per NAS
pool-key = "%{Acct-Session-Id}"
pool-name = "mypool"
# pool-key = "%{Calling-Station-Id}"
#
# This series of queries allocates an IP address
#
allocate-clear = "UPDATE radippool \
SET NASIPAddress = '', pool_key = 0, CallingStationId = '', \
expiry_time = NOW() - INTERVAL 1 SECOND \
WHERE pool_key = '${pool-key}'"
# note the ORDER BY clause of next query, it'll try to allocate IPs
# like Cisco internal pools do - it _trys_ to allocate the same IP-address
# which user had last session...
allocate-find = "SELECT FramedIPAddress FROM radippool \
WHERE pool_name = '%{reply:Pool-Name}' AND expiry_time < NOW() \
ORDER BY pool_name, (UserName <> '%{User-Name}'), (CallingStationId <>
'%{Calling-Station-Id}'), expiry_time \
LIMIT 1 \
FOR UPDATE"
allocate-update = "UPDATE radippool \
SET NASIPAddress = '%{NAS-IP-Address}', pool_key = '${pool-key}', \
CallingStationId = '%{Calling-Station-Id}', UserName = '%{User-Name}', \
expiry_time = NOW() + INTERVAL ${lease-duration} SECOND \
WHERE FramedIPAddress = '%{Framed-IP-Address}'"
#
# This series of queries frees an IP number when an accounting
# START record arrives
#
start-update = "UPDATE radippool \
SET expiry_time = NOW() + INTERVAL %J SECOND \
WHERE NASIPAddress = '%n' AND pool_key = '${pool-key}' AND pool_name =
'%P'"
#
# This series of queries frees an IP number when an accounting
# STOP record arrives
#
stop-clear = "UPDATE radippool \
SET NASIPAddress = '', pool_key = 0, CallingStationId = '', \
expiry_time = NOW() - INTERVAL 1 SECOND \
WHERE NASIPAddress = '%{NAS-IP-Address}' AND pool_key = '${pool-key}'
AND UserName = '%{User-Name}' \
AND CallingStationId = '%{Calling-Station-Id}' AND FramedIPAddress =
'%{Framed-IP-Address}'"
#
# This series of queries frees an IP number when an accounting
# ALIVE record arrives
#
alive-update = "UPDATE radippool \
SET expiry_time = NOW() + INTERVAL ${lease-duration} SECOND \
WHERE NASIPAddress = '%{Nas-IP-Address}' AND pool_key = '${pool-key}'
AND UserName = '%{User-Name}' \
AND CallingStationId = '%{Calling-Station-Id}' AND FramedIPAddress =
'%{Framed-IP-Address}'"
#
# This series of queries frees the IP numbers allocate to a
# NAS when an accounting ON record arrives
#
on-clear = "UPDATE radippool \
SET NASIPAddress = '', pool_key = 0, CallingStationId = '', \
expiry_time = NOW() - INTERVAL 1 SECOND \
WHERE NASIPAddress = '%{NAS-IP-Address}' AND UserName = '%{User-Name}' \
AND CallingStationId = '%{Calling-Station-Id}' AND FramedIPAddress =
'%{Framed-IP-Address}'"
#
# This series of queries frees the IP numbers allocate to a
# NAS when an accounting OFF record arrives
#
off-clear = "UPDATE radippool \
SET NASIPAddress = '', pool_key = 0, CallingStationId = '', \
expiry_time = NOW() - INTERVAL 1 SECOND \
WHERE NASIPAddress = '%{NAS-IP-Address}' AND UserName = '%{User-Name}' \
AND CallingStationId = '%{Calling-Station-Id}' AND FramedIPAddress =
'%{Framed-IP-Address}'"
}
"
Here is the radiusd -X:
"
...
Mon Oct 16 17:50:50 2006 : Debug: Processing the post-auth section of
radiusd.conf
Mon Oct 16 17:50:50 2006 : Debug: modcall: entering group post-auth for
request 0
Mon Oct 16 17:50:50 2006 : Debug: modsingle[post-auth]: calling
sqlippool (rlm_sqlippool) for request 0
Mon Oct 16 17:50:50 2006 : Debug: rlm_sqlippool: Framed-IP-Address
already exists
Mon Oct 16 17:50:50 2006 : Debug: modsingle[post-auth]: returned from
sqlippool (rlm_sqlippool) for request 0
Mon Oct 16 17:50:50 2006 : Debug: modcall[post-auth]: module
"sqlippool" returns noop for request 0
Mon Oct 16 17:50:50 2006 : Debug: modcall: leaving group post-auth
(returns noop) for request 0
...
...
Mon Oct 16 17:50:50 2006 : Debug: modsingle[accounting]: calling
sqlippool (rlm_sqlippool) for request 1
Mon Oct 16 17:50:50 2006 : Debug: rlm_sql (sql): Reserving sql socket id: 2
Mon Oct 16 17:50:50 2006 : Debug: radius_xlat: 'BEGIN'
Mon Oct 16 17:50:50 2006 : Debug: radius_xlat: 'UPDATE radippool SET
expiry_time = NOW() + INTERVAL 3600 SECOND WHERE NASIPAddress =
'xx.xx.xx.xx' AND pool_key = '4533F0AA608100' AND pool_name = 'sqlippool''
...
"
This 'update' will never match !!! Here is the radippool's current line:
"
mysql> select * from radippool;
+----+-----------+-----------------+--------------+-----------------+------------------+---------------------+----------+----------+
| id | pool_name | FramedIPAddress | NASIPAddress | CalledStationId |
CallingStationId | expiry_time | UserName | pool_key |
+----+-----------+-----------------+--------------+-----------------+------------------+---------------------+----------+----------+
| 1 | mypool | 192.168.0.1 | | |
| 0000-00-00 00:00:00 | | |
+----+-----------+-----------------+--------------+-----------------+------------------+---------------------+----------+----------+
1 row in set (0.00 sec)
"
In radgroupcheck:
"
In (mysql) radgroupcheck :
+-----+-------------------+------------------+----+-------------+------+
| id | GroupName | Attribute | op | Value | prio |
+-----+-------------------+------------------+----+-------------+------+
| 39 | mygroup | Pool-Name | := | mypool | 1 |
...
"
Thanks.
- --
- ----------------------------
Roberto Gonzalez Azevedo
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
iD8DBQFFM/aEF+EMwkXLsEwRAsmvAKC5gV8xZN8g4gxZwrdpVQi7eTCzHgCdEfNn
1O0G6WtRGvyLBter1vtzQSk=
=z+5W
-----END PGP SIGNATURE-----
More information about the Freeradius-Users
mailing list