>denn
>DropUse можно глянуть?
привожу весь скрипт. из него нужно не все, тк я тут добавил пересчет
трафика из октетов в гривны по курсу доллара, обновление таблицы просмотра своего баланса пользователями и отключение по истечению лимита как
входящего так и исходящего трафика. тоесть это специфика.
главноя строка - это $RAD_REPLY{'Drop-User'} = 'Yes' if ($limB[0]<=$B);
#cat DropUser.pl
#!/usr/bin/perl
use strict;
use vars qw(%RAD_REQUEST %RAD_REPLY %RAD_CHECK);
use Data::Dumper;
use DBI;
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 */
sub accounting {
my ($db, $dbh, $sql, $sth, $ref, @limB, $user, $inB, $B, $outB);
$db="dbi:Pg:dbname='vpn'";
$dbh=DBI->connect($db,'vpn','********');
$user="'".$RAD_REQUEST{'User-Name'}."'";
$inB="$RAD_REQUEST{'Acct-Input-Octets'}";
$outB="$RAD_REQUEST{'Acct-Output-Octets'}";
$B=$inB;
$B=$outB if ($inB < $outB);
$sql="select limitoctets from radcheck where username=$user";
$sth=$dbh->prepare($sql);
$sth->execute();
$ref=$sth->fetchrow_arrayref();
@limB=@$ref;
##$limup=int($lim[0]-int($ino);
$dbh->do("update radcheck set active=false where username=$user") if ($limB[0]<=$B);
#$dbh->do("update radcheck set active=false where username=$user") if ($limB[0]<=$inB);
$dbh->do("update radcheck set limitoctets=limitoctets-$B where username=$user") if ($RAD_REQUEST{'Acct-Status-Type'} eq "Stop");
#$dbh->do("update radcheck set limitoctets=limitoctets-$RAD_REQUEST{'Acct-Input-Octets'} where username=$user") if ($RAD_REQUEST{'Acct-Status-Type'} eq "Stop");
$dbh->do("select recalc2($user, 5.4)") if ($RAD_REQUEST{'Acct-Status-Type'} eq "Stop");
$sth->finish();
$dbh->disconnect();
$RAD_REPLY{'Drop-User'} = 'Yes' if ($limB[0]<=$B);
#$RAD_REPLY{'Drop-User'} = 'Yes' if ($limB[0]<=$inB);
return RLM_MODULE_OK;
}