Биллинговая система Nodeny
22 Ноября 2024, 11:15:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2
  Печать  
Автор Тема: MAC в списке авторизаций  (Прочитано 13341 раз)
Demeo
NoDeny
Постоялец
*

Карма: 6
Offline Offline

Сообщений: 204


Просмотр профиля Email
« : 02 Июня 2016, 18:23:44 »

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

Чешется добавить в лог авторизаций в клиентской статистике МАС, с которого собственно авторизация пришла.
Сейчас МАС-и пишутся в таблицу dblogin процедурой radreply из запросов радиуса. Как заставить их переноситься в таблицу login и высветить в админке?
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #1 : 02 Июня 2016, 21:03:50 »

а зачем что то куда то переносить .

select  и вставть куда нужно в админку.
Записан
Demeo
NoDeny
Постоялец
*

Карма: 6
Offline Offline

Сообщений: 204


Просмотр профиля Email
« Ответ #2 : 02 Июня 2016, 21:09:57 »

Я так понял, что данные авторизации периодически из таблицы dblogin обрабатываются и переносятся в таблицу login, а с нее уже выводится информация в список авторизаций
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #3 : 02 Июня 2016, 21:48:49 »

Я так понял, что данные авторизации периодически из таблицы dblogin обрабатываются и переносятся в таблицу login, а с нее уже выводится информация в список авторизаций
ну зачем что то кудато переносить?
вам надо отобразить в веб морде - то не все равно  с какой таблицы брать данные ?
или если уж хочтся то измените процедуру радиуса стоп
Записан
Demeo
NoDeny
Постоялец
*

Карма: 6
Offline Offline

Сообщений: 204


Просмотр профиля Email
« Ответ #4 : 03 Июня 2016, 10:45:47 »

Так все процедуры пишут в dblogin.
Мне переносить не надо - ядро все само переносит. Пусть будет stop - но как мне сказать ядру записать мас в таблицу?

Я так понял, что этот кусок
Код:
# ==========================================================
# На основе хеша %AuthQueue
# - установка в таблице users состояния авторизации клиентов
# - запись в таблицу логинов
# - установка состояния now_on в таблице users_trf
sub SetAuthInDB
{
 my ($cod,$err,$i,$id,$insert,$now_on,$rows,$st,$sql,$sql0,$sql1,$time);
 my %f;
 $i=0;
 $sql=$sql0=$sql1='';
 $insert="INSERT INTO login (mid,act,time) VALUES";
 foreach $id (keys %AuthQueue)
 {
    ($st,$cod,$now_on,$time,$err)=@{$AuthQueue{$id}};
    next if ($Uauth{$id} eq $st) && !$err; # Текущее состояние авторизации такое же как и заказанное и не было ошибок записи текущего состояния
    $Uauth{$id}=$st;
    unless( $err )
    {  # если была ошибка - в логи не пишем - использовались групповые запросы
       $sql.="($id,$cod,$time),";
       if ($i++>50)
       {  # формируем групповые insert
          $i=0;
          chop $sql;
          &sqldo("$insert $sql");
          $sql='';
       }
    }
    $now_on? ($sql1.="$id,") : ($sql0.="$id,"); # скобки не убирать. $err не имеет значение - групповой запрос не insert, а update
    next if &sqldo("UPDATE users SET auth='$st' WHERE id=$id LIMIT 1");
    @{$f{$id}}=($st,$cod,$now_on,$time,1);
 }

 if ($sql)
 {
    chop $sql;
    &sqldo("$insert $sql",'Записи о текущих авторизациях');
 }

 chop $sql0;
 chop $sql1;
 $sql0 && &sqldo("UPDATE users_trf SET now_on=0 WHERE uid IN ($sql0)");
 $sql1 && &sqldo("UPDATE users_trf SET now_on=1 WHERE uid IN ($sql1)");

 %AuthQueue=%f;
}
Но что надо добавить?
Записан
Demeo
NoDeny
Постоялец
*

Карма: 6
Offline Offline

Сообщений: 204


Просмотр профиля Email
« Ответ #5 : 03 Июня 2016, 11:26:56 »

Так уже делал - выдает ошибку

sub SetAuthInDB
{
 my ($cod,$err,$i,$id,$insert,$now_on,$rows,$st,$sql,$sql0,$sql1,$time,$mac);
 my %f;
 $i=0;
 $sql=$sql0=$sql1='';
 $insert="INSERT INTO login (mid,act,time,mac) VALUES";
 foreach $id (keys %AuthQueue)
 {
    ($st,$cod,$now_on,$time,$mac,$err)=@{$AuthQueue{$id}};
    next if ($Uauth{$id} eq $st) && !$err; # Текущее состояние авторизации такое же как и заказанное и не было ошибок записи текущего состояния
    $Uauth{$id}=$st;
    unless( $err )
    {  # если была ошибка - в логи не пишем - использовались групповые запросы
       $sql.="($id,$cod,$time,$mac),";
       if ($i++>50)
       {  # формируем групповые insert
          $i=0;
          chop $sql;
          &sqldo("$insert $sql");
          $sql='';
       }
    }
    $now_on? ($sql1.="$id,") : ($sql0.="$id,"); # скобки не убирать. $err не имеет значение - групповой запрос не insert, а update
    next if &sqldo("UPDATE users SET auth='$st' WHERE id=$id LIMIT 1");
    @{$f{$id}}=($st,$cod,$now_on,$time,$mac,1);
 }

 if ($sql)
 {
    chop $sql;
    &sqldo("$insert $sql",'Записи о текущих авторизациях');
 }

 chop $sql0;
 chop $sql1;
 $sql0 && &sqldo("UPDATE users_trf SET now_on=0 WHERE uid IN ($sql0)");
 $sql1 && &sqldo("UPDATE users_trf SET now_on=1 WHERE uid IN ($sql1)");

 %AuthQueue=%f;
}

Мож я чего упустил?
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #6 : 03 Июня 2016, 11:38:11 »

$insert="INSERT INTO login (mid,act,time,mac) VALUES";

а  

show create table login;

+


после
foreach $id (keys %AuthQueue)
 {
    ($st,$cod,$now_on,$time,$mac,$err)=@{$AuthQueue{$id}};

сделайте вывод на екран переменых $st,$cod,$now_on,$time,$mac,$err


Записан
Demeo
NoDeny
Постоялец
*

Карма: 6
Offline Offline

Сообщений: 204


Просмотр профиля Email
« Ответ #7 : 03 Июня 2016, 13:23:05 »

Код:
| login | CREATE TABLE `login` (
  `mid` mediumint(9) NOT NULL DEFAULT '0',
  `act` tinyint(4) NOT NULL DEFAULT '0',
  `time` int(11) DEFAULT NULL,
  `mac` char(32) NOT NULL,
  KEY `mid` (`mid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 |

Цитировать
после
foreach $id (keys %AuthQueue)
 {
    ($st,$cod,$now_on,$time,$mac,$err)=@{$AuthQueue{$id}};

сделайте вывод на екран переменых $st,$cod,$now_on,$time,$mac,$err

В этом я не силен
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #8 : 03 Июня 2016, 16:12:19 »

на глаз  тут

$sql.="($id,$cod,$time,$mac),";
на

$sql.="($id,$cod,$time,'$mac'),";

и какую ошибку выдает ?
Записан
Demeo
NoDeny
Постоялец
*

Карма: 6
Offline Offline

Сообщений: 204


Просмотр профиля Email
« Ответ #9 : 04 Июня 2016, 09:51:01 »

В случае с $sql.="($id,$cod,$time,$mac),"; выдает ошибки:

Код:
DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 at /usr/local/nodeny/nodeny.pl line 517.
DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 at /usr/local/nodeny/nodeny.pl line 512.

Иногда такое...

Код:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '),(43,47,1465026380,)' at line 1 at /usr/local/nodeny/nodeny.pl line 517.

С кавычками ошибок не выдает, но в таблицу нифига не пишет
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #10 : 04 Июня 2016, 09:57:31 »

ну значит $mac пустое
надо смотреть выще
где формируется
@{$AuthQueue{$id}};

поэтому и говорил сделать вывод на екран .
посмотрите как оформленно дебаг

Записан
Demeo
NoDeny
Постоялец
*

Карма: 6
Offline Offline

Сообщений: 204


Просмотр профиля Email
« Ответ #11 : 04 Июня 2016, 11:20:58 »

Код:
$V && $V<$debug && &debug(sprintf("*>*>*>*",$st,$cod,$now_on,$time,$mac,$err));

Так пишет только *>*>*>*
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #12 : 04 Июня 2016, 11:34:38 »

Код:
$V && $V<$debug && &debug(sprintf("*>*>*>*",$st,$cod,$now_on,$time,$mac,$err));

Так пишет только *>*>*>*
не верно оформленно.


@{$AuthQueue{$id}};

ну не тут тут мака . ищите выше  где формируется...
 
Записан
Demeo
NoDeny
Постоялец
*

Карма: 6
Offline Offline

Сообщений: 204


Просмотр профиля Email
« Ответ #13 : 04 Июня 2016, 14:04:13 »

По ходу пишет только числовые значения...

$AuthQueue{$id}[4]='0'; - работает
$AuthQueue{$id}[4]='noop'; - не работает
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #14 : 04 Июня 2016, 18:41:16 »

По ходу пишет только числовые значения...

$AuthQueue{$id}[4]='0'; - работает
$AuthQueue{$id}[4]='noop'; - не работает

почему так решили ?
это же просто массив

#!/usr/local/bin/perl

$id=123;
$AuthQueue{$id}[4]='noop';
print $AuthQueue{$id}[4]."\n";
1;

./t.pl
noop

вот запись в мускул тут есть разница писать инт или стринг
стринг должен быть экранирован
Записан
Страниц: [1] 2
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!