rlm_perl

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: rlm_perl

Сообщение NiTr0 »

Спад после 16.00 - это собссно вызванный включением rlm_perl :)
По части графиков - да, таки кактус, и таки загрузка делится на кол-во ядер. Но все равно - LA системы был порядка 10 в пике.

С rlm_perl правда радиус начал крашиться (без особой закономерности) - вот что в логах оставляет:

/var/log/messages:

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

kernel: radiusd[6843]: segfault at 0000000000004013 rip 00002aaaad941c48 rsp 0000000046e091c0 error 4
.........
kernel: radiusd[14005]: segfault at 0000000000000423 rip 00002aaaad941c48 rsp 000000004dc14330 error 4
radiusd.log:

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

Error: rlm_perl: perl_embed:: module = /usr/abills/libexec/rlm_perl.pl , func = authorize exit status= Can't call method "prepare" on an undefined value at /usr/abills/libexec/../Abills/mysql/main.pm line 153.
Error: rlm_perl: perl_embed:: module = /usr/abills/libexec/rlm_perl.pl , func = post_auth exit status= Can't call method "do" on an undefined value at /usr/abills/libexec/../Abills/mysql/main.pm line 146.
.......
 Error: rlm_perl: perl_embed:: module = /usr/abills/libexec/rlm_perl.pl , func = accounting exit status= Can't call method "prepare" on an undefined value at /usr/abills/libexec/../Abills/mysql/main.pm line 153.
Error: rlm_perl: perl_embed:: module = /usr/abills/libexec/rlm_perl.pl , func = accounting exit status= Can't call method "prepare" on an undefined value at /usr/abills/libexec/../Abills/mysql/main.pm line 153.
Версии радиуса и перла:

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

# radiusd -v
radiusd: FreeRADIUS Version 2.1.6, for host x86_64-unknown-linux-gnu, built on Aug  1 2009 at 00:29:37

# perl -v
This is perl, v5.8.8 built for x86_64-linux-thread-multi
Пр моделировании ситуации ошибки мускул-запроса (ставил неверный пароль в конфиг) - крашится радиус 2.1.6 и 2.1.7, не крашится 2.0.1. Буду копать дальше...

UPD:
В main.pm добавил то, что должно там было быть (проверку на существование собссно переменной $db) - в тестах не крашится.
Вот кусок кода:

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

  if (!defined ($db)) {
    $self->{errstr}="Uninitialized 'db' on query!";
    $self->{errno}=3;
    return $self->{errno};
   }
Посмотрим как оно вживую себя поведет...

UPD2:
При беглом просмотре кода сложилось такое впечатление, что при каждом запросе создается коннект к БД, но по окончанию запроса - коннект не обрывается :shock: Я ошибаюсь? Или нет?

Radist
Сообщения: 79
Зарегистрирован: Вт июл 28, 2009 3:22 am

Re: rlm_perl

Сообщение Radist »

фря 6,3
-не обновленные порты
-перл 5.8.8
потом обновил порты и поставил все что нужно
радиус 1,7
абиллс 0,42
пппое
не запускается
все ставил с портов
выдает:
Wed Sep 16 12:39:43 2009 : Info: Starting - reading configuration files ...

Can't load '/usr/local/lib/perl5/5.8.8/mach/auto/POSIX/POSIX.so' for module POSIX:
/usr/local/lib/perl5/5.8.8/mach/auto/POSIX/POSIX.so: Undefined symbol "PL_sig_name" at
/usr/local/lib/perl5/5.8.8/mach/XSLoader.pm line 70.
at /usr/local/lib/perl5/5.8.8/mach/POSIX.pm line 26
Compilation failed in require at /usr/abills/libexec/config.pl line 168.
BEGIN failed--compilation aborted at /usr/abills/libexec/config.pl line 168.
Compilation failed in require at /usr/abills/libexec/rlm_perl.pl line 36.

сношу систему ставлю новую попробую поставить просто /usr/ports/lang/perl
не получиться, попробую 5,10, где то ниже сказано что нормально завелось

