Hi,

I solved it in following way. Below is PostAuthHook script.

# CheckBlockTimeLeft
#
# PostAuthHook to check time left for a block user
# by verifying the Session-Timeout attribute
#

sub
{

    my $p = ${$_[0]};
    my $rp = ${$_[1]};
    my $result = ${$_[2]};

    my $name = $p->get_attr('User-Name');
    my $timeoutxx = 0;

    use DBI;

    my ($dsn)="DBI:mysql:radius:localhost";
    my ($namex)="xxx";
    #my ($password11)="xxx";
    my ($dbh,$sth);
    my (@ary);

    $dbh=DBI->connect($dsn,$namex,"xxx",{RaiseError=>1});

    my ($sth)=$dbh->prepare (qq{

    SELECT USERNAME,TIMELEFT FROM SUBSCRIBERS
    WHERE USERNAME='$name'
    });
    $sth->execute();

    while(my $hash_ref=$sth->fetchrow_hashref())
    {
 print join ("\t",$hash_ref->{USERNAME},$hash_ref->{TIMELEFT}). "\n";
 $timeoutxx = $hash_ref->{TIMELEFT};
    }
    $sth->finish();

    $dbh->disconnect();


    if (($result == $main::ACCEPT) && ($timeoutxx <= 0))
    {
        &main::log($main::LOG_DEBUG, "User $name has no time left");

 if($timeoutxx<0){
  $dbh=DBI->connect($dsn,$namex,"xxx",{RaiseError=>1});
  my ($sth)=$dbh->prepare (qq{

  UPDATE SUBSCRIBERS SET TIMELEFT=0 WHERE USERNAME='$name'
  });
  $sth->execute();
  $sth->finish();

  $dbh->disconnect();
 }

#        ${$_[2]} = $main::REJECT;
 if($p->code eq 'Access-Request'){
  $rp->delete_attr('Filter-Id');
  $rp->delete_attr('Session-Timeout');
  $rp->delete_attr('Framed-Protocol');
  $rp->delete_attr('Service-Type');
  $rp->delete_attr('Framed-MTU');
  $rp->delete_attr('Framed-Compression');
  $rp->set_code('Access-Reject');
         $rp->change_attr('Reply-Message','Prepaid time limit reached!');
  $p->{Client}->replyTo($rp,$p);
 }
 if($p->code eq 'Accounting-Request'){
  $rp->set_code('Accounting-Response');
  $p->{Client}->replyTo($rp,$p);
 }
    }
    return;
}
#####################################################

HTH,

Ganbold Ts.

----- Original Message ----- 
From: "William Hernandez" <[EMAIL PROTECTED]>
To: "Radiator" <[EMAIL PROTECTED]>
Sent: Wednesday, April 25, 2001 11:25 PM
Subject: RE: (RADIATOR) Important - How to do Block Time users


> Hello everyone,
> 
> I'm trying to follow Hugh's tips, but I'm doing something wrong.
> 
> In my radius.cfg I have:
> 
> <AuthBy SQL>
>         Identifier TimeBlock-SQL
>         DBSource        *
>         DBUsername    *
>         DBAuth            *
>         AuthSelect select TIMEBLOCK from XSTOP where
> USERNAME='%n'
>         AuthColumnDef   0, Time, check
> </AuthBy>
> <Realm DEFAULT>
>         AuthBy Check-FILE
>         AuthBy System
>         # This AuthBy will check the Time check-item
>         AuthBy TimeBlock-SQL
>         # This hook calculates the session-timeout
>         PostAuthHook file:"/etc/raddb/setSessionTimeout"
>         AcctLogFileName /var/log/radacct/detail
>         PasswordLogFileName     /var/log/radius.log
>         ExcludeFromPasswordLog  root
> </Realm>
> 
> In my PostAuthHook I have:
> my $timeblock=$p->get_attr('Time');
> 
> The problem is $timeblock is coming back an empty string. I can't
> get the value to the PostAuthHook.
> The "ERR: Invalid timeblock for user whr" in the radius.log comes
> from the PostAuthHook.
> 
> A Trace 4 radius.log shows:
> Wed Apr 25 11:05:31 2001: DEBUG: Packet dump:
> *** Received from 208.249.78.6 port 4319 ....
> Code:       Access-Request
> Identifier: 196
> Authentic:  1234567890123456
> Attributes:
>         User-Name = "whr"
>         Service-Type = Framed-User
>         NAS-IP-Address = 203.63.154.1
>         NAS-Port = 1234
>         NAS-Port-Type = Async
>         User-Password =
> "<146><208><238><158><247><22><144><5><164><133><228><17
> 4><1>H<30>x"
> 
> Wed Apr 25 11:05:31 2001: DEBUG: Handling request with Handler
> 'Realm=DEFAULT'
> Wed Apr 25 11:05:31 2001: DEBUG:  Deleting session for whr,
> 203.63.154.1, 1234
> Wed Apr 25 11:05:31 2001: DEBUG: do query is: delete from
> RADONLINE where NASIDE
> NTIFIER='203.63.154.1' and NASPORT=01234
> 
> Wed Apr 25 11:05:31 2001: DEBUG: Handling with Radius::AuthFILE
> Wed Apr 25 11:05:31 2001: DEBUG: Radius::AuthFILE looks for match
> with whr
> Wed Apr 25 11:05:31 2001: DEBUG: Radius::AuthFILE looks for match
> with DEFAULT
> Wed Apr 25 11:05:31 2001: DEBUG: Handling with Radius::AuthUNIX
> Wed Apr 25 11:05:31 2001: DEBUG: Radius::AuthUNIX looks for match
> with whr
> Wed Apr 25 11:05:31 2001: DEBUG: Query is: select NASIDENTIFIER,
> NASPORT, ACCTSE
> SSIONID from RADONLINE where USERNAME='whr'
> 
> Wed Apr 25 11:05:31 2001: Login OK: [whr] (home)
> Wed Apr 25 11:05:31 2001: DEBUG: Radius::AuthUNIX ACCEPT:
> Wed Apr 25 11:05:31 2001: DEBUG: Radius::AuthFILE ACCEPT:
> Wed Apr 25 11:05:31 2001: ERR: Invalid timeblock for user whr
> Wed Apr 25 11:05:31 2001: DEBUG: Access accepted for whr
> Wed Apr 25 11:05:31 2001: DEBUG: Packet dump:
> *** Sending to 208.249.78.6 port 4319 ....
> Code:       Access-Accept
> Identifier: 196
> Authentic:  1234567890123456
> Attributes:
>         Service-Type = Framed-User
>         Framed-Protocol = PPP
>         Framed-IP-Netmask = 255.255.255.255
>         Framed-Compression = Van-Jacobson-TCP-IP
>         Ascend-Idle-Limit = 900
> 
> 
> Any help would be appreciated.
> Thanks in advance,
> William
> 
> 
> ===
> Archive at http://www.starport.net/~radiator/
> Announcements on [EMAIL PROTECTED]
> To unsubscribe, email '[EMAIL PROTECTED]' with
> 'unsubscribe radiator' in the body of the message.
> 


===
Archive at http://www.starport.net/~radiator/
Announcements on [EMAIL PROTECTED]
To unsubscribe, email '[EMAIL PROTECTED]' with
'unsubscribe radiator' in the body of the message.

Reply via email to