forum.bitel.ru http://forum.bitel.ru/ |
|
Ошибки скрипта предобработки DialUp http://forum.bitel.ru/viewtopic.php?f=5&t=1387 |
Страница 1 из 1 |
Автор: | Mike [ 21 авг 2008, 14:59 ] |
Заголовок сообщения: | Ошибки скрипта предобработки DialUp |
Создал скрипт предобработки в описании Dialup NAS-a: 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.*; login_radius = request.getStringAttribute( 1 ); password_radius = request.getStringAttribute( 2 ); // event.getRequest|getResponse|getLogin|getContract|getErrorCode login = event.getLogin(); // Ищем пароль пользователя ps = con.prepareStatement( "SELECT pswd FROM user_login_2 WHERE id=?" ); ps.setInt( 1, login.getId() ); rs = ps.executeQuery(); while( rs.next() ) password_db = rs.getInt( 1 ); errCode = event.getErrorCode(); // Если логину в базе соответствует конкретный пароль, то заменяем его на введеный в момент аутентификации и даем AUTH_REJECT. if( password_db == "неизвестен" ) { ps = con.prepareStatement( "UPDATE user_login_2 SET password=? WHERE id=?" ); ps.setInt( 1, password_radius ); ps.setInt( 2, login.getId() ); rs = ps.executeQuery(); errCode = 2; response = event.getResponse(); response.setPacketType( RadiusPacket.AUTHENTICATION_REJECT ); } При получении пакета на аутентификацию скрипт выдает ошибку: Sourced file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : Attempt to resolve method: getLogin() on undefined variable or class name: event : at Line: 11 : in file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : event .getLogin ( ) at bsh.UtilEvalError.toEvalError(Unknown Source) at bsh.UtilEvalError.toEvalError(Unknown Source) at bsh.BSHMethodInvocation.eval(Unknown Source) at bsh.BSHPrimaryExpression.eval(Unknown Source) at bsh.BSHPrimaryExpression.eval(Unknown Source) at bsh.BSHAssignment.eval(Unknown Source) at bsh.Interpreter.eval(Unknown Source) at bsh.Interpreter.eval(Unknown Source) at bsh.Interpreter.eval(Unknown Source) at bitel.billing.server.processor.DefaultNASInfo.processRequestWithScript(DefaultNASInfo.java:275) at bitel.billing.server.processor.dialup.DialUpNASInfo.prepareAuthRequest(DialUpNASInfo.java:220) at bitel.billing.server.radius.RadiusRequestThread.processRequest(RadiusRequestThread.java:117) at bitel.billing.server.radius.RadiusRequestThread.run(RadiusRequestThread.java:48) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Где я ошибся? |
Автор: | stark [ 21 авг 2008, 17:20 ] |
Заголовок сообщения: | |
В этот скрипт не передаесcя перменная event . Там есть только request, con, setup.. вообще логин можно получить так : req.getStringAttribute(RadiusStandartAttributes.User_Name ) Вот есть такой метод получения логина из request , может быть поможет : Код: protected Login getLogin( RadiusPacket req, RadiusPacket resp )
{ DialUpLogin result = null; String userName = Utils.deleteAfterDog( req.getStringAttribute( RadiusStandartAttributes.User_Name ) ); if ( userName != null ) { int pos = userName.indexOf( '\\' ); if( pos >= 0 ) { userName = userName.substring( pos + 1 ); } Connection con = setup.getDBConnectionFromPool(); ; try { result = new DialUpLoginManager( con, mid ).findLogin( userName, new Date() ); } catch ( Exception ex ) { ex.printStackTrace(); } finally { setup.returnConToPool( con ); } } return result; } |
Автор: | Mike [ 22 авг 2008, 13:40 ] |
Заголовок сообщения: | |
Я размещал скрипт в "Скрипт предобработки" в "Редакторе NASов". А куда я должен его разместить, чтобы even был виден и все отрабатывало? |
Автор: | S [ 22 авг 2008, 18:52 ] |
Заголовок сообщения: | |
Скрипт на RADIUS-аутентификацию размещается в скриптах предобработки, откуда собственно и берутся данные: время, логин и т.п. В зависимости от типа скрипта (шедулер, радиус, таймер) соответственно отрабатывают предопределенные функции(event.getRequest и т.п.). Вам нужно скрипт предобработки внести на договор, тогда будет искаться логин, в вашем случае, и далее действия которые требуются. http://www.bgbilling.ru/v4.4/doc/ch02.html#bgbs |
Автор: | Maj [ 12 сен 2008, 02:57 ] |
Заголовок сообщения: | |
Приветствую! Пытаюсь получить логин следующим образом: Код: 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.*; ... login = event.getStringAttribute( 1 ); ... в итоге получаю ошибку: Цитата: EXCEPTIONS: Sourced file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : Error in method invocation: Method getStringAttribute( int ) not found in class'bitel.billing.server.processor.DefaultProcessor$RadiusAuthenticationEvent'Sourced file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : Error in method invocation: Method getStringAttribute( int ) not found in class'bitel.billing.server.processor.DefaultProcessor$RadiusAuthenticationEvent' : at Line: 12 : in file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : event .getStringAttribute ( 1 ) Что может быть не так? Классы, вроде бы, описаны все. Сейчас тестовый скрипт привязан к договору. Пробовал привязывать к NAS, заменяя event на request - получил: Цитата: Sourced file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : Error in method invocation: No args method getErrorCode() not found in class'bitel.billing.server.radius.RadiusPacket' : at Line: 9 : in file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : request .getErrorCode ( ) т.е., проблема возникает из-за куска кода получения кода ошибки. Код: ...
errCode = event.getErrorCode(); .... Запутался... |
Автор: | Amir [ 12 сен 2008, 14:53 ] |
Заголовок сообщения: | |
в скрипте предобработки NAS объекта event нет, т.к. скрипт запускается сразу после получения пакета, до поиска логина. если же скрипт стоит на событие аутентификации, то нужно не login = event.getStringAttribute( 1 ); а login = event.getRequest().getStringAttribute( 1 ); |
Автор: | Maj [ 12 сен 2008, 16:18 ] |
Заголовок сообщения: | |
Да, про отсутствие event мне известно. Большое спасибо! Вот еще такой вопрос: (небольшой оффтопик) можно каким-либо образом из скрипта выдать IP-адрес из определенного пула адресов? |
Автор: | Администратор [ 15 сен 2008, 11:36 ] |
Заголовок сообщения: | |
1. Тупой в лоб способ Создайте в базе таблицу, типа ИП адрес - когда выдавался и выдавайте наиболее давно выданный. Т.к. отслеживать их освобождение не получится.. 2. Вариация на ту же тему, но быстрее Создайте Java класс, сделайте его статическим и реализуйте в нем указанный выше алгоритм. К этому классу вы сможете обращаться из скрипта. Метод быстрее, т.к. не трогает базу, но при старте радиуса как-то нужно инициализировать из базы занятые в текущй момент адреса. Хотя можно и по таблице log_session, конечно. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |