在radius的验证文件里面 有个radutmp文件 其作用和Unix/Linux里面的wtmp一样 记录了当前登录的用户和地址等信息
当我们配置完freeradius-mysql以后 我们就希望直接从数据库session来验证Simultaneous-Use,控制用户同时拨入的数量。
但是当我在/etc/freeradius/sites-enabled/default的session节里面注释掉radutmp验证后,居然Simultaneous-Use的检查失效了。
最后翻箱倒柜,终于发现了问题,在/etc/freeradius/sql/mysql/dialup.conf里面制定的simul_count_query是这样写的
[sql] simul_count_query = "SELECT COUNT(*) \
FROM ${acct_table1} \
WHERE username = '%{SQL-User-Name}' \
AND acctstoptime = NULL"
simul_verify_query = "SELECT radacctid, acctsessionid, username, \
nasipaddress, nasportid, framedipaddress, \
callingstationid, framedprotocol \
FROM ${acct_table1} \
WHERE username = '%{SQL-User-Name}' \
AND acctstoptime = NULL"[/sql]
我了个去 居然用= NULL来查询 把= NULL换成 is NULL后 问题解决
经过请教@yegle和查阅Debian的BUG ticket 确认了这是Debian lenny内freeradius-mysql 2.0.4的一个BUG在2009年的时候FreeRADIUS 2.1.7已经修复了
特地查看了一些Debian 6.0 Squeeze 内此包的配置文件 确实已经修复了
除了simul_count_query 上面还有一处 = NULL的查询是accounting_onoff_query
特此记录