Автозаполнение нескольких CID

Модуль организации Diulup и VPN доступа
Ответить
W1R0X
Сообщения: 6
Зарегистрирован: Вт апр 17, 2012 9:05 am

Автозаполнение нескольких CID

Сообщение W1R0X »

В коде увидел, что реализована возможность через точку с запятой ";" задавать в биллинге несколько CID. Добавил поддержку автозаполнения этих самых CID.

Необходимо выполнить SQL запрос, да бы увеличить вместимость поля CID

Код: Выделить всё

ALTER TABLE  `dv_main` CHANGE  `cid`  `cid` VARCHAR( 90 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT  '';
90 будет достаточно для 5 MAC адресов


В конфиг (./libexec/config.pl) необходимо добавить

Код: Выделить всё

$conf{MAC_AUTO_ASSIGN_MAX}=3;
3 - количество разрешенных MAC адресов для авторизации, чтобы абиллс работал как обычно достаточно присвоить переменной 1


Небольшой патчик для Abills 0.54b ("patch -p0 < code.patch" из /usr/abills/)

Код: Выделить всё

*** Abills/mysql/Auth.pm.orig   2012-06-19 10:08:17.139171001 +0700
--- Abills/mysql/Auth.pm        2012-06-19 10:27:33.549171002 +0700
***************
*** 757,770 ****
    }
  
    #Auto assing MAC in first connect
    if ( $CONF->{MAC_AUTO_ASSIGN}
!     && $self->{CID} eq ''
      && $RAD->{CALLING_STATION_ID}
      && $RAD->{CALLING_STATION_ID} =~ /:|\-/
      && $RAD->{CALLING_STATION_ID} !~ /\//)
    {
      $self->query(
!       $db, "UPDATE dv_main SET cid='$RAD->{CALLING_STATION_ID}'
       WHERE uid='$self->{UID}';", 'do'
      );
    }
--- 757,773 ----
    }
  
    #Auto assing MAC in first connect
+   my @AUTO_CID_POOL = split(/;/, $self->{CID});
    if ( $CONF->{MAC_AUTO_ASSIGN}
!     && @AUTO_CID_POOL lt $CONF->{MAC_AUTO_ASSIGN_MAX}
!     && !($RAD->{CALLING_STATION_ID} ~~ @AUTO_CID_POOL)
      && $RAD->{CALLING_STATION_ID}
      && $RAD->{CALLING_STATION_ID} =~ /:|\-/
      && $RAD->{CALLING_STATION_ID} !~ /\//)
    {
+     my $CIDS = join(';',@AUTO_CID_POOL,$RAD->{CALLING_STATION_ID});
      $self->query(
!       $db, "UPDATE dv_main SET cid='$CIDS'
       WHERE uid='$self->{UID}';", 'do'
      );
    }
***************
*** 825,830 ****
--- 828,836 ----
    }
  
    my @CID_POOL = split(/;/, $self->{CID});
+   if ( @CID_POOL lt $CONF->{MAC_AUTO_ASSIGN_MAX} ){
+     @CID_POOL = $RAD->{CALLING_STATION_ID}
+   }
  
    #If auth from DHCP
    if ($CONF->{DHCP_CID_IP} || $CONF->{DHCP_CID_MAC} || $CONF->{DHCP_CID_MPD}) {
Последний раз редактировалось W1R0X Чт июн 28, 2012 7:44 am, всего редактировалось 2 раза.

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Автозаполнение нескольких CID

Сообщение ~AsmodeuS~ »

интересно как оно будет блочить по неизвестному сиду если оно его заносит в базу

W1R0X
Сообщения: 6
Зарегистрирован: Вт апр 17, 2012 9:05 am

Re: Автозаполнение нескольких CID

Сообщение W1R0X »

В базу заносятся только первые $CONF->{MAC_AUTO_ASSIGN_MAX}

Код: Выделить всё

@AUTO_CID_POOL lt $CONF->{MAC_AUTO_ASSIGN_MAX}

Ответить