Hi, i am not using sql.conf at all. i have only DB connection in example.pl file. But my example.pl file really it is very big. and i have lot of queries cous of i am using this file for Prepaid CallShop Diffrent rate for diffrent customers.
I would like to paste my script here. but i am really sorry to post big script here. ================example.pl ================== use DBI; #use strict; use POSIX qw(ceil floor); use vars qw(%RAD_REQUEST %RAD_REPLY %RAD_CHECK); use Data::Dumper; # This is hash wich hold original request from radius #my %RAD_REQUEST; # In this hash you add values that will be returned to NAS. #my %RAD_REPLY; #This is for check items #my %RAD_CHECK; # # This the remaping of return values # use constant RLM_MODULE_REJECT=> 0;# /* immediately reject the request */ use constant RLM_MODULE_FAIL=> 1;# /* module failed, don't reply */ use constant RLM_MODULE_OK=> 2;# /* the module is OK, continue */ use constant RLM_MODULE_HANDLED=> 3;# /* the module handled the request, so stop. */ use constant RLM_MODULE_INVALID=> 4;# /* the module considers the request invalid. */ use constant RLM_MODULE_USERLOCK=> 5;# /* reject the request (user is locked out) */ use constant RLM_MODULE_NOTFOUND=> 6;# /* user not found */ use constant RLM_MODULE_NOOP=> 7;# /* module succeeded without doing anything */ use constant RLM_MODULE_UPDATED=> 8;# /* OK (pairs modified) */ use constant RLM_MODULE_NUMCODES=> 9;# /* How many return codes there are */ my $db_host = '192.168.1.65'; my $db_user = 'testdb'; my $db_pass = 'MoHaKa21'; my $db_name = 'radius'; sub dbh{ my $db = "dbi:mysql:dbname=${db_name};host=${db_host}"; my $dbv = DBI->connect($db, $db_user, $db_pass, { RaiseError => 1, AutoCommit => 0 } ) || die "Error connecting to the database"; } sub debugit{ #if(!$RAD_REQUEST{'User-Password'}){ #my $cn = $RAD_REQUEST{'Called-Station-Id'}; #my $up = $RAD_REQUEST{'User-Password'}; #}else{ #my $tt = $RAD_REQUEST{'Acct-Unique-Session-Id'}; #} my $debug_sql = "INSERT INTO nas (nasname) VALUES ($tt)"; my $dbg = dbh()->prepare($debug_sql); $dbg->execute(); } #debugit(); # Function to handle authorize sub authorize { # For debugging purposes only &log_request_attributes; #debugit(); my $UserP; my $uidf; my $pwws; my $uid; if(!$RAD_REQUEST{'User-Password'}){ $uidf = $RAD_REQUEST{'User-Name'}; @WordList = split(/_/, $uidf ) ; $pwws = @WordList[1]; $uid = @WordList[0]; }else{ $pwws = $RAD_REQUEST{'User-Password'}; $uid = $RAD_REQUEST{'User-Name'}; } my $sql_reg = "SELECT 1 FROM radcheck WHERE UserName = '$uid' and Value = '$pwws' ORDER BY id"; my $auth = dbh()->selectrow_array($sql_reg); if(!$auth){return RLM_MODULE_REJECT;} else {return RLM_MODULE_OK;} } # Function to handle authenticate sub authenticate { # For debugging purposes only &log_request_attributes; if ($RAD_REQUEST{'User-Name'} =~ /^baduser/i) { # Reject user and tell him why $RAD_REPLY{'Reply-Message'} = "Denied access by rlm_perl function"; return RLM_MODULE_REJECT; } else { # Accept user and set some attribute if(!$RAD_REQUEST{'Called-Station-Id'}){$skipp=0;} else{max_time();} &log_request_attributes; return RLM_MODULE_OK; } } #end of authenticate function ################ FUNCTION FOR LIVE CALL ################## sub max_time{ #debugit(); my $sessionID = $RAD_REQUEST{'Acct-Session-Id'}; my $sessionID =~ s/T/V/; my $CalledID = $RAD_REQUEST{'Called-Station-Id'}; my $DCode = r_code($CalledID); my $UserName = $RAD_REQUEST{'User-Name'}; if ($ARGV[1] == 800800) #for ivr call { $RAD_REPLY{'h323-credit-time'} = "h323-credit-time=60"; exit; } #End if my $sql_rate = "Select If(RT.Rate Is Null,T.Rate*STC.Percentage,RT.Rate) As Sell_Rate From (Tariff As T JOIN Tariff_Classes As STC Inner Join Rate_Card As RC On STC.ID=RC.Groupn) Left Join Reseller_Tariff As RT On T.Co_Name=RT.Code And RC.AgentID=RT.AgentID And RC.Groupn=RT.Groupn Where RC.UserName='$UserName' And T.Co_Name='$DCode'"; my $sql_usr_balance = "SELECT Amount FROM balance WHERE op='r' and UserName = '$UserName' "; my $sql_port = "SELECT port FROM radcheck WHERE UserName = '$UserName' "; my $sql_status = "SELECT count(*) as RecNo FROM radacct WHERE UserName = '$UserName' and status ='1' and AcctSessionId = '$sessionID' "; my $sql_statuso = "SELECT count(*) as RecNo FROM radacct WHERE UserName = '$UserName' and status ='1'"; my $query_resel = "select R_update_balance.Amount from R_update_balance INNER join Device_auth on R_update_balance.AgentID = Device_auth.AgentID Where Device_auth.DeviceID = '$UserName' "; my $reseller_balance = dbh()->selectrow_array($query_resel); my $calling_rate = dbh()->selectrow_array($sql_rate); if($reseller_balance <= 0){ $RAD_REPLY{'h323-credit-time'} = "h323-credit-time=0"; exit;} if ($calling_rate <= 0) { $RAD_REPLY{'h323-credit-time'} = "h323-credit-time=0"; exit;} # Callshop # if(!$RAD_REQUEST{'Calling-Station-Id'}){ # my $don = 1; # }else{ # my $callingID = $RAD_REQUEST{'Calling-Station-Id'}; # my $booth_credit = "SELECT credit FROM booth_credit WHERE UserName = '$UserName' and port ='$callingID'"; # my $boCredit = dbh()->selectrow_array($booth_credit); # &log_request_attributes; # if($boCredit <=0) # { # my $t=0; # }else{ # $total_minute_duration = $boCredit/$calling_rate; # $return_h323_time = $total_minute_duration*60; # $RAD_REPLY{'h323-credit-time'} = "h323-credit-time=$return_h323_time"; # &log_request_attributes; # #exit; # return true; # } #end if for callshop # # } #End if # End call shop area if($RAD_REQUEST{'Calling-Station-Id'}){ my $callingID = $RAD_REQUEST{'Calling-Station-Id'}; my $booth_credit = "SELECT credit FROM booth_credit WHERE UserName = '$UserName' and port ='$callingID'"; my $boCredit = dbh()->selectrow_array($booth_credit); &log_request_attributes; if($boCredit <=0) { my $t=0; }else{ $total_minute_duration = $boCredit/$calling_rate; $return_h323_time = $total_minute_duration*60; $RAD_REPLY{'h323-credit-time'} = "h323-credit-time=$return_h323_time"; &log_request_attributes; #exit; return true; } #end if for callshop } #End if my $returnba = 0; my $total_balance = dbh()->selectrow_array($sql_usr_balance); my $port = dbh()->selectrow_array($sql_port); my $status = dbh()->selectrow_array($sql_status); my $statuso = dbh()->selectrow_array($sql_statuso); if($total_balance >=5 && $port >= 2){ my $d = $port-$status; $returnba = $total_balance/$d; }elsif($total_balance < 5 && $statuso >= 2){ $returnba = 0; }elsif($total_balance <= 0){ $returnba = 0; }else{ $returnba = $total_balance; } #End If for port devision $total_minute_duration = $returnba/$calling_rate; #$total_minute_duration = $calling_rate; my $return_h323_time = $total_minute_duration*60; $RAD_REPLY{'h323-credit-time'} = "h323-credit-time=$return_h323_time"; &log_request_attributes; } #end max_time sub r_code #from reseller table { $wh = $_[0]; $wh =~ s/^00//; $sql_code = "SELECT Max(Co_Name) As Code FROM `Tariff` WHERE '$wh' Like Concat(`Co_Name`,'%')"; return dbh()->selectrow_array($sql_code); } #End r_code ######################## END LIVE CALL FUNCTION ######### # Function to handle preacct sub preacct { # For debugging purposes only # &log_request_attributes; return RLM_MODULE_OK; } # Function to handle accounting sub accounting { # For debugging purposes only &log_request_attributes; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime time; my $years = $year+1900; my $mons = $mon+1; my $fdatetime = "$years-$mons-$mday $hour:$min:$sec"; my $accounting_start; my $accounting_stop_query; $accounting_start = "INSERT IGNORE into radacct (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctStopTime, AcctSessionTime, AcctAuthentic, ConnectInfo_start, ConnectInfo_stop, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, AcctTerminateCause, ServiceType, FramedProtocol, FramedIPAddress, AcctStartDelay, AcctStopDelay, status,Termination) values('$RAD_REQUEST{'Acct-Session-Id'}', '$RAD_REQUEST{'Acct-Unique-Session-Id'}', '$RAD_REQUEST{'User-Name'}', '$RAD_REQUEST{'Realm'}', '$RAD_REQUEST{'NAS-IP-Address'}', '$RAD_REQUEST{'NAS-Port'}', '$RAD_REQUEST{'NAS-Port-Type'}', '$fdatetime', '0', '0', '$RAD_REQUEST{'Acct-Authentic'}', '$RAD_REQUEST{'Connect-Info'}', '', '0', '0', '$RAD_REQUEST{'Called-Station-Id'}', '$RAD_REQUEST{'Calling-Station-Id'}', '', '$RAD_REQUEST{'Service-Type'}', '$RAD_REQUEST{'Framed-Protocol'}', '$RAD_REQUEST{'Framed-IP-Address'}', '$RAD_REQUEST{'Acct-Delay-Time'}', '0', '1','$RAD_REQUEST{'h323-remote-address'}')"; $accounting_stop_query = "UPDATE radacct SET AcctStopTime = '$fdatetime', AcctSessionTime = '$RAD_REQUEST{'Acct-Session-Time'}', AcctInputOctets = '$RAD_REQUEST{'Acct-Input-Octets'}', AcctOutputOctets = '$RAD_REQUEST{'Acct-Output-Octets'}', AcctTerminateCause = '$RAD_REQUEST{'Acct-Terminate-Cause'}', AcctStopDelay = '$RAD_REQUEST{'Acct-Delay-Time'}', status = '1', ConnectInfo_stop = '$RAD_REQUEST{'Connect-Info'}' WHERE AcctSessionId = '$RAD_REQUEST{'Acct-Session-Id'}' AND UserName = '$RAD_REQUEST{'User-Name'}' AND NASIPAddress = '$RAD_REQUEST{'NAS-IP-Address'}'"; my $dbg = dbh()->prepare($accounting_start); $dbg->execute(); if($RAD_REQUEST{'Acct-Input-Octets'}){ my $dbup = dbh()->prepare($accounting_stop_query); $dbup->execute(); } return RLM_MODULE_OK; } # Function to handle checksimul sub checksimul { # For debugging purposes only # &log_request_attributes; return RLM_MODULE_OK; } # Function to handle xlat sub xlat { # For debugging purposes only # &log_request_attributes; # Loads some external perl and evaluate it my ($filename,$a,$b,$c,$d) = @_; &radiusd::radlog(1, "From xlat $filename "); &radiusd::radlog(1,"From xlat $a $b $c $d "); local *FH; open FH, $filename or die "open '$filename' $!"; local($/) = undef; my $sub = <FH>; close FH; my $eval = qq{ sub handler{ $sub;} }; eval $eval; eval {main->handler;}; } # Function to handle detach sub detach { # For debugging purposes only # &log_request_attributes; # Do some logging. &radiusd::radlog(0,"rlm_perl::Detaching. Reloading. Done."); } # # Some functions that can be called from other functions # sub test_call { # Some code goes here } sub log_request_attributes { # This shouldn't be done in production environments! # This is only meant for debugging! for (keys %RAD_REQUEST) { &radiusd::radlog(1, "RAD_REQUEST: $_ = $RAD_REQUEST{$_}"); } } -------- Yours, Abdul Lateef Computer Programmer HATIF COM Mob: +974 - 5405022 Tel: +974 - 4883068 ICQ: 276994704 YM!: abdul_zu Fax: +974 - 4883063 Doha Qatar http://www.hatif.com __________________________________ Yahoo! Mail - PC Magazine Editors' Choice 2005 http://mail.yahoo.com - List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html