我正在使用 freeradius sqlcounter 模块。我将帐户的 Max-All-Session 设置为 180 秒,因此用户将在超时时注销。当有两个用户使用这个帐户时,如果两个用户的访问时间之和达到180秒,我希望他们退出。但是,他们两个还有180秒。我尝试了以下配置,query
将返回帐户的总访问时间。IFZERO(a,b)
函数 return a
if a == 0
else b
return 。但它没有用。我还想知道,既然originquery
总是在设置0
之前返回acctsessiontime
,那么这个模块怎么知道超时发生了?
#/etc/freeradius/sql/mysql/counter.conf
sqlcounter noresetcounter {
counter-name = Max-All-Session-Time
check-name = Max-All-Session
sqlmod-inst = sql
key = User-Name
reset = never
#query = "SELECT IFNULL(SUM(AcctSessionTime),0) FROM radacct WHERE UserName='%{%k}'" <= origin one
query = "SELECT IFZERO(SUM(IFZERO(AcctSessionTime, NOW() - acctstarttime)),0) FROM radacct WHERE UserName='%{%k}'"
}