FreeRadius 3.0.1 perl module attr problem
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.*
participants (2)
-
Alan DeKok -
Alexander Kosykh