FreeRADIUS: пользовательский счетчик SQL работает только частично

2355
Maxxer

Я хочу добавить в мою установку 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 = '$' AND \ (UNIX_TIMESTAMP(acctstarttime) + acctsessiontime > '%b') \ AND calledstationid = '%' " } 

затем в сайтах с включенным / по умолчанию:

[...] 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 for Session-Timeout(которое находится в radgroupcheckтаблице). Почему это не происходит для моего счетчика? Что мне не хватает? Спасибо

0

1 ответ на вопрос

0
Maxxer

The fix for this is to add a counter in the module config, and call it from the authorize section of the site config file.

In modules/counter add:

 counter dailylocation { filename = $/db.daily key = User-Name count-attribute = Acct-Session-Time reset = daily counter-name = Max-Daily-Session-Location-Time check-name = Max-Daily-Session-Location reply-name = Session-Timeout allowed-servicetype = Framed-User cache-size = 5000 } 

and then in sites-enabled/default, in the authorize section, right next after daily add

dailylocation 

This will enable the counter to be checked!