а что правда из-за перла не ставиться и mschap и m-чего-го тама

Ck-NoSFeRaTU
Сообщения: 54
Зарегистрирован: Ср фев 20, 2008 12:17 pm
Контактная информация:

Re: rlm_perl

Сообщение Ck-NoSFeRaTU »

Мда, у мну после обновления перла на 6.4 до 5.8.9 также крашится freeradius 1.1.7 при старте с Segmentation Fault 11, после вызова boot_Dynaloader в rlm_perl.so :-( Конкретного решения, кроме апдейта до 5.10 я так понял нет?

Radist
Сообщения: 79
Зарегистрирован: Вт июл 28, 2009 3:22 am

Re: rlm_perl

Сообщение Radist »

хм... у меня после установке перла 6-й версии и после обновления портов радиус при установке запросил установку перла 5,8,9

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: rlm_perl

Сообщение NiTr0 »

NiTr0 писал(а):При беглом просмотре кода сложилось такое впечатление, что при каждом запросе создается коннект к БД, но по окончанию запроса - коннект не обрывается :shock: Я ошибаюсь? Или нет?
После копаний в коде - выяснил, что таки я не ошибся :( Очевидно из-за этого и начинаются приколы с логами и т.д.

По ходу копания - назрел интересный вопрос: почему-то при закрытии коннекта в preauth в собссно postauth радиус ругается на утерянный коннект к базе в main.pm причем еще до заполнения радиус-аттрибутов :shock:

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

rad_recv: Access-Request packet from host 127.0.0.1 port 44025, id=172, length=62
        User-Name = "test"
        User-Password = "testpass"
        NAS-IP-Address = 192.168.255.91
        NAS-Port = 0
        Framed-Protocol = PPP
+- entering group authorize {...}
++[preprocess] returns ok
GOT CLONE -1427177968 0xc29fa0
Auth-Type := Accept
rlm_perl: Added pair Framed-Protocol = PPP
rlm_perl: Added pair User-Name = test
rlm_perl: Added pair User-Password = testpass
rlm_perl: Added pair Service-Type = Framed-User
rlm_perl: Added pair NAS-Port = 0
rlm_perl: Added pair NAS-IP-Address = 192.168.255.91
rlm_perl: Added pair Reply-Message = Not enough money for re-activate
rlm_perl: Added pair Auth-Type = Reject
++[perl] returns reject
Using Post-Auth-Type Reject
+- entering group REJECT {...}
DBD::mysql::db do failed: MySQL server has gone away at /usr/abills/libexec/../Abills/mysql/main.pm line 152.
rlm_perl: Added pair Framed-Protocol = PPP
rlm_perl: Added pair User-Name = test
rlm_perl: Added pair User-Password = testpass
rlm_perl: Added pair Service-Type = Framed-User
rlm_perl: Added pair NAS-IP-Address = 192.168.255.91
rlm_perl: Added pair NAS-Port = 0
rlm_perl: Added pair Reply-Message = Not enough money for re-activate
rlm_perl: Added pair Auth-Type = Reject
rlm_perl: Added pair Post-Auth-Type = REJECT
++[perl] returns reject
P.S. При копании кода в некоторых участках сложилось ощущение, что читаю "индусский код" - чего стоит только конструкция вида:

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

my $log_print = sub {
...................
    else {
      log_print("$LOG_TYPE", "AUTH [$USER_NAME] NAS: $Nas->{NAS_ID} ($Nas->{NAS_IP}) $MESSAGE");
     }
...................
};
и соответственно вызов:

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

     $log_print->('LOG_INFO', $RAD->{USER_NAME}, "MS-CHAP PREAUTH FAILED$GT", { NAS => $nas });
Не, понимаю, можно при желании и ногой за ухом почесать - но нужно ли так извращаться?

Ну и + в процедуре вызова обработчика ошибок - пользуется глобальная переменная $RAD - т.е. работать процедура корректно с rlm_perl не будет.

Есть идея попробовать все функции вынести в инклайд файлы, которые уже подключать в рлм_перл или в обычный скрипт... Думаю, на днях реализую.

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: rlm_perl

Сообщение NiTr0 »

Итак, некоторые, кхм, недоработки, приводящие к проблемам с rlm_perl (предварительные результаты):
1) post_auth вызывается "как есть" из auth.pm - что есть неверно. Добавляем в конфиг радиуса вызов враппера с инициализацией скл соединения:

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

                func_post_auth = postauth
2) в журналирование в Nas.pm стоит добавить установку $db (а в идеале - вообще выкинуть журналирование оттуда, т.к. ф-и журналирования в нескольких местах - ИМХО избыточны. Но это я возможно сделаю позже - если ~Asmodeus~ согласится включить доработку в основное дерево):

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

