FreeRadius 3.0.1 perl module attr problem

Alexander Kosykh avkosykh at gmail.com
Wed Mar 5 07:17:04 CET 2014


Hi

I'm trying to move my freeradius 2.2 configuration to new installed 3.0.1.
All seem to work but perl clean up some attributes empty.

This is my test perl script

use strict;
use warnings;

# use ...
use Data::Dumper;
use DBI;                        # mysql information base


#
# Configuration parameters

use constant {
    DEBUG => '1', # for debuggin
    #
    # database parameters
    DB_HOSTNAME => 'db.example.com',
    DB_NAME     => 'radius',
    DB_USER     => 'radius',
    DB_PASS     => 'secret'
};

# Bring the global hashes into the package scope
our (%RAD_REQUEST, %RAD_REPLY, %RAD_CHECK);

#
# This the remapping of return values
#
use constant {

RLM_MODULE_REJECT => 0, #  /* immediately reject the request */
RLM_MODULE_FAIL => 1, #  /* module failed, don't reply */
RLM_MODULE_OK => 2, #  /* the module is OK, continue */
RLM_MODULE_HANDLED => 3, #  /* the module handled the request, so stop. */
RLM_MODULE_INVALID => 4, #  /* the module considers the request invalid. */
RLM_MODULE_USERLOCK => 5, #  /* reject the request (user is locked out) */
RLM_MODULE_NOTFOUND => 6, #  /* user not found */
RLM_MODULE_NOOP => 7, #  /* module succeeded without doing anything */
RLM_MODULE_UPDATED => 8, #  /* OK (pairs modified) */
RLM_MODULE_NUMCODES => 9, #  /* How many return codes there are */

# Same as src/include/radiusd.h
    L_DBG => 1,
    L_AUTH => 2,
    L_INFO => 3,
    L_ERR => 4,
    L_PROXY => 5,
    L_ACCT => 6
};


our $dbh;

