Аутентификация с учетом Calling-Id-Station
Материал из BiTel WiKi
(Различия между версиями)
Admin (Обсуждение | вклад) (Новая страница: «Версия биллинга 5.0. Обрабатывается событие RADIUS-аунтификации. Необходимо сделать так, чтоб…») |
Pitman (Обсуждение | вклад) м |
||
(4 промежуточные версии не показаны) | |||
Строка 11: | Строка 11: | ||
private CheckLoginLimit(DialUpLogin login, mid) { | private CheckLoginLimit(DialUpLogin login, mid) { | ||
- | query = "SELECT COUNT(*) FROM user_login_limit_"+mid+" WHERE type_con=5"; | + | // Проверяет, существуют ли у данного логина ограничения с типом 5 (На Calling-Station-Id). |
+ | query = "SELECT COUNT(*) FROM user_login_limit_"+mid+" WHERE type_con=5 AND lid="+login.getId(); | ||
ps = con.prepareStatement(query); | ps = con.prepareStatement(query); | ||
rs = ps.executeQuery(); | rs = ps.executeQuery(); | ||
Строка 18: | Строка 19: | ||
private AddLoginLimit(int mid, DialUpLogin login, String csi) { | private AddLoginLimit(int mid, DialUpLogin login, String csi) { | ||
+ | // Добавляет в список ограничений два. Первое - разрешает заходить с нужного Calling-Station-Id (параметр csi), второе - запрещает выходить с любых других IP/MAC/телефонов | ||
lm = new DialUpLoginManager(con, mid); | lm = new DialUpLoginManager(con, mid); | ||
+ | // Пустой массив временных масок, null вызывает Null Pointer Exception | ||
List cond = new ArrayList(); | List cond = new ArrayList(); | ||
- | lm.updateLimitService(login.getId(), "0", 5, "0", csi, null, null, "", | + | lm.updateLimitService(login.getId(), "0", 5, "0", csi, null, null, "", 1, cond); |
+ | |||
lm.updateLimitService(login.getId(), "0", 5, "1", "*", null, null, "", 0, cond); | lm.updateLimitService(login.getId(), "0", 5, "1", "*", null, null, "", 0, cond); | ||
} | } | ||
Строка 30: | Строка 34: | ||
csi = request.getStringAttribute(RadiusStandartAttributes.Calling_Station_Id); | csi = request.getStringAttribute(RadiusStandartAttributes.Calling_Station_Id); | ||
- | if (! CheckLoginLimit(login, mid)) { | + | if (null == csi) { |
- | + | print ("Not found MAC address in the ACCOUNTING-REQUEST."); | |
+ | } else { | ||
+ | if (! CheckLoginLimit(login, mid)) { | ||
+ | AddLoginLimit(mid, login, csi); | ||
+ | } | ||
} | } | ||
</source> | </source> |
Текущая версия на 05:13, 14 октября 2010
Версия биллинга 5.0. Обрабатывается событие RADIUS-аунтификации.
Необходимо сделать так, чтобы в модуле Dial-Up у абонента при первом дозвоне фиксировалось значение атрибута Calling-Id-Station (будь то номер телефона, MAC-адрес или IP-адрес) и при последующих дозвонах доступ разрешался только с этого адреса/телефона. Сброс ограничения осуществляется по звонку в ТП.
import bitel.billing.server.dialup.bean.DialUpLoginManager; import bitel.billing.server.dialup.bean.DialUpLogin; import bitel.billing.server.radius.RadiusStandartAttributes; import java.util.List; private CheckLoginLimit(DialUpLogin login, mid) { // Проверяет, существуют ли у данного логина ограничения с типом 5 (На Calling-Station-Id). query = "SELECT COUNT(*) FROM user_login_limit_"+mid+" WHERE type_con=5 AND lid="+login.getId(); ps = con.prepareStatement(query); rs = ps.executeQuery(); return rs.next() && rs.getInt(1) > 0; } private AddLoginLimit(int mid, DialUpLogin login, String csi) { // Добавляет в список ограничений два. Первое - разрешает заходить с нужного Calling-Station-Id (параметр csi), второе - запрещает выходить с любых других IP/MAC/телефонов lm = new DialUpLoginManager(con, mid); // Пустой массив временных масок, null вызывает Null Pointer Exception List cond = new ArrayList(); lm.updateLimitService(login.getId(), "0", 5, "0", csi, null, null, "", 1, cond); lm.updateLimitService(login.getId(), "0", 5, "1", "*", null, null, "", 0, cond); } mid = 1; login = event.getLogin(); request = event.getRequest(); csi = request.getStringAttribute(RadiusStandartAttributes.Calling_Station_Id); if (null == csi) { print ("Not found MAC address in the ACCOUNTING-REQUEST."); } else { if (! CheckLoginLimit(login, mid)) { AddLoginLimit(mid, login, csi); } }