--- Nas.pm.orig 2009-10-12 21:46:48.000000000 +0300
+++ Nas.pm      2009-10-12 21:46:14.000000000 +0300
@@ -523,6 +523,7 @@
  %DATA = $self->get_data($attr);
  # $date, $time, $log_type, $action, $user, $message
  $DATA{MESSAGE} =~ s/'/\\'/g;
+ $db = $DATA{DB} if (defined $DATA{DB});

  $self->query($db, "INSERT INTO errors_log (date, log_type, action, user, message, nas_id)
  values (now(), '$DATA{LOG_TYPE}', '$DATA{ACTION}', '$DATA{USER_NAME}', '$DATA{MESSAGE}',  '$self->{NAS_ID}');", 'do');

3) модифицирован rauth.pl (новое имя - rauth.pl.inc) - выкинут лишний код, в перспективе - подключать его как библиотеку ф-й к rauth.pl для rlm_exec

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

--- rauth.pl    2009-05-19 12:56:01.000000000 +0300
+++ rauth.pl.inc        2009-10-12 22:05:03.000000000 +0300
@@ -22,8 +22,8 @@
 # Max session tarffic limit  (Mb)
 my %auth_mod = ();
 require Abills::SQL;
-my $sql = Abills::SQL->connect($conf{dbtype}, $conf{dbhost}, $conf{dbname}, $conf{dbuser}, $conf{dbpasswd});
-my $db  = $sql->{db};
+#my $sql = Abills::SQL->connect($conf{dbtype}, $conf{dbhost}, $conf{dbname}, $conf{dbuser}, $conf{dbpasswd});
+#my $db  = $sql->{db};
 require Nas;
 $nas = undef;

@@ -47,14 +47,18 @@


   my $Nas = $attr->{NAS};
+  my $db = undef;

   if ($conf{debugmods} =~ /$LOG_TYPE/) {
     if ($conf{ERROR2DB} && $attr->{NAS}) {
+
+      $db = $attr->{DB} if ($attr->{DB});

       $Nas->log_add({LOG_TYPE => $log_levels{$LOG_TYPE},
                      ACTION   => 'AUTH',
                      USER_NAME=> "$USER_NAME",
-                     MESSAGE  => "$MESSAGE"
+                     MESSAGE  => "$MESSAGE",
+                     DB       => $db
                     });

      }
@@ -65,34 +69,6 @@
 };


-my $RAD = get_radius_params();
-if ($RAD->{NAS_IP_ADDRESS}) {
-  my $ret = get_nas_info($db, $RAD);
-  if (defined($ARGV[0]) && $ARGV[0] eq 'pre_auth') {
-    auth($db, $RAD, undef, { pre_auth => 1 });
-    exit 0;
-   }
-  elsif (defined($ARGV[0]) && $ARGV[0] eq 'post_auth') {
-    post_auth($RAD);
-    exit 0;
-   }
-
-
-  if($ret == 0) {
-    $ret = auth($db, $RAD, $nas);
-  }
-  #$db->disconnect();
-
-  if ($ret == 0) {
-    print $rr;
-   }
-  else {
-    print "Reply-Message = \"$RAD_REPLY{'Reply-Message'}\"\n";
-   }
-
-  exit $ret;
-}
-

 #*******************************************************************
 # get_nas_info();
