[solved]Не матчится хост из базы trusted

Kamailio/OpenSIPS и другие производные от SER.

Модераторы: Admins, Модераторы

Ответить
bishop
Сообщения: 21
Зарегистрирован: 25 мар 2008, 06:12
Откуда: Novosibirsk

Сообщение bishop » 18 авг 2010, 11:41

У меня kamailio 3.0.1. Модули auth, auth_db, usrloc, permissions работают с БД через db_text (базы данных в виде обычных текстовых файликов). REGISTER и INVITE аутентифицируются (через сообщения 401 и 407 соответственно).
Хочу иметь возможность не аутентифицировать некоторые устройства. Для этого в модуле permissions есть функция allow_trusted. Вот выдержка из конфига касательно всех его настроек:

Код: Выделить всё

...
----- loadmodule section -----
loadmodule "permissions.so"
...

----- modparam section -----
...
modparam("permissions", "db_mode", 0)
modparam("permissions", "trusted_table", "trusted")
modparam("permissions", "db_url", "text:///etc/kamailio")
...

----- route section -----
...
                        if (!allow_trusted("$si", "$proto")) {
                        xlog("\n$$rc=$rc $$si=$si $$proto=$proto\n\n");
                                if (!proxy_authorize("", "subscriber")) {
                                        proxy_challenge("", "0");
                                        exit;
                                }
                        }
...
Так вот. Аутентификация всё-равно запрашивается. Это видно из вывода в дебаг сообщения от функции xlog:

Код: Выделить всё

 1&#40;1466&#41; ERROR&#58; <script>&#58;
$rc=-1 $si=192.168.16.198 $proto=udp
Вот содержание файлика trusted:

Код: Выделить всё

id&#40;int,auto&#41; src_ip&#40;string&#41; proto&#40;string&#41; from_pattern&#40;string,null&#41; tag&#40;string,null&#41;
1&#58;192.168.16.5&#58;any&#58;&#58;
1&#58;3001@192.168.16.5&#58;any&#58;&#58;
1&#58;192.168.16.198&#58;any&#58;&#58;

Вопрос: что я делаю не так?

Added after 1 hours 15 minutes:

Разобрался.
Строку modparam("permissions", "trusted_table", "trusted") вообще не надо вставлять.
А вот эту:

Код: Выделить всё

if &#40;!allow_trusted&#40;"$si", "$proto"&#41;&#41;
Пределал на эту:

Код: Выделить всё

if &#40;!allow_trusted&#40;&#41;&#41;
Ну и там ещё с секциями намудрил, потом поправил. Сейчас выглядит так:

Код: Выделить всё

# Authentication route
route&#91;AUTH&#93; &#123;
#!ifdef WITH_AUTH
        if &#40;is_method&#40;"REGISTER"&#41;&#41;
        &#123;
                # authenticate the REGISTER requests &#40;uncomment to enable auth&#41;
                if &#40;!www_authorize&#40;"", "subscriber"&#41;&#41;
                &#123;
                        www_challenge&#40;"", "0"&#41;;
                        exit;
                &#125;

                if &#40;$au!=$tU&#41;
                &#123;
                        sl_send_reply&#40;"403","Forbidden auth ID"&#41;;
                        exit;
                &#125;
        &#125; else &#123;
                # authenticate if from local subscriber &#40;uncomment to enable auth&#41;
                if &#40;from_uri==myself&#41;
                &#123;
                        if &#40;!allow_trusted&#40;&#41;&#41; &#123;
                                if &#40;!proxy_authorize&#40;"", "subscriber"&#41;&#41; &#123;
                                        proxy_challenge&#40;"", "0"&#41;;
                                        exit;
                                &#125;
                                if &#40;is_method&#40;"PUBLISH"&#41;&#41;
                                &#123;
                                        if &#40;$au!=$tU&#41; &#123;
                                                sl_send_reply&#40;"403","Forbidden auth ID"&#41;;
                                                exit;
                                        &#125;
                                &#125; else &#123;
                                        if &#40;$au!=$fU&#41; &#123;
                                                sl_send_reply&#40;"403","Forbidden auth ID"&#41;;
                                                exit;
                                        &#125;
                                &#125;
                        &#125;

                        consume_credentials&#40;&#41;;
                        # caller authenticated
                &#125;
        &#125;
#!endif
При INVTE идёт проверка. Если хост в 'trusted', то тогда не аутентифицируем.

Аватара пользователя
anest
Модератор
Сообщения: 5708
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 18 авг 2010, 21:03

Спасибо что не поленились отписаться о решении, может комуто будет полезным :)

Ответить