forum.bitel.ru
http://forum.bitel.ru/

пустой ip в скрипте поведения для 691 ошибки
http://forum.bitel.ru/viewtopic.php?f=5&t=2339
Страница 1 из 1

Автор:  neo100 [ 22 май 2009, 20:50 ]
Заголовок сообщения:  пустой ip в скрипте поведения для 691 ошибки

Доброго времени суток!

Помогите, пожалуйста, разобраться!

Вот мой скрипт предобработки:
-----------------------------------------------------------------------
import bitel.billing.server.call.bean.Login;
import bitel.billing.server.radius.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.script.event.*;
import java.util.*;

// event.getRequest|getResponse|getLogin|getContract|getErrorCode
login = event.getLogin();

// Ищем пользователя и IP, привязанный к нему в таблице
// "radius_pair_ip_x", где "x" код модуля Dialup.
ps = con.prepareStatement( "SELECT ip FROM radius_pair_ip_1 WHERE id=?" );

ps.setInt( 1, login.getId() );
rs = ps.executeQuery();

login_ip = 0;
while( rs.next() )
login_ip = rs.getInt( 1 );

errCode = event.getErrorCode();

// Если логину не присвоен IP-адрес, то даем AUTH_REJECT.
if( login_ip == 0 )
{
print("ip was not found!");
errCode = 2;
response = event.getResponse();
response.setPacketType( RadiusPacket.AUTHENTICATION_REJECT );
}

// 0 - нет ошибки, 2 - ошибка ввода пароля.
if( errCode != 0 && errCode != 2 )
{

response = event.getResponse();

response.setPacketType( RadiusPacket.AUTHENTICATION_ACCEPT );

// Готовим аттрибуты на отдачу

// Service-Type = 2
raSt = new RadiusAttribute( 6 );
raSt.setIntValue( 2 );

// Framed-Protocol = 1
raFp = new RadiusAttribute( 7 );
raFp.setIntValue( 1 );

// Framed-IP-Address
raIp = new RadiusAttribute( 8 );
raIp.setIntValue( login_ip );

// Session-Timeout = 900 (15 min)
raStm = new RadiusAttribute( 27 );
raStm.setIntValue( 900 );

// Ascend-Client-Primary-DNS (192.168.0.3 или 3232235523 в DEC)
//rvaDNS = new RadiusVendorAttribute( 529, 135 );
//rvaDNS.setIntValue( 0 );

// Cisco-AV-Pair, устанавливаем WCCP-редирект на интерфейс
rva = new RadiusVendorAttribute( 9, 1 );
rva.setStringValue( "lcp:interface-config=ip wccp web-cache redirect in" );

// Cisco-AV-Pair, Устанавливаем access-list 155 на интерфейс
rvaAcc = new RadiusVendorAttribute( 9, 1 );
rvaAcc.setStringValue( "ip:inacl=155" );

response.addAttribute( raStm );
response.addAttribute( raSt );
response.addAttribute( raFp );
response.addAttribute( raIp );
//response.addVendorAttribute( rvaDNS );
response.addVendorAttribute( rva );
response.addVendorAttribute( rvaAcc );
}

// Пишем в специальную табличку текущий код ошибки, кроме Password Error,
// для дальнейшего вывода на специальной информационной страничке.
if( errCode != 2 )
{
ps = con.prepareStatement( "SELECT ip FROM dialup_conn_error WHERE ip=?" );

ps.setInt( 1, login_ip );
rs = ps.executeQuery();

found = false;
while( rs.next() )
found = true;

if( found )
ps = con.prepareStatement( "UPDATE dialup_conn_error SET error_code=? WHERE ip=?" );
else
ps = con.prepareStatement( "INSERT INTO dialup_conn_error(error_code,ip) VALUES(?,?)" );

ps.setInt( 1, errCode );
ps.setInt( 2, login_ip );

ps.executeUpdate();
}
-----------------------------------------------------------------------


Соединяюсь... не пускает! Смотрю логи:

-----------------------------------------------------------------------
GENERATE_TIME: 22.05.09 19:25:57
EXECUTION_STOP_TIME: 22.05.09 19:25:57
PROCESS_TIME: 20

OUT:
ip was not found!


ERROR:


EXCEPTIONS:


WARNINGS:
-----------------------------------------------------------------------

Так... раз "ip was not found!" значит не пускает кусок:
// Если логину не присвоен IP-адрес, то даем AUTH_REJECT.
if( login_ip == 0 )
{
print("ip was not found!");
errCode = 2;
response = event.getResponse();
response.setPacketType( RadiusPacket.AUTHENTICATION_REJECT );
}

меняю его на:
if( login_ip == 0 )
{
print("ip was not found!");
// errCode = 2;
// response = event.getResponse();
// response.setPacketType( RadiusPacket.AUTHENTICATION_REJECT );
}

Соединяюсь... OK! И IP прекрасно соединению назначился! Значит IP у соединения есть? Почему же его тогда не видит скрипт?

Адреса назначаю на циске так:
int virtual-template 3
....
peer default ip address pool bitel-pool

Код модуля диалап у меня 1 - все верно.... В чем же дело?

Автор:  Chaos [ 23 май 2009, 15:22 ]
Заголовок сообщения: 

1. Тут речь идет о железно привязанном IP. Он берется из таблицы базы этим куском
Код:
// Ищем пользователя и IP, привязанный к нему в таблице
// "radius_pair_ip_x", где "x" код модуля Dialup.
ps = con.prepareStatement( "SELECT ip FROM radius_pair_ip_1 WHERE id=?" );

ps.setInt( 1, login.getId() );
rs = ps.executeQuery();

login_ip = 0;
while( rs.next() )
login_ip = rs.getInt( 1 );

2. Это задумано автором, как привязка к договору и событию "Радиус-аутентификация" и в предобработке работать не будет.
IP привязывается логину здесь.

Вложения:
IP.jpg
IP.jpg [ 31.53 КБ | Просмотров: 2694 ]

Автор:  neo100 [ 25 май 2009, 15:43 ]
Заголовок сообщения: 

Спасибо! Теперь все ясно :)

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/