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.