Non-Breaking Accounting Response Handling

null) (null kckong1 at yahoo.com
Thu Mar 13 15:12:27 UTC 2025


I hope you can identify the issue here. Thank for your help.

I also tried using redundancy as follows, but still no luck. :(

redundant {
	radutmp
	sql_Fradius_log
}
ok


(1) Received Accounting-Request Id 10 from 127.0.0.1:49348 to 127.0.0.1:1813 length 49
(1)   User-Name = "testuser at domain"
(1)   Acct-Status-Type = Start
(1)   NAS-Port = 3
(1) # Executing section preacct from file /etc/raddb/sites-enabled/default
(1)   preacct {
(1)     [preprocess] = ok
(1)     policy acct_unique {
(1)       update request {
(1)         &Tmp-String-9 := "ai:"
(1)       } # update request = noop
(1)       if (("%{hex:&Class}" =~ /^%{hex:&Tmp-String-9}/) && 	    ("%{string:&Class}" =~ /^ai:([0-9a-f]{32})/i)) {
(1)       EXPAND %{hex:&Class}
(1)          -->
(1)       EXPAND ^%{hex:&Tmp-String-9}
(1)          --> ^61693a
(1)       if (("%{hex:&Class}" =~ /^%{hex:&Tmp-String-9}/) && 	    ("%{string:&Class}" =~ /^ai:([0-9a-f]{32})/i))  -> FALSE
(1)       else {
(1)         update request {
(1)           EXPAND %{md5:%{User-Name},%{Acct-Session-ID},%{%{NAS-IPv6-Address}:-%{NAS-IP-Address}},%{NAS-Identifier},%{NAS-Port-ID},%{NAS-Port}}
(1)              --> 07956f1250babaf1ff478f016d470d4c
(1)           &Acct-Unique-Session-Id := 07956f1250babaf1ff478f016d470d4c
(1)         } # update request = noop
(1)       } # else = noop
(1)       update request {
(1)         &Tmp-String-9 !* ANY
(1)       } # update request = noop
(1)     } # policy acct_unique = noop
(1) suffix: Checking for suffix after "@"
(1) suffix: Looking up realm "domain" for User-Name = "testuser at domain"
(1) suffix: No such realm "domain"
(1)     [suffix] = noop
(1)     [files] = noop
(1)   } # preacct = ok
(1) # Executing section accounting from file /etc/raddb/sites-enabled/default
(1)   accounting {
(1)     if ("%{User-Name}" =~ /@/) {
(1)     EXPAND %{User-Name}
(1)        --> testuser at domain
(1)     if ("%{User-Name}" =~ /@/)  -> TRUE
(1)     if ("%{User-Name}" =~ /@/)  {
(1) radutmp: EXPAND /opt/Fradius_log/shared/radius/radutmp
(1) radutmp:    --> /opt/Fradius_log/shared/radius/radutmp
(1) radutmp: EXPAND %{User-Name}
(1) radutmp:    --> testuser at domain
(1)       [radutmp] = ok
(1) sql_Fradius_log: EXPAND %{tolower:type.%{%{Acct-Status-Type}:-%{Request-Processing-Stage}}.query}
(1) sql_Fradius_log:    --> type.start.query
(1) sql_Fradius_log: Using query template 'query'
rlm_sql (sql_Fradius_log): Reserved connection (2)
(1) sql_Fradius_log: EXPAND %{User-Name}
(1) sql_Fradius_log:    --> testuser at domain
(1) sql_Fradius_log: SQL-User-Name set to 'testuser at domain'
(1) sql_Fradius_log: EXPAND INSERT INTO radacct (acctsessionid,		acctuniqueid,		username, realm,		nasipaddress,		nasportid, nasporttype,		acctstarttime,		acctupdatetime, acctstoptime,		acctsessiontime, 	acctauthentic, connectinfo_start,	connectinfo_stop, 	acctinputoctets, acctoutputoctets,	calledstationid, 	callingstationid, acctterminatecause,	servicetype,		framedprotocol, framedipaddress,	framedipv6address,	framedipv6prefix, framedinterfaceid,	delegatedipv6prefix	) VALUES ('%{Acct-Session-Id}', '%{Acct-Unique-Session-Id}', '%{SQL-User-Name}', '%{Realm}', '%{NAS-IP-Address}', '%{%{NAS-Port-ID}:-%{NAS-Port}}', '%{NAS-Port-Type}', FROM_UNIXTIME(%{%{integer:Event-Timestamp}:-%l}), FROM_UNIXTIME(%{%{integer:Event-Timestamp}:-%l}), NULL, '0', '%{Acct-Authentic}', '%{Connect-Info}', '', '0', '0', '%{Called-Station-Id}', '%{Calling-Station-Id}', '', '%{Service-Type}', '%{Framed-Protocol}', '%{Framed-IP-Address}', '%{Framed-IPv6-Address}', '%{Framed-IPv6-Prefix}', '%{Framed-Interface-Id}', '%{Delegated-IPv6-Prefix}' )
(1) sql_Fradius_log:    --> INSERT INTO radacct (acctsessionid,		acctuniqueid,		username, realm,		nasipaddress,		nasportid, nasporttype,		acctstarttime,		acctupdatetime, acctstoptime,		acctsessiontime, 	acctauthentic, connectinfo_start,	connectinfo_stop, 	acctinputoctets, acctoutputoctets,	calledstationid, 	callingstationid, acctterminatecause,	servicetype,		framedprotocol, framedipaddress,	framedipv6address,	framedipv6prefix, framedinterfaceid,	delegatedipv6prefix	) VALUES ('', '07956f1250babaf1ff478f016d470d4c', 'testuser at domain', '', '127.0.0.1', '3', '', FROM_UNIXTIME(1741878287), FROM_UNIXTIME(1741878287), NULL, '0', '', '', '', '0', '0', '', '', '', '', '', '', '', '', '', '' )
(1) sql_Fradius_log: Executing query: INSERT INTO radacct (acctsessionid,		acctuniqueid,		username, realm,			nasipaddress,		nasportid, nasporttype,		acctstarttime,		acctupdatetime, acctstoptime,		acctsessiontime, 	acctauthentic, connectinfo_start,	connectinfo_stop, 	acctinputoctets, acctoutputoctets,	calledstationid, 	callingstationid, acctterminatecause,	servicetype,		framedprotocol, framedipaddress,	framedipv6address,	framedipv6prefix, framedinterfaceid,	delegatedipv6prefix	) VALUES ('', '07956f1250babaf1ff478f016d470d4c', 'testuser at domain', '', '127.0.0.1', '3', '', FROM_UNIXTIME(1741878287), FROM_UNIXTIME(1741878287), NULL, '0', '', '', '', '0', '0', '', '', '', '', '', '', '', '', '', '' )
(1) sql_Fradius_log: ERROR: rlm_sql_mysql: ERROR 1927 (Connection was killed): 70100
(1) sql_Fradius_log: SQL query returned: server error
rlm_sql (sql_Fradius_log): Released connection (2)
Need more connections to reach 10 spares
rlm_sql (sql_Fradius_log): Opening additional connection (7), 1 of 25 pending slots used
rlm_sql_mysql: Starting connect to MySQL server
rlm_sql_mysql: Couldn't connect to MySQL server root at 10.0.0.79:Fradius
rlm_sql_mysql: MySQL error: Can't connect to MySQL server on '10.0.0.79' (111)
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_Fradius_log): Opening connection failed (7)
rlm_sql (sql_Fradius_log): Closing expired connection (5) - Hit idle_timeout limit
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_Fradius_log): Closing expired connection (4) - Hit idle_timeout limit
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_Fradius_log): Closing expired connection (3) - Hit idle_timeout limit
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql_Fradius_log): Closing expired connection (0) - Hit idle_timeout limit
rlm_sql_mysql: Socket destructor called, closing socket

….

(3) Not sending reply to client.
(3) Finished request
(3) Cleaning up request packet ID 10 with timestamp +100 due to done




> On 13 Mar 2025, at 10:55 PM, Alan DeKok <aland at deployingradius.com> wrote:
> 
> On Mar 13, 2025, at 4:53 PM, (null) (null) via Freeradius-Users <freeradius-users at lists.freeradius.org> wrote:
>> Tried the following settings, but it still doesn't work.
> 
>  If only there was some kind of debug output which could help.
> 
>> The accounting log breaks when SQL fails to connect, and it only returns successfully when the SQL server is up. I want to ensure that accounting responds even if it fails to save the log to radutmp or SQL.
> 
> 1) read the debug output to see what's going on
> 
> 2) write a policy (e.g. using the "redundant" keyword ) which handles this situation.
> 
>  This is documented extensively.
> 
>  Alan DeKok.
> 



More information about the Freeradius-Users mailing list