@@ -113,16 +89,16 @@
 #
 if (defined($nas->{errno}) || $nas->{TOTAL} < 1) {
   # (defined($RAD->{NAS_IDENTIFIER})) ? $RAD->{NAS_IDENTIFIER} : ''
-  access_deny("$RAD->{USER_NAME}", "Unknow server '$RAD->{NAS_IP_ADDRESS}' [$nas->{errno}] $nas->{errstr}", 0);
+  access_deny($db, $RAD, "$RAD->{USER_NAME}", "Unknow server '$RAD->{NAS_IP_ADDRESS}' [$nas->{errno}] $nas->{errstr}", 0);
   $RAD_REPLY{'Reply-Message'}="Unknow server '$RAD->{NAS_IP_ADDRESS}'";
   return 1;
  }
 elsif(! defined($RAD->{USER_NAME}) || $RAD->{USER_NAME} eq '') {
-  #access_deny("$RAD->{USER_NAME}", "Disabled NAS server '$RAD->{NAS_IP_ADDRESS}'", 0);
+  #access_deny($db, $RAD, "$RAD->{USER_NAME}", "Disabled NAS server '$RAD->{NAS_IP_ADDRESS}'", 0);
   return 1;
  }
 elsif($nas->{NAS_DISABLE} > 0) {
-  access_deny("$RAD->{USER_NAME}", "Disabled NAS server '$RAD->{NAS_IP_ADDRESS}'", 0);
+  access_deny($db, $RAD, "$RAD->{USER_NAME}", "Disabled NAS server '$RAD->{NAS_IP_ADDRESS}'", 0);
   return 1;
 }

@@ -150,7 +126,7 @@
    $auth_mod{'default'} = Auth->new($db, \%conf);
    $r = $auth_mod{'default'}->pre_auth($RAD);
    if ($auth_mod{'default'}->{errno}) {
-     $log_print->('LOG_INFO', $RAD->{USER_NAME}, "MS-CHAP PREAUTH FAILED$GT", { NAS => $nas });
+     $log_print->('LOG_INFO', $RAD->{USER_NAME}, "MS-CHAP PREAUTH FAILED$GT", { NAS => $nas, DB => $db });
     }
    else {
       while(my($k, $v)=each(%{ $auth_mod{'default'}->{'RAD_CHECK'} })) {
@@ -163,7 +139,6 @@

  $rr = '';

-
 if(defined($AUTH{$nas->{NAS_TYPE}})) {
   if (! defined($auth_mod{"$nas->{NAS_TYPE}"})) {
     require $AUTH{$nas->{NAS_TYPE}} . ".pm";
@@ -195,7 +170,7 @@
      }

     my $CID = ($RAD->{CALLING_STATION_ID}) ? " CID: $RAD->{CALLING_STATION_ID} " : '';
-    access_deny("$RAD->{USER_NAME}", "$message$CID", $nas->{NAS_ID});
+    access_deny($db, $RAD, "$RAD->{USER_NAME}", "$message$CID", $nas->{NAS_ID});
     $RAD_CHECK{'Auth-Type'} = 'Reject';
     return $r;
   }
@@ -233,7 +208,7 @@
      }
     }

-   $log_print->('LOG_DEBUG', $RAD->{USER_NAME}, "$rr", { NAS => $nas});
+   $log_print->('LOG_DEBUG', $RAD->{USER_NAME}, "$rr", { NAS => $nas, DB => $db});
  }

  if ($begin_time > 0)  {
@@ -246,7 +221,7 @@

   my $CID = ($RAD->{CALLING_STATION_ID}) ? " CID: $RAD->{CALLING_STATION_ID} " : '';

-  $log_print->('LOG_INFO', $RAD->{USER_NAME}, "$CID$GT", { NAS => $nas});
+  $log_print->('LOG_INFO', $RAD->{USER_NAME}, "$CID$GT", { NAS => $nas, DB => $db});
   return $r;
 }

