Jump to content
Калькуляторы

mpd-drop-user нигде нет конкретной инфы - вот как решил я.

Перерыл и-нет, нигде нет конкретного решения. Где-то предлагают исходники радиуса править, где-то через доп. скрипт и т.д.

 

Пришлось заняться вопросом самому, оказалось все проще некуда, но инфы мало, поэтому выклыдваю тут решение:

Поднял все на FreeRadius 2.

Для выдачи ответа на аккаунтинг запрос, достаточно всего лишь в конфиге добавить пару для ответа. Там же можно и проверку условий, да еще и на sql запрос.

 

Вот примерно вот так:

 

В раздел accounting {

 

        if("%{sql_traf:SELECT balans FROM `users` WHERE namev='%{User-Name}'}" < 0){
        sql_traf
        update reply {
                mpd-drop-user = 1
        }   
        }
         
        if("%{sql_traf:SELECT mpddropuser FROM `users` WHERE namev='%{User-Name}'}" == 1){
        sql_traf
        update reply {
                mpd-drop-user = 1
        }      
        %{sql_traf:update users set mpddropuser=0 WHERE namev='%{User-Name}'}
        }

 

Первый запрос проверяет баланс, при отрицательном шлет ответ mpd на разрыв сессии, второй проверяет флаг в базе на разрыв сессии, есть есть, разрывает и меняет этот флаг.

 

sql_traf - описание коннекта к базе билиннга с другими правами, нежели радиус.

Share this post


Link to post
Share on other sites

Вот как Я делал)))

 

ЗЫ:

Вообще скидывать не правильно - лучше редиректить на страницу где-бы говорилось, что счёт заблокирован)))

Кстати очень легко делается

Edited by weldpua2008

Share this post


Link to post
Share on other sites

Мне кажется мой вариант попроще...

Share this post


Link to post
Share on other sites
Мне кажется мой вариант попроще...
Зайдите в Тех поддержку, там "их" любят за 691 - из-за не возможности авторизоваться)))
Я один считаю, что проще всего - PoD?
http://forum.nag.ru/forum/index.php?s=&amp...st&p=526977

CoA не работает, ну вернее не так как хотелось бы)))

PoD+CoA надо "внедрять", не всем подойдёт)))

 

ЗЫ:

И зачем откидывать пользователей?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Вот примерно вот так:

 

...

 

Странно, но перерыв пол-интернета, нашел единственную вменяемую тему - вот эту вот. Спасибо большое за информацию.

 

Правда, сразу у меня это не заработало. Радиус не понимает дробных чисел, и когда сделал, как в приведенном примере, он правильно распознает ответ от sql сервера, например -1, но при сравнении -1 < 0 почему-то выдает FALSE и пользователя не сбрасывает.

 

В общем, написал вьюшку для postgresql и конфигурацию упростил еще сильнее, после этого заработало.

 

Вот какой конфиг у меня был:

 

accounting {

detail

sql

}

 

а вот какой стал:

 

accounting {

detail

sql

if("%{sql:select drop from radius_drop where username='%{User-Name}'}"){

update reply {

mpd-drop-user = 1

}

}

}

 

Вьюшка radius_drop выдает 1, если пользователь заблокирован, или у него отрицательный баланс, и 0 во всех остальных случаях.

 

create or replace view radius_drop as select username,case when blocked='t' or (purse_ue+credit) < 0 then 1 else 0 end as drop from contracts;

 

Имя возвращаемого поля значения не имеет, радиус смотрит только на значение.

 

При отладке радиус надо запускать командой radiusd -X, в выводе будет все необходимое.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this