From df8877580671426e2d32f5c7d3542e5ede9e4ce0 Mon Sep 17 00:00:00 2001
From: Robert Anderson <randerson@lbsd.net>
Date: Tue, 4 Aug 2009 10:08:51 +0000
Subject: [PATCH] Fixed server getting usage for current month when getUsage
 called from capping module

---
 smradius/modules/accounting/mod_accounting_sql.pm | 9 +++++++--
 smradius/modules/features/mod_feature_capping.pm  | 6 ++++--
 smradiusd.conf                                    | 1 +
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/smradius/modules/accounting/mod_accounting_sql.pm b/smradius/modules/accounting/mod_accounting_sql.pm
index fc13b757..fe1c6c34 100644
--- a/smradius/modules/accounting/mod_accounting_sql.pm
+++ b/smradius/modules/accounting/mod_accounting_sql.pm
@@ -165,6 +165,7 @@ sub init
 			@TP@accounting
 		WHERE
 			Username = %{request.User-Name}
+			AND EventTimestamp >= %{query.From}
 	';
 
 	# Setup SQL queries
@@ -213,7 +214,7 @@ sub init
 # Function to get radius user data usage
 sub getUsage
 {
-	my ($server,$user,$packet) = @_;
+	my ($server,$user,$packet,$month) = @_;
 
 	# Build template
 	my $template;
@@ -221,9 +222,13 @@ sub getUsage
 		$template->{'request'}->{$attr} = $packet->rawattr($attr)
 	}
 	$template->{'user'} = $user;
+	# Query parameters
+	$template->{'query'}->{'From'} = $month;
 
 	# Replace template entries
-	my @dbDoParams = templateReplace($config->{'accounting_usage_query'},$template);
+	my ($queryString, @params) = templateReplace($config->{'accounting_usage_query'},$template);
+	# Add month to our params
+	my @dbDoParams = ($queryString, @params);
 
 	# Fetch data
 	my $sth = DBSelect(@dbDoParams);
diff --git a/smradius/modules/features/mod_feature_capping.pm b/smradius/modules/features/mod_feature_capping.pm
index 2972822a..17232780 100644
--- a/smradius/modules/features/mod_feature_capping.pm
+++ b/smradius/modules/features/mod_feature_capping.pm
@@ -118,13 +118,14 @@ sub post_auth_hook
 
 	# Get the users' usage
 	my $accountingUsage;
+	my $month = DateTime->from_epoch( epoch => $user->{'_Internal'}->{'Timestamp-Unix'} )->strftime('%Y-%m');
 	# Loop with plugins to find anyting supporting getting of usage
 	foreach my $module (@{$server->{'module_list'}}) {
 		# Do we have the correct plugin?
 		if ($module->{'Accounting_getUsage'}) {
 			$server->log(LOG_INFO,"[MOD_FEATURE_CAPPING] Found plugin: '".$module->{'Name'}."'");
 			# Fetch users session uptime & bandwidth used
-			my $res = $module->{'Accounting_getUsage'}($server,$user,$packet);
+			my $res = $module->{'Accounting_getUsage'}($server,$user,$packet,$month);
 			if (!defined($res)) {
 				$server->log(LOG_ERR,"[MOD_FEATURE_CAPPING] No usage data found for user '".$packet->attr('User-Name')."'");
 				return MOD_RES_SKIP;
@@ -310,13 +311,14 @@ sub post_acct_hook
 
 	# Get the users' usage
 	my $accountingUsage;
+	my $month = DateTime->from_epoch( epoch => $user->{'_Internal'}->{'Timestamp-Unix'} )->strftime('%Y-%m');
 	# Loop with plugins to find anyting supporting getting of usage
 	foreach my $module (@{$server->{'module_list'}}) {
 		# Do we have the correct plugin?
 		if ($module->{'Accounting_getUsage'}) {
 			$server->log(LOG_INFO,"[MOD_FEATURE_CAPPING] Found plugin: '".$module->{'Name'}."'");
 			# Fetch users session uptime & bandwidth used
-			my $res = $module->{'Accounting_getUsage'}($server,$user,$packet);
+			my $res = $module->{'Accounting_getUsage'}($server,$user,$packet,$month);
 			if (!defined($res)) {
 				$server->log(LOG_ERR,"[MOD_FEATURE_CAPPING] No usage data found for user '".$packet->attr('User-Name')."'");
 				return MOD_RES_SKIP;
diff --git a/smradiusd.conf b/smradiusd.conf
index 31e88094..1719bad6 100644
--- a/smradiusd.conf
+++ b/smradiusd.conf
@@ -306,6 +306,7 @@ accounting_usage_query=<<EOT
 		@TP@accounting
 	WHERE
 		Username = %{request.User-Name}
+		AND EventTimestamp >= %{query.From}
 EOT
 
 
-- 
GitLab