From a9dffc61f0f373422f78adb6a8674a64a2ce220d Mon Sep 17 00:00:00 2001
From: Robert Anderson <randerson@lbsd.net>
Date: Mon, 26 Apr 2010 11:31:59 +0000
Subject: [PATCH] * More accurate result testing after updates * Modified
 NAS-Port-Id to use a blank default if not defined (in the case of vpn's)

---
 smradius/modules/accounting/mod_accounting_sql.pm | 14 +++++++++-----
 smradiusd.conf                                    | 10 +++++++---
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/smradius/modules/accounting/mod_accounting_sql.pm b/smradius/modules/accounting/mod_accounting_sql.pm
index e8b3e02f..007194d5 100644
--- a/smradius/modules/accounting/mod_accounting_sql.pm
+++ b/smradius/modules/accounting/mod_accounting_sql.pm
@@ -108,7 +108,7 @@ sub init
 			%{request.NAS-Port-Type},
 			%{request.Calling-Station-Id},
 			%{request.Called-Station-Id},
-			%{request.NAS-Port-Id},
+			%{request.NAS-Port-Id=},
 			%{request.Acct-Session-Id},
 			%{request.Framed-IP-Address},
 			%{request.Acct-Authentic},
@@ -137,6 +137,7 @@ sub init
 			Username = %{request.User-Name}
 			AND AcctSessionID = %{request.Acct-Session-Id}
 			AND NASIPAddress = %{request.NAS-IP-Address}
+			AND NASPortID = %{request.NAS-Port-Id=}
 		GROUP BY
 			PeriodKey
 		ORDER BY
@@ -159,6 +160,7 @@ sub init
 			Username = %{request.User-Name}
 			AND AcctSessionID = %{request.Acct-Session-Id}
 			AND NASIPAddress = %{request.NAS-IP-Address}
+			AND NASPortID = %{request.NAS-Port-Id=}
 			AND PeriodKey = %{query.PeriodKey}
 	';
 
@@ -177,6 +179,7 @@ sub init
 			Username = %{request.User-Name}
 			AND AcctSessionID = %{request.Acct-Session-Id}
 			AND NASIPAddress = %{request.NAS-IP-Address}
+			AND NASPortID = %{request.NAS-Port-Id=}
 			AND PeriodKey = %{query.PeriodKey}
 	';
 
@@ -190,6 +193,7 @@ sub init
 			Username = %{request.User-Name}
 			AND AcctSessionID = %{request.Acct-Session-Id}
 			AND NASIPAddress = %{request.NAS-IP-Address}
+			AND NASPortID = %{request.NAS-Port-Id=}
 	';
 
 	$config->{'accounting_usage_query'} = '
@@ -215,6 +219,7 @@ sub init
 			Username = %{request.User-Name}
 			AND AcctSessionID = %{request.Acct-Session-Id}
 			AND NASIPAddress = %{request.NAS-IP-Address}
+			AND NASPortID = %{request.NAS-Port-Id=}
 			AND PeriodKey = %{query.PeriodKey}
 		ORDER BY
 			ID
@@ -226,7 +231,6 @@ sub init
 			@TP@accounting
 		WHERE
 			ID = %{query.DuplicateID}
-			AND PeriodKey = %{query.PeriodKey}
 	';
 
 	# Setup SQL queries
@@ -523,7 +527,7 @@ sub acct_log
 			}
 
 			# Check if we updated duplicates, if we did, fix them
-			if ($sth > 1) {
+			if ($sth ne "0E0" && $sth > 1) {
 				fixDuplicates($server, $template);
 			}
 
@@ -541,7 +545,7 @@ sub acct_log
 			}
 
 			# Check if we updated duplicates, if we did, fix them
-			if ($sth > 1) {
+			if ($sth ne "0E0" && $sth > 1) {
 				fixDuplicates($server, $template);
 			}
 
@@ -642,7 +646,7 @@ sub acct_log
 		}
 
 		# Check if we updated duplicates, if we did, fix them
-		if ($sth > 1) {
+		if ($sth ne "0E0" && $sth > 1) {
 			fixDuplicates($server, $template);
 		}
 	}
diff --git a/smradiusd.conf b/smradiusd.conf
index 056bf047..41754f85 100644
--- a/smradiusd.conf
+++ b/smradiusd.conf
@@ -250,7 +250,7 @@ accounting_start_query=<<EOT
 		%{request.NAS-Port-Type},
 		%{request.Calling-Station-Id},
 		%{request.Called-Station-Id},
-		%{request.NAS-Port-Id},
+		%{request.NAS-Port-Id=},
 		%{request.Acct-Session-Id},
 		%{request.Framed-IP-Address},
 		%{request.Acct-Authentic},
@@ -279,6 +279,7 @@ accounting_update_get_records_query=<<EOT
 		Username = %{request.User-Name}
 		AND AcctSessionID = %{request.Acct-Session-Id}
 		AND NASIPAddress = %{request.NAS-IP-Address}
+		AND NASPortID = %{request.NAS-Port-Id=}
 	GROUP BY
 		PeriodKey
 	ORDER BY
@@ -301,6 +302,7 @@ accounting_update_query=<<EOT
 		Username = %{request.User-Name}
 		AND AcctSessionID = %{request.Acct-Session-Id}
 		AND NASIPAddress = %{request.NAS-IP-Address}
+		AND NASPortID = %{request.NAS-Port-Id=}
 		AND PeriodKey = %{query.PeriodKey}
 EOT
 
@@ -319,6 +321,7 @@ accounting_stop_query=<<EOT
 		Username = %{request.User-Name}
 		AND AcctSessionID = %{request.Acct-Session-Id}
 		AND NASIPAddress = %{request.NAS-IP-Address}
+		AND NASPortID = %{request.NAS-Port-Id=}
 		AND PeriodKey = %{query.PeriodKey}
 EOT
 
@@ -332,6 +335,7 @@ accounting_stop_status_query=<<EOT
 		Username = %{request.User-Name}
 		AND AcctSessionID = %{request.Acct-Session-Id}
 		AND NASIPAddress = %{request.NAS-IP-Address}
+		AND NASPortID = %{request.NAS-Port-Id=}
 EOT
 
 accounting_usage_query=<<EOT
@@ -357,9 +361,10 @@ accounting_select_duplicates_query=<<EOT
 		Username = %{request.User-Name}
 		AND AcctSessionID = %{request.Acct-Session-Id}
 		AND NASIPAddress = %{request.NAS-IP-Address}
+		AND NASPortID = %{request.NAS-Port-Id=}
 		AND PeriodKey = %{query.PeriodKey}
 	ORDER BY
-		ID
+		ID DESC
 		LIMIT 99 OFFSET 1
 EOT
 
@@ -368,7 +373,6 @@ accounting_delete_duplicates_query=<<EOT
 		@TP@accounting
 	WHERE
 		ID = %{query.DuplicateID}
-		AND PeriodKey = %{query.PeriodKey}
 EOT
 
 
-- 
GitLab