Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / unlang in freeradius / 9 сообщений из 9, страница 1 из 1
17.08.2010, 23:01
    #36796688
alexGrT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unlang in freeradius
Здравствуйте!
Возник такой вопрос:

Есть параметр %{NAS-IP-Address} по нему можно получить код услуги (101, 102, 103 и т.д.) используя запрос
select servicetype from nas where ipaddr = %{NAS-IP-Address}
И в зависимости от этого значения (используя оператор IF) подсовывать разные запросы авторизации authorize_check_query, authorize_reply_query и т.д.

Версия радиуса 2.0.2

Пример файла авторизации радиуса:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
        #######################################################################
        #  Authorization Queries
        #######################################################################
        #  These queries compare the check items for the user
        #  in ${authcheck_table} and setup the reply items in
        #  ${authreply_table}.  You can use any query/tables
        #  you want, but the return data for each row MUST
        #  be in the  following order:
        #
        #   0 . Row ID (currently unused)
        #   1 . UserName/GroupName
        #   2 . Item Attr Name
        #   3 . Item Attr Value
        #   4 . Item Attr Operation
        #######################################################################

        # Use these for case insensitive usernames. WARNING: Slower queries!
# authorize_check_query = "SELECT id, UserName, Attribute, Value, Op \
#   FROM ${authcheck_table} \
#   WHERE LOWER(UserName) = LOWER('%{SQL-User-Name}') \
#   ORDER BY id"
# authorize_reply_query = "SELECT id, UserName, Attribute, Value, Op \
#   FROM ${authreply_table} \
#   WHERE LOWER(UserName) = LOWER('%{SQL-User-Name}') \
#   ORDER BY id"

#test_check = "select radacctid as id, username as UserName, 'Pass' as Attribute, '==' as Op from radacct limit 1"

authorize_check_query = " \
SELECT \
        1 AS id, \
        '%{SQL-User-Name}' AS username, \
        retcheckattribute('%{SQL-User-Name}', \
        '%{NAS-IP-Address}') AS attribute, \
        retcheckpassword('%{SQL-User-Name}', \
        '%{NAS-IP-Address}') AS password, \
        '==' AS op \
WHERE \
        retenableservice( '%{User-Name}', retservicetype('%{NAS-IP-Address}')) = 1 \
AND \
        setlimit('%{User-Name}',retservicetype('%{NAS-IP-Address}'),'%{Called-Station-Id}') = 1  ORDER BY id"

И Т.Д.

Кто может подсказать как это сделать?
...
Рейтинг: 0 / 0
18.08.2010, 00:31
    #36796760
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unlang in freeradius
alexGrT, тащемта у freeradius в этом месте родовая травма. предполагается что все запросы sql работают как куски файла users. при сколько-нибудь сложной логике в биллинге приходится вешаться.

что у вас за субд? вершина моих биллинговых городушек использовала pipelined functions в оракле и все РЕЗКО упростилось.
а на старых версиях оракла доходило до написания патчей.
...
Рейтинг: 0 / 0
18.08.2010, 08:02
    #36796891
alexGrT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unlang in freeradius
netwind,

Postgresql
...
Рейтинг: 0 / 0
18.08.2010, 09:14
    #36796975
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unlang in freeradius
alexGrT, ну вот у них тоже есть какой-то setof http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions

я не утверждаю, что так будет лучше именно вам, но мне было проще редактировать привычный pl/sql и всю логику биллинга там и держать. да и unlang появился только в freeradius 2.0.
...
Рейтинг: 0 / 0
18.08.2010, 09:32
    #36797004
alexGrT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unlang in freeradius
netwind,

Как вариант можно будет рассмотреть, но все же не хочу останавливаться, буду смотреть в сторону unlang/xlat что бы организовать в sql-файле авторизации хоть какую то логику с применением IF statement
...
Рейтинг: 0 / 0
18.08.2010, 09:53
    #36797036
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unlang in freeradius
alexGrT, многие биллинги растут дальше. пожалей разработчика, если он планируется.
...
Рейтинг: 0 / 0
18.08.2010, 10:17
    #36797091
alexGrT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unlang in freeradius
netwind,

Дело в том что я и есть разработчик нашего билинга. В нем до сего момента нету NGN(SIP) услуги, а только ADSL и т.д.

Теперь же приходится внедрять NGN а скрипт авторизации заточен под ..... не оно самое короче *(

Вот вопрос, покурил маны, сделал так в файле SQL-авторизации в качестве теста:
Код: plaintext
1.
2.
3.
if ("%{sql:SELECT COUNT(username) FROM 'usergroup' WHERE username ="'%{SQL-User-Name}'}" > 0) { 
        authorize_check_query = "select  1  as id, '1500001' as username, 'Password' as attribute, '123456' as password"
} 

Запускаю freeradius -X
вот что пишет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
FreeRADIUS Version  2 . 0 . 4 , for host i486-pc-linux-gnu, built on Sep   7   2008  at  23 : 35 : 34 
Copyright (C)  1999 - 2008  The FreeRADIUS server project and contributors. 
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE. 
You may redistribute copies of FreeRADIUS under the terms of the 
GNU General Public License. 
Starting - reading configuration files ...
including configuration file /etc/freeradius/radiusd.conf
including configuration file /etc/freeradius/proxy.conf
including configuration file /etc/freeradius/clients.conf
including configuration file /etc/freeradius/snmp.conf
including configuration file /etc/freeradius/eap.conf
including configuration file /etc/freeradius/sql.conf
including configuration file /etc/freeradius/sql/our_radius.conf
/etc/freeradius/sql/our_radius.conf[ 48 ]: Parse error in condition at: "%{sql:SELECT COUNT(username) FROM 'usergroup' WHERE username ="'%{SQL-User-Name}'}" >  0 ) {
Errors reading /etc/freeradius/radiusd.conf

Понимаю, проблема в синтаксисе. Или каК? Подскажите!!!
...
Рейтинг: 0 / 0
18.08.2010, 10:57
    #36797226
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unlang in freeradius
alexGrT, ну так пора нанять настоящего разработчика.
А он, уверяю вас, не станет возиться с этими языками, а сделает все через SQL.
...
Рейтинг: 0 / 0
18.08.2010, 16:22
    #36798238
alexGrT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
unlang in freeradius
netwind,

Ничего абсолютно)
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / unlang in freeradius / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]