Аутентификация с учетом Calling-Id-Station

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «Версия биллинга 5.0. Обрабатывается событие RADIUS-аунтификации. Необходимо сделать так, чтоб…»)
м
 
(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, "", 0, cond);
+
     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) {
-
    AddLoginLimit(mid, login, 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);
  }
}
Личные инструменты