@@ -256,21 +231,21 @@
 # post_auth()
 #*******************************************************************
 sub post_auth {
-  my ($RAD) = @_;
+  my ($db, $RAD) = @_;
   my $reject_info = '';
   if (defined(%RAD_REQUEST)) {
   #  return 0;
     if ($RAD_REQUEST{'Calling-Station-Id'}) {
       $reject_info=" CID $RAD_REQUEST{'Calling-Station-Id'}";
      }
-    $log_print->('LOG_WARNING', $RAD_REQUEST{'User-Name'}, "REJECT Wrong password $reject_info$GT", { NAS => $nas});
+    $log_print->('LOG_WARNING', $RAD_REQUEST{'User-Name'}, "REJECT Wrong password $reject_info$GT", { NAS => $nas, DB => $db});
     return 0;
    }
   else {
     if ($RAD->{CALLING_STATION_ID}) {
       $reject_info=" CID $RAD->{CALLING_STATION_ID}";
      }
-    $log_print->('LOG_WARNING', $RAD->{USER_NAME}, "REJECT Wrong password$reject_info$GT", { NAS => $nas});
+    $log_print->('LOG_WARNING', $RAD->{USER_NAME}, "REJECT Wrong password$reject_info$GT", { NAS => $nas, DB => $db});
    }

   # return RLM_MODULE_OK;
@@ -282,9 +257,9 @@
 # access_deny($user, $message);
 #*******************************************************************
 sub access_deny {
-  my ($user_name, $message, $nas_num) = @_;
+  my ($db, $RAD, $user_name, $message, $nas_num) = @_;

-  $log_print->('LOG_WARNING', $user_name, "$message", { NAS => $nas});
+  $log_print->('LOG_WARNING', $user_name, "$message", { NAS => $nas, DB => $db});

   #External script for error connections
   if ($conf{AUTH_ERROR_CMD}) {
4) Собссно модификация rlm_perl.pl (пока - черновой, но вроде рабочий набросок - по крайней мере аутентификация):

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

--- rlm_perl.pl.orig    2008-11-12 10:59:23.000000000 +0200
+++ rlm_perl.pl 2009-10-12 22:11:25.000000000 +0300
@@ -10,7 +10,7 @@


 # This is hash wich hold original request from radius
-#my %RAD_REQUEST;
+my %RAD_REQ = ();
 # In this hash you add values that will be returned to NAS.
 #my %RAD_REPLY;
 #This is for check items
@@ -36,7 +36,7 @@
 require $Bin ."/config.pl";
 unshift(@INC, $Bin . '/../', $Bin . "/../Abills/$conf{dbtype}");

-require $Bin ."/rauth.pl";
+require $Bin ."/rauth.pl.inc";
 require $Bin ."/racct.pl";

 $nas = undef;
@@ -48,25 +48,26 @@
 #**********************************************************
 sub sql_connect {
        my $sql = Abills::SQL->connect($conf{dbtype}, $conf{dbhost}, $conf{dbname}, $conf{dbuser}, $conf{dbpasswd});
-  my $db  = $sql->{db};
+#  my $db  = $sql->{db};
   #$rc = $dbh->ping;

-  $RAD_REQUEST{NAS_IDENTIFIER}='' if (! $RAD_REQUEST{NAS_IDENTIFIER});
+  $RAD_REQ{NAS_IDENTIFIER}='' if (! $RAD_REQ{NAS_IDENTIFIER});

-  if (! $NAS_INFO{$RAD_REQUEST{NAS_IP_ADDRESS}.'_'.$RAD_REQUEST{NAS_IDENTIFIER}}) {
-    $nas = Nas->new($db, \%conf);
-    if (get_nas_info($db, \%RAD_REQUEST) == 0) {
-      $NAS_INFO{$RAD_REQUEST{NAS_IP_ADDRESS}.'_'.$RAD_REQUEST{NAS_IDENTIFIER}}=$nas;
+  if (! $NAS_INFO{$RAD_REQ{NAS_IP_ADDRESS}.'_'.$RAD_REQ{NAS_IDENTIFIER}}) {
+    $nas = Nas->new($sql->{db}, \%conf);
+    if (get_nas_info($sql->{db}, \%RAD_REQ) == 0) {
+      $NAS_INFO{$RAD_REQ{NAS_IP_ADDRESS}.'_'.$RAD_REQ{NAS_IDENTIFIER}}=$nas;
      }
     else {
        return;
      }
    }
   else {
-       $nas = $NAS_INFO{$RAD_REQUEST{NAS_IP_ADDRESS}.'_'.$RAD_REQUEST{NAS_IDENTIFIER}};
+       $nas = $NAS_INFO{$RAD_REQ{NAS_IP_ADDRESS}.'_'.$RAD_REQ{NAS_IDENTIFIER}};
+       $nas->{db} = $sql->{db};
    }

-  return $db;
+  return $sql;
 }

 #**********************************************************
@@ -74,43 +75,74 @@
 #
 #**********************************************************
 sub authorize {
+
   $begin_time = check_time();

   convert_radpairs();

-  my $db = sql_connect();
+  my $sql = sql_connect();
+
+  my $return = RLM_MODULE_REJECT;

-  if ( $db ) {
-       if (auth($db, \%RAD_REQUEST, $nas, { pre_auth => 1 }) == 0) {
-      if ( auth($db, \%RAD_REQUEST, $nas) == 0 ) {
+  if ( $sql->{db} ) {
+       if (auth($sql->{db}, \%RAD_REQ, $nas, { pre_auth => 1 }) == 0) {
+      if ( auth($sql->{db}, \%RAD_REQ, $nas) == 0 ) {
          #$RAD_CHECK{'User-Password'} = 'test12345';
-          return RLM_MODULE_OK;
+          $return = RLM_MODULE_OK;
        }
      }
+     $sql->{db}->disconnect;
+     $sql->{db}=undef;
+   }
+
+  return $return;
+}
+
+sub postauth {
+
+  $begin_time = check_time();
+
+  convert_radpairs();
+
+  my $sql = sql_connect();
+
+  my $return = RLM_MODULE_REJECT;
+
+  if ( $sql->{db} ) {
+       if (post_auth($sql->{db}, \%RAD_REQ)) {
+#         $return = RLM_MODULE_OK;
+     }
+     $sql->{db}->disconnect;
+     $sql->{db}=undef;
    }

-  return RLM_MODULE_REJECT;
+  return $return;
 }

+
 #**********************************************************
 # Function to handle authenticate
 #
 #**********************************************************
 sub authenticate {
+
   $begin_time = check_time();
   convert_radpairs();

-  my $db = sql_connect();
+  my $sql = sql_connect();
+  my $return = RLM_MODULE_REJECT;

-  if ( $db ) {
-    if ( auth($db, \%RAD_REQUEST, $nas) == 0 ) {
-       return RLM_MODULE_OK;
+  if ( $sql->{db} ) {
+    if ( auth($sql->{db}, \%RAD_REQ, $nas) == 0 ) {
+       $return = RLM_MODULE_OK;
      }
+     $sql->{db}->disconnect;
+     $sql->{db}=undef;
    }

   #$RAD_CHECK{'Auth-Type'} = 'Accept';
        #return RLM_MODULE_OK;
-       return RLM_MODULE_REJECT;
+       return $return;
 }


@@ -122,9 +154,11 @@
   $begin_time = check_time();
   convert_radpairs();

-  my $db = sql_connect();
-  if ( $db ) {
-     my $ret = acct($db, \%RAD_REQUEST, $nas);
+  my $sql = sql_connect();
+  if ( $sql->{db} ) {
+     my $ret = acct($sql->{db}, \%RAD_REQ, $nas);
+     $sql->{db}->disconnect;
+     $sql->{db}=undef;
    }

        return RLM_MODULE_OK;
@@ -142,7 +176,7 @@
                $k =~ tr/[a-z]/[A-Z]/;
                $r{$k}=$v;
         }
-  %RAD_REQUEST = %r;
+  %RAD_REQ = %r;
 }


Это все вокруг аутентификации. Аккаунтингом еще не занимался. To be continued...

P.S. У кого есть желание потестить или кто заметит явные ошибки - буду признателен за ответы.

chtito
Сообщения: 313
Зарегистрирован: Чт дек 13, 2007 11:03 am

Re: rlm_perl

Сообщение chtito »

Работает у кого нибудь с Perl 5.8.9 или 5.10? Или только 5.8.8?

star
Сообщения: 211
Зарегистрирован: Ср окт 11, 2006 4:27 pm
Контактная информация:

Re: rlm_perl

Сообщение star »

chtito писал(а):Работает у кого нибудь с Perl 5.8.9 или 5.10? Или только 5.8.8?
у меня на 6.4 работает

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

7z# pkg_info | grep perl
apache+mod_perl-1.3.41 The Apache 1.3 webserver with a statically embedded perl in
p5-CGI-SpeedyCGI-2.22_4 Speed up perl CGI scripts by running them persistently
p5-DBI-1.60.7       The perl5 Database Interface.  Required for DBD::* modules
p5-Net-SNMP-5.2.0   A perl module for SNMP... Net::SNMP
p5-SNMP_Session-1.12 A perl5 module providing rudimentary access to SNMPv1 and v
p5-Storable-2.18    Persistency for perl data structures
p5-Time-HiRes-1.9719,1 A perl5 module implementing High resolution time, sleep, an
p5-perl-ldap-0.39   A Client interface to LDAP servers
perl-5.8.9_2        Practical Extraction and Report Language
7z# pkg_info | grep radius
freeradius-1.1.7_3  A free RADIUS server implementation
7z# uname -rms
FreeBSD 6.4-RELEASE-p4 i386
еще одна машина

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

user# pkg_info | grep rad
freeradius-1.1.7_3  A free RADIUS server implementation
user# pkg_info | grep perl
apache+mod_perl-1.3.41 The Apache 1.3 webserver with a statically embedded perl in
p5-DBI-1.60.4       The perl5 Database Interface.  Required for DBD::* modules
p5-Storable-2.18    Persistency for perl data structures
perl-5.8.8_1        Practical Extraction and Report Language
user# uname -rms
FreeBSD 6.4-RELEASE amd64
на 7.2 нормально не завелось. На особые танцы с бубном времени не было.
http://v-lan.com.ua Выделенные линии в Боярке

chtito
Сообщения: 313
Зарегистрирован: Чт дек 13, 2007 11:03 am

Re: rlm_perl

Сообщение chtito »

Странно, я думал версия FreeBSD значения не имела. Интересует работоспособность freeradius 2.x с rlm_perl.

newnix
Сообщения: 8
Зарегистрирован: Сб окт 14, 2006 5:01 pm

Re: rlm_perl

Сообщение newnix »

Freebsd-7.2-release, amd64
freeradius 2.1.6, freeradius 1.1.7_4
perl 5.8.9_3, perl 5.10.1
Не работает.
Can't load '/usr/local/lib/perl5/5.10.1/mach/auto/Fcntl/Fcntl.so' for module Fcntl: /usr/local/lib/perl5/5.10.1/mach/auto/Fcntl/Fcntl.so: Undefined symbol "PL_markstack_ptr" at /usr/local/lib/perl5/5.10.1/mach/XSLoader.pm line 70.
at /usr/local/lib/perl5/5.10.1/mach/Fcntl.pm line 215
BEGIN failed--compilation aborted at /usr/local/lib/perl5/5.10.1/mach/Fcntl.pm line 216.
Compilation failed in require at /usr/local/lib/perl5/5.10.1/mach/POSIX.pm line 19.
BEGIN failed--compilation aborted at /usr/local/lib/perl5/5.10.1/mach/POSIX.pm line 19.
Compilation failed in require at /usr/local/abills/libexec/config.pl line 154.
BEGIN failed--compilation aborted at /usr/local/abills/libexec/config.pl line 154.
Compilation failed in require at /usr/abills/libexec/rlm_perl.pl line 36.
с perl 5.10.0 и freeradius 2.1.4 работало если указать LD_PRELOAD.
Также в любой комбинации не работают freeradius 1.7.7_3 / freeradius 2.1.4 и perl-5.8.9_2.
Работают пока не установлен модуль DBD::Mysql, который ктомуже через cpan не ставится, а после установки его из портов радиусы сегфолтятся.


Рабочая конфигурация: perl 5.10.0, freeradius 2.1.4, p5-DBD-mysql41-4.010. И слинковалось на этот раз чудом всё нормально.

chtito
Сообщения: 313
Зарегистрирован: Чт дек 13, 2007 11:03 am

Re: rlm_perl

Сообщение chtito »

5.8.9 & 5.10.0 бажны, возможно одна из либ использует это (или проходит связанные с этим пути кода перла) и вылетает:
http://www.nntp.perl.org/group/perl.per ... 45593.html

Оставил perl-5.8.8_1, указал для portmaster'а +IGNOREME, чтобы не обновлял перл ни напрямую, ни в качестве чьей-то зависимости, и в результате могу portmaster'ом обновлять остальные порты без проблем. А что делать.

mr_gfd
Сообщения: 129
Зарегистрирован: Пт ноя 03, 2006 8:34 am

Re: rlm_perl

Сообщение mr_gfd »

env LD_PRELOAD="/usr/local/lib/perl5/5.8.9/mach/CORE/libperl.so" radiusd -x

с 5.10 аналогично. Проблемы не в самом перле, а в libtool22.
Ночь провел для выяснения причин, завелось. проверял на разных конфигах. С прелоадом работает практически во всех комбинациях параметров сборки перла, втч с тредами. Все не гарантирую - не проверял.
------------------------
Интернет в Броварах
http://www.brnet.org.ua

chtito
Сообщения: 313
Зарегистрирован: Чт дек 13, 2007 11:03 am

Re: rlm_perl

Сообщение chtito »

Попробовал обновить freeradius 2.1.3 до 2.1.6. Использую rlm_perl с Perl 5.8.8. При старте ошибка:
# /usr/local/etc/rc.d/radiusd start
Starting radiusd.
Can't load '/usr/local/lib/perl5/5.8.8/mach/auto/POSIX/POSIX.so' for module POSIX: /usr/local/lib/perl5/5.8.8/mach/auto/POSIX/POSIX.so: Undefined symbol "PL_sig_name" at /usr/local/lib/perl5/5.8.8/mach/XSLoader.pm line 70.
at /usr/local/lib/perl5/5.8.8/mach/POSIX.pm line 26
Compilation failed in require at /usr/abills/libexec/config.pl line 155.
BEGIN failed--compilation aborted at /usr/abills/libexec/config.pl line 155.
Compilation failed in require at /usr/abills/libexec/rlm_perl.pl line 35.
По ходу стандартный модуль use POSIX qw(strftime); в config.pl вылетал из под rlm_perl.
Пришлось откатить freeradius до 2.1.3.
Кто нибудь сталкивался?

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: rlm_perl

Сообщение NiTr0 »

Проблем не замечал:

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

radiusd: FreeRADIUS Version 2.1.7, for host x86_64-unknown-linux-gnu, built on Oct 29 2009 at 14:03:09
С 2.1.6 тоже вроде не было.

chtito
Сообщения: 313
Зарегистрирован: Чт дек 13, 2007 11:03 am

Re: rlm_perl

Сообщение chtito »

NiTr0 писал(а):Проблем не замечал:

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

radiusd: FreeRADIUS Version 2.1.7, for host x86_64-unknown-linux-gnu, built on Oct 29 2009 at 14:03:09
С 2.1.6 тоже вроде не было.
У вас линукс, вы наверняка прекомпиленные пакеты устанавливали?

Ответить