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

0

Я хочу добавить в мою установку 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 таблица) возвращается. Почему это не происходит для моего счетчика? Что мне не хватает? Спасибо

Maxxer
источник

Ответы:

0

Исправление для этого состоит в том, чтобы добавить счетчик в конфигурации модуля, и вызвать его из authorize раздел файла конфигурации сайта.

В modules/counter добавлять:

 counter dailylocation {
        filename = ${db_dir}/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
 }   

а затем в sites-enabled/default, в authorize раздел, сразу после daily добавлять

dailylocation

Это позволит проверить счетчик!

Maxxer
источник