[afnog] phpMyPrepaid

Sunday A Folayan sfolayan at skannet.com.ng
Sat Oct 15 17:15:07 EAT 2005


Alex,

You need to hack the code to get the baby to sing as you want :-)

At 02:39 PM 10/14/2005, Alex Gondwe wrote:

>Hello, All,
>
>I have setup a computer running fedora core 2. I have
>installed chillispot, Freeradius and
>phpMyPrepaid.0.3.0RC1. I can authenticate
>wireless,dialup clients and NAS quite alright.
>Accounting is also working fine.

Cool. Installing phpMyPrepaid on an existing FreeBSD Radius Server, I got 
it to work in 7 minutes flat.

>My problem is that if I use phpMyPrepaid:
>
>1. The the client does not get booted out after
>exceeding the number of minutes allocated to a
>particular prepaid card.

You need a session-time-out  attribute, apart from the 
default  Max-All-Session attribute that phpMyPrepaid adds for you.

Edit the file:  CrCards/DBinsert.php

Copy lines 9 and 10 to be 11 and 12.

ensure lines 11 and 12 match this:
         $q3= "INSERT INTO radcheck (UserName , Attribute, op, Value) 
VALUES('$id','Session-Timeout',':=','$sec')";
         $insert3 = mysql_query($q3) or die(mysql_error());

>2. When the prepaid card has expired, it is still
>possible to authenticate using the username and
>password associated with the card.

You need a script to ensure that Sessions that have been used up are rejected

 From the file: UsedCards.php,
         // We need to select all accounts in radcheck that have a 
Max-All-Session Value
         // which is >= to SUM(AcctSessionTime)

I got the idea that used up sessions will have sum(AcctSessionTime) > 
Max-All-Session, so I went borrowing some of their codes to come up wit ha 
cleanup script.

==CUT BEGIN
<?php
include("config.inc.php");
         // We need to set Auth-Type := Reject for all accounts in radcheck 
that
         // have a Max-All-Session Value  which is >= to SUM(AcctSessionTime)
  $query = "SELECT UserName, Value FROM radcheck WHERE Attribute LIKE 
'Max-All-Session'";
  $result = mysql_query($query) or die(mysql_error());
  while($row = mysql_fetch_object($result)) {
         $user = $row->UserName;
         $Val = $row->Value;
         $q2 = "SELECT SUM(AcctSessionTime) as TotalSessionTime FROM 
radacct WHERE UserName LIKE '$user'";
         $numresults=mysql_query($q2);
         $numrows=mysql_num_rows($numresults);
         $res2 = mysql_query($q2) or die(mysql_error());
         while($r2 = mysql_fetch_object($res2)) {
           $used = $r2->TotalSessionTime;
           if(!isset($used)) { $used = -1; }  // These lines are to catch 
errors, NULLS and non numbers
           if(!is_numeric($used)) { $used = -1; }
           if(!isset($Val)) { $Val = 0; }
           if(!is_numeric($Val)) { $Val = 0; }
           echo "$user $used $Val\n";
           if ($used >= $Val) {
             //Flag as expired
             $qsf= "INSERT INTO radcheck (UserName , Attribute, op, Value) 
VALUES('$id','Auth-Type',':=','Reject')";
             $insertsf = mysql_query($qsf) or die(mysql_error());
           }
        }
   }
?>
== CUT END

save this file, and run it with:
         php cleanup.php

It should emit some debug info, for you to know it is working.

  add the following to your crontab, so that the script is run every 5 minutes

*/5 * * * * /path_to_your_phpMyPrepaid/cleanup.php 1>/dev/null 2>/dev/null

>Has anybody successifully  done a simillar
>installation before. Can someone help!!!

There you are. I hope I have been of help.


>Regards Alex Gondwe
>Malawi

Sunday A. Folayan.
Nigeria.




More information about the afnog mailing list