URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID6
Нить номер: 7316
[ Назад ]

Исходное сообщение
"freeradius + SQL"

Отправлено GateKeeper , 20-Фев-05 17:06 
Народ, кто-нибудь сабжевую связку учил делать следующее:
NAS отдает Acct-Update пакет, freeradius выполняет запрос в базе, база возвращает на это дело атрибут, freeradius передает этот атрибут NAS'у? Уже неделю бьюсь, такое ощущение, что все, что делает freeradius - только лишь проверяет, успешно ли выполнился запрос, а все, что было в ответе на этот запрос, просто игнорирует.

Содержание

Сообщения в этом обсуждении
"freeradius + SQL"
Отправлено Tester , 21-Фев-05 10:26 
>Народ, кто-нибудь сабжевую связку учил делать следующее:
>NAS отдает Acct-Update пакет, freeradius выполняет запрос в базе, база возвращает на
>это дело атрибут, freeradius передает этот атрибут NAS'у? Уже неделю бьюсь,
>такое ощущение, что все, что делает freeradius - только лишь проверяет,
>успешно ли выполнился запрос, а все, что было в ответе на
>этот запрос, просто игнорирует.

А что это за NAS, который понимает атрибут в ответ на свой аккаунтинг-пакет?


"freeradius + SQL"
Отправлено Beginner , 21-Фев-05 13:00 
>Народ, кто-нибудь сабжевую связку учил делать следующее:
>NAS отдает Acct-Update пакет, freeradius выполняет запрос в базе, база возвращает на
>это дело атрибут, freeradius передает этот атрибут NAS'у? Уже неделю бьюсь,
>такое ощущение, что все, что делает freeradius - только лишь проверяет,
>успешно ли выполнился запрос, а все, что было в ответе на
>этот запрос, просто игнорирует.
запусти freeradius в режиме debug (кажется ключ -X) и посмотри что он принимает от NAS и что ему возвращает. Сразу будет видно где что передается.



"freeradius + SQL"
Отправлено John Smith , 21-Фев-05 19:27 
IMHO смотреть то нужно как раз таки на стороне NAS
freeradius отправлять то может и отправляет, а вот получает ли это дело NAS?

"freeradius + SQL"
Отправлено GateKeeper , 23-Фев-05 15:55 
>IMHO смотреть то нужно как раз таки на стороне NAS
>freeradius отправлять то может и отправляет, а вот получает ли это дело
>NAS?

Хинт: NAS - mpd с патчем для атрибута Drop-User. И он реально отрабатывает этот атрибут. radclient же показал, что freeradius этот атрибут, получив его из DB, в mpd не пересылает. Таким образом, атрибут дохнет в недрах freeradius.


"freeradius + SQL"
Отправлено Beginner , 24-Фев-05 08:18 
>>IMHO смотреть то нужно как раз таки на стороне NAS
>>freeradius отправлять то может и отправляет, а вот получает ли это дело
>>NAS?
>
>Хинт: NAS - mpd с патчем для атрибута Drop-User. И он реально
>отрабатывает этот атрибут. radclient же показал, что freeradius этот атрибут, получив
>его из DB, в mpd не пересылает. Таким образом, атрибут дохнет
>в недрах freeradius.


Какой конкретно атрибут дохнет?


"freeradius + SQL"
Отправлено GateKeeper , 24-Фев-05 16:32 
>Какой конкретно атрибут дохнет?

Вышеуказанный Drop-User. Насколько я понял этот процесс, в freenibs за формирование этого атрибута от имени freeradius отвечал модуль rlm_nibs, здесь же этого модуля нет (и не нужен), и атрибут формируется еще в базе. Дальше радиуса этот атрибут не проходит.


"freeradius + SQL"
Отправлено GateKeeper , 26-Фев-05 18:25 
Все. Проблема решена. Пришлось править исходники freeradius. Всем спасибо.

"freeradius + SQL"
Отправлено Beginner , 28-Фев-05 08:43 
>Все. Проблема решена. Пришлось править исходники freeradius. Всем спасибо.

Не пришлешь заплатку? Может пригодится, а то я тоже эту хрень сейчас ковыряю.


"freeradius + SQL"
Отправлено ak , 28-Фев-05 09:38 
>>Все. Проблема решена. Пришлось править исходники freeradius. Всем спасибо.
>
>Не пришлешь заплатку? Может пригодится, а то я тоже эту хрень сейчас
>ковыряю.


а еще лучше - так выложить гденить..

думаю тема многим интересна


"freeradius + SQL"
Отправлено GateKeeper , 28-Фев-05 17:13 
>а еще лучше - так выложить гденить..
>
>думаю тема многим интересна

За правильность использованных методов не отвечаю, но в моих условиях работает:

diff -rc /usr/ports/net/freeradius/work/freeradius-1.0.2/src/modules/rlm_sql/rlm_sql.c /usr/local/src/freeradius/freeradius-1.0.2/src/modules/rlm_sql/rlm_sql.c
*** /usr/ports/net/freeradius/work/freeradius-1.0.2/src/modules/rlm_sql/rlm_sql.c    Thu Sep 30 18:54:22 2004
--- /usr/local/src/freeradius/freeradius-1.0.2/src/modules/rlm_sql/rlm_sql.c    Mon Feb 28 17:05:45 2005
***************
*** 883,889 ****
--- 883,892 ----
  
      SQLSOCK *sqlsocket = NULL;
      VALUE_PAIR *pair;
+     VALUE_PAIR *check_tmp = NULL;
+     VALUE_PAIR *reply_tmp = NULL;
      SQL_INST *inst = instance;
+     int     found = 0;
      int    ret = RLM_MODULE_OK;
      int     numaffected = 0;
      int     acctstatustype = 0;
***************
*** 958,963 ****
--- 961,973 ----
                      ret = RLM_MODULE_FAIL;
                  }
                  else {
+                     found = sql_getvpdata(inst, sqlsocket, &check_tmp, querystr, PW_VP_USERDATA);
+                     if (found > 0) {
+                         radius_xlat(querystr, sizeof(querystr), inst->config->authorize_group_check_query, request, sql_escape_func);
+                         sql_getvpdata(inst, sqlsocket, &check_tmp, querystr, PW_VP_GROUPDATA);
+                         radius_xlat(querystr, sizeof(querystr), inst->config->authorize_reply_query, request, sql_escape_func);
+                         sql_getvpdata(inst, sqlsocket, &reply_tmp, querystr, PW_VP_USERDATA);
+                     }
                      numaffected = (inst->module->sql_affected_rows)(sqlsocket, inst->config);
                      if (numaffected < 1) {
  
***************
*** 1106,1111 ****
--- 1116,1125 ----
  
      }
  
+     pairxlatmove(request, &request->reply->vps, &reply_tmp);
+     pairxlatmove(request, &request->config_items, &check_tmp);
+     pairfree(&reply_tmp);
+     pairfree(&check_tmp);
      sql_release_socket(inst, sqlsocket);
  
      return ret;