# Connecting datebase
sub CLONE {
    $dbh =
DBI->connect("dbi:mysql:dbname=".DB_NAME.";host=".DB_HOSTNAME,DB_USER,DB_PASS,{PrintError
=> 0})
    or &radiusd::radlog(L_DBG, "DEBUG post_auth: DBI error:
".$DBI::errstr);
    if (!defined($dbh)) {
        &err_out;
        &radiusd::radlog(L_ERR, "can't connect to database!");

        $RAD_REPLY {'Reply-Message'} = "Internal server error";
        return RLM_MODULE_FAIL;
    }
}

sub authorize {
    print Dumper (%RAD_REQUEST);
    return RLM_MODULE_OK;
}


And the radius -X output
This one without perl script
Ready to process requests.
rad_recv: Access-Request packet from host 192.168.20.240 port 1812, id=62,
length=205
    User-Name = 'test_jur'
    CHAP-Password = 0x01cc75f2ddb427d70
    CHAP-Challenge = 0xea55985e715e3e1f
    Service-Type = Framed-User
    Framed-Protocol = PPP
    NAS-Identifier = 'test-se600'
    NAS-Port = 50462720
    NAS-Real-Port = 838860811
    NAS-Port-Type = Virtual
    NAS-Port-Id = '3/2 vlan-id 11 pppoe 60'
    Medium-Type = DSL
    Mac-Addr = '00-50-56-84-69-59'
    Platform-Type = SE-600
    OS-Version = '12.1.1.5'
(5) # Executing section authorize from file
/usr/local/etc/raddb/sites-available/pppoe
(5)   authorize {
(5)   filter_username filter_username {
(5)    ? if (!User-Name)
(5)    ? if (!User-Name) -> FALSE
(5)    ? if (User-Name =~ /([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$/)
(5)    ? if (User-Name =~ /([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$/)  -> FALSE
(5)    ? if (User-Name == 'Redback')
(5)    ? if (User-Name == 'Redback') -> FALSE
(5)    ? if (User-Name =~ / /)
(5)    ? if (User-Name =~ / /)  -> FALSE
(5)    ? if (User-Name =~ /@.*@/ )
(5)    ? if (User-Name =~ /@.*@/ )  -> FALSE
(5)    ? if (User-Name =~ /\\.\\./ )
(5)    ? if (User-Name =~ /\\.\\./ )  -> FALSE
(5)    ? if (User-Name =~ /\\.$/)
(5)    ? if (User-Name =~ /\\.$/)   -> FALSE
(5)    ? if (User-Name =~ /@\\./)
(5)    ? if (User-Name =~ /@\\./)   -> FALSE
(5)   } # filter_username filter_username = notfound
(5)   [preprocess] = ok
(5)   ? if (OS-Version == '12.1.1.5')
(5)   ? if (OS-Version == '12.1.1.5')  -> TRUE
(5)   if (OS-Version == '12.1.1.5')  { ... } # empty sub-section is ignored
.....

And this one with perl
rad_recv: Access-Request packet from host 192.168.20.240 port 1812, id=60,
length=205
    User-Name = 'test_jur'
    CHAP-Password = 0x016dbecc2a777
    CHAP-Challenge = 0xec96dfb8b8af
    Service-Type = Framed-User
    Framed-Protocol = PPP
    NAS-Identifier = 'test-se600'
    NAS-Port = 50462720
    NAS-Real-Port = 838860811
    NAS-Port-Type = Virtual
    NAS-Port-Id = '3/2 vlan-id 11 pppoe 58'
    Medium-Type = DSL
    Mac-Addr = '00-50-56-84-69-59'
    Platform-Type = SE-600
    OS-Version = '12.1.1.5'
(0) # Executing section authorize from file
/usr/local/etc/raddb/sites-available/pppoe
(0)   authorize {
$VAR1 = 'OS-Version';
$VAR2 = '';
$VAR3 = 'NAS-Port-Type';
$VAR4 = 'Virtual';
$VAR5 = 'NAS-Real-Port';
$VAR6 = '838860811';
$VAR7 = 'CHAP-Password';
$VAR8 = '0x016dbecc2a777';
$VAR9 = 'Service-Type';
$VAR10 = 'Framed-User';
$VAR11 = 'Medium-Type';
$VAR12 = 'DSL';
$VAR13 = 'Framed-Protocol';
$VAR14 = 'PPP';
$VAR15 = 'User-Name';
$VAR16 = '';
$VAR17 = 'CHAP-Challenge';
$VAR18 = '0xec96dfb8b8af';
$VAR19 = 'NAS-Identifier';
$VAR20 = '';
$VAR21 = 'Platform-Type';
$VAR22 = 'SE-600';
$VAR23 = 'NAS-Port';
$VAR24 = '50462720';
$VAR25 = 'Mac-Addr';
$VAR26 = '';
$VAR27 = 'NAS-Port-Id';
$VAR28 = '';
rlm_perl: Added pair OS-Version =
rlm_perl: Added pair NAS-Port-Type = Virtual
rlm_perl: Added pair NAS-Real-Port = 838860811
rlm_perl: Added pair CHAP-Password = 0x016dbecc2a777
rlm_perl: Added pair Service-Type = Framed-User
rlm_perl: Added pair Medium-Type = DSL
rlm_perl: Added pair Framed-Protocol = PPP
rlm_perl: Added pair User-Name =
rlm_perl: Added pair CHAP-Challenge = 0xec96dfb8b8af
rlm_perl: Added pair NAS-Identifier =
rlm_perl: Added pair Platform-Type = SE-600
rlm_perl: Added pair NAS-Port = 50462720
rlm_perl: Added pair Mac-Addr =
rlm_perl: Added pair NAS-Port-Id =
(0)   [perl_pppoe] = ok
(0)   filter_username filter_username {
(0)    ? if (!User-Name)
(0)    ? if (!User-Name) -> FALSE
(0)    ? if (User-Name =~ /([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$/)
(0)    ? if (User-Name =~ /([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$/)  -> FALSE
(0)    ? if (User-Name == 'Redback')
(0)    ? if (User-Name == 'Redback') -> FALSE
(0)    ? if (User-Name =~ / /)
(0)    ? if (User-Name =~ / /)  -> FALSE
(0)    ? if (User-Name =~ /@.*@/ )
(0)    ? if (User-Name =~ /@.*@/ )  -> FALSE
(0)    ? if (User-Name =~ /\\.\\./ )
(0)    ? if (User-Name =~ /\\.\\./ )  -> FALSE
(0)    ? if (User-Name =~ /\\.$/)
(0)    ? if (User-Name =~ /\\.$/)   -> FALSE
(0)    ? if (User-Name =~ /@\\./)
(0)    ? if (User-Name =~ /@\\./)   -> FALSE
(0)   } # filter_username filter_username = ok
(0)   [preprocess] = ok
(0)   ? if (OS-Version == '12.1.1.5')
(0)   ? if (OS-Version == '12.1.1.5')  -> FALSE
....


As you can see in the second -X output perl cleared some attributes:
OS-Version (which I tested with if statement after perl)
User-Name
NAS-Identifier
Mac-Addr
NAS-Port-Id

Why is it so? Did I do something wrong or it's a perl bug?

P.S. In 2.2 this perl script work fine.

*Regards,*
*Alexander.*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freeradius.org/pipermail/freeradius-users/attachments/20140305/d7abd94a/attachment.html>


More information about the Freeradius-Users mailing list