From 30c0fdc2b632eb2d6b11b351b3e9bc509f9f263d Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 24 Jun 2008 02:09:37 +0000 Subject: [PATCH] prevent decrementing time/bandwidth for old RADIUS records --- FS/FS/part_export/sqlradius.pm | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/FS/FS/part_export/sqlradius.pm b/FS/FS/part_export/sqlradius.pm index 8fd010f9a..3c25a99ee 100644 --- a/FS/FS/part_export/sqlradius.pm +++ b/FS/FS/part_export/sqlradius.pm @@ -677,16 +677,26 @@ sub update_svc_acct { } elsif ( scalar(@svc_acct) > 1 ) { warn "WARNING: multiple svc_acct records found $errinfo - skipping\n"; } else { - warn "found svc_acct ". $svc_acct[0]->svcnum. " $errinfo\n" if $DEBUG; - $svc_acct[0]->last_login($AcctStartTime); - $svc_acct[0]->last_logout($AcctStopTime); - my @stati; - push @stati, _try_decrement($svc_acct[0], 'seconds', $AcctSessionTime); - push @stati, _try_decrement($svc_acct[0], 'upbytes', $AcctInputOctets); - push @stati, _try_decrement($svc_acct[0], 'downbytes', $AcctOutputOctets); - push @stati, _try_decrement($svc_acct[0], 'totalbytes', $AcctInputOctets + - $AcctOutputOctets); - $status=join(' ', @stati); + + my $svc_acct = $svc_acct[0]; + warn "found svc_acct ". $svc_acct->svcnum. " $errinfo\n" if $DEBUG; + + $svc_acct->last_login($AcctStartTime); + $svc_acct->last_logout($AcctStopTime); + + my $cust_pkg = $svc_acct->cust_svc->cust_pkg; + if ( $cust_pkg && $AcctStopTime < ( $cust_pkg->last_bill + || $cust_pkg->setup ) ) { + $status = 'skipped (too old)'; + } else { + my @st; + push @st, _try_decrement($svc_acct, 'seconds', $AcctSessionTime ); + push @st, _try_decrement($svc_acct, 'upbytes', $AcctInputOctets ); + push @st, _try_decrement($svc_acct, 'downbytes', $AcctOutputOctets ); + push @st, _try_decrement($svc_acct, 'totalbytes', $AcctInputOctets + + $AcctOutputOctets); + $status=join(' ', @st); + } } warn "setting FreesideStatus to $status $errinfo\n" if $DEBUG; -- 2.11.0