Я хочу добавить в мою установку FreeRADIUS пользовательский счетчик проверок SQL. По сути, это то же самое, что и Max-Daily-Session, но ограничено текущим Called-Station-Id
.
Я добавил это в sql/mysql/counter.conf:
sqlcounter dailycounterlocation {
counter-name = Daily-Session-Location-Time
check-name = Max-Daily-Session-Location
reply-name = Session-Timeout
sqlmod-inst = sql
key = User-Name
reset = daily
query = "SELECT SUM(acctsessiontime - \
GREATEST((%b - UNIX_TIMESTAMP(acctstarttime)), 0)) \
FROM radacct WHERE username = '${key}' AND \
(UNIX_TIMESTAMP(acctstarttime) + acctsessiontime > '%b') \
AND calledstationid = '%{Called-Station-Id}' "
}
затем в сайтах с включенным / по умолчанию:
[...]
authorize {
dailycounterlocation {
reject = 1
}
if(reject){
update reply {
Reply-Message := "You have reached your daily time limit from this location"
}
reject
}
}
И последнее в пользовательском файле словаря:
ATTRIBUTE Max-Daily-Session-Location 107 integer
Это работает, если у пользователя есть предыдущий сеанс в этом периоде сброса (сегодня), но если это первый сеанс дня, атрибут Session-Timeout
не возвращается, поэтому ограничение не установлено.
Если я добавляю фабрику Max-Daily-Session
для пользователя, во время первого подключения на следующий день после групповых SQL-запросов я вижу это в отладке:
rlm_counter: Current Time: 1425241760 [2015-03-01 21:29:20], Next reset 1425250800 [2015-03-02 00:00:00]
rlm_counter: reset_db: Closing database
rlm_counter: reset_db: Opened new database
rlm_counter: add_defaults: Start
rlm_counter: DEFAULT1 set to 1425250800
rlm_counter: DEFAULT2 set to 1425078000
rlm_counter: add_defaults: End
rlm_counter: reset_db ended
rlm_counter: Entering module authorize code
rlm_counter: Searching the database for key 'ALG02MAX'
rlm_counter: Could not find the requested key in the database.
rlm_counter: Check item = 200, Count = 0
rlm_counter: res is greater than zero
rlm_counter: (Check item - counter) is greater than zero
rlm_counter: Authorized user ALG02MAX, check_item=200, counter=0
rlm_counter: Sent Reply-Item for user ALG02MAX, Type=Session-Timeout, value=200
++[daily] = ok
Таким образом, возвращается значение по умолчанию 200 для Session-Timeout
(которое находится в таблице radgroupcheck
).
Почему это не происходит для моего счетчика? Что мне не хватает? Спасибо