1 Index: man/man5/rlm_sql.5
2 ===================================================================
3 RCS file: /source/radiusd/man/man5/rlm_sql.5,v
4 retrieving revision 1.4
5 diff -u -r1.4 rlm_sql.5
6 --- man/man5/rlm_sql.5 16 Mar 2008 15:39:10 -0000 1.4
7 +++ man/man5/rlm_sql.5 22 Jul 2009 13:09:15 -0000
9 .IP accounting_stop_query_alt
10 The query to be run when receiving an Accounting Stop packet. If the
11 primary query fails, the alt query is run.
12 +.IP accounting_failed_query
13 +The query to be run when receiving a Failed Packet.
15 The query to be run to return the number simultaneous sessions for the
16 purposes of limiting Simultaneous Use.
17 Index: raddb/sql/mssql/dialup.conf
18 ===================================================================
19 RCS file: /source/radiusd/raddb/sql/mssql/dialup.conf,v
20 retrieving revision 1.4
21 diff -u -r1.4 dialup.conf
22 --- raddb/sql/mssql/dialup.conf 30 Apr 2008 08:33:39 -0000 1.4
23 +++ raddb/sql/mssql/dialup.conf 22 Jul 2009 13:09:15 -0000
25 # accounting_stop_query_alt - query for Accounting start packets
26 # (alternate in case first query doesn't
27 # affect any existing rows in the table)
28 + # accounting_failed_query - query for Accounting failed packets
29 #######################################################################
30 accounting_onoff_query = "UPDATE ${acct_table1} SET AcctStopTime='%S', AcctSessionTime=unix_timestamp('%S') - unix_timestamp(AcctStartTime), AcctTerminateCause='%{Acct-Terminate-Cause}', AcctStopDelay = %{Acct-Delay-Time:-0} WHERE AcctStopTime=0 AND NASIPAddress= '%{NAS-IP-Address}' AND AcctStartTime <= '%S'"
33 # removed. These fields are processing by a database
34 accounting_stop_query_alt = "INSERT into ${acct_table2} (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPort, NASPortType, AcctStopTime, AcctSessionTime, AcctAuthentic, ConnectInfo_start, ConnectInfo_stop, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, AcctTerminateCause, ServiceType, FramedProtocol, FramedIPAddress, AcctStartDelay, AcctStopDelay) values('%{Acct-Session-Id}', '%{Acct-Unique-Session-Id}', '%{SQL-User-Name}', '%{Realm}', '%{NAS-IP-Address}', '%{NAS-Port-Id}', '%{NAS-Port-Type}', '%S', '%{Acct-Session-Time}', '%{Acct-Authentic}', '', '%{Connect-Info}', '%{Acct-Input-Octets}', '%{Acct-Output-Octets}', '%{Called-Station-Id}', '%{Calling-Station-Id}', '%{Acct-Terminate-Cause}', '%{Service-Type}', '%{Framed-Protocol}', '%{Framed-IP-Address}', '0', '%{Acct-Delay-Time:-0}')"
36 + # accounting_failed_query: Inserting of RadAcctId and AcctStopTime was
37 + # removed. These fields are processing by a database
38 + accounting_start_query = "INSERT into ${acct_table1} (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPort, NASPortType, AcctStartTime, AcctSessionTime, AcctAuthentic, ConnectInfo_start, ConnectInfo_stop, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, AcctTerminateCause, ServiceType, FramedProtocol, FramedIPAddress, AcctStartDelay, AcctStopDelay, XAscendSessionSvrKey) \
39 + VALUES('%{Acct-Session-Id}', '%{Acct-Unique-Session-Id}', '%{SQL-User-Name}', '%{Realm}', '%{NAS-IP-Address}', '%{NAS-Port-Id}', '%{NAS-Port-Type}', '%S', '0', '%{Acct-Authentic}', '%{Connect-Info}', '', '0', '0', '%{Called-Station-Id}', '%{Calling-Station-Id}', '', '%{Service-Type}', '%{Framed-Protocol}', '%{Framed-IP-Address}', '%{Acct-Delay-Time}', '0', '%{X-Ascend-Session-Svr-Key}')"
40 Index: raddb/sql/mysql/dialup.conf
41 ===================================================================
42 RCS file: /source/radiusd/raddb/sql/mysql/dialup.conf,v
43 retrieving revision 1.8
44 diff -u -r1.8 dialup.conf
45 --- raddb/sql/mysql/dialup.conf 3 May 2008 17:16:07 -0000 1.8
46 +++ raddb/sql/mysql/dialup.conf 22 Jul 2009 13:09:15 -0000
48 # accounting_stop_query_alt - query for Accounting start packets
49 # (alternate in case first query doesn't
50 # affect any existing rows in the table)
51 + # accounting_failed_query - query for Accounting failed packets
52 #######################################################################
53 accounting_onoff_query = "\
54 UPDATE ${acct_table1} \
56 '%{Service-Type}', '%{Framed-Protocol}', '%{Framed-IP-Address}', \
57 '0', '%{%{Acct-Delay-Time}:-0}')"
59 + accounting_failed_query = " \
60 + INSERT INTO ${acct_table1} \
61 + (acctsessionid, acctuniqueid, username, \
62 + realm, nasipaddress, nasportid, \
63 + nasporttype, acctstarttime, acctstoptime, \
64 + acctsessiontime, acctauthentic, connectinfo_start, \
65 + connectinfo_stop, acctinputoctets, acctoutputoctets, \
66 + calledstationid, callingstationid, acctterminatecause, \
67 + servicetype, framedprotocol, framedipaddress, \
68 + acctstartdelay, acctstopdelay, xascendsessionsvrkey) \
70 + ('%{Acct-Session-Id}', '%{Acct-Unique-Session-Id}', \
71 + '%{SQL-User-Name}', \
72 + '%{Realm}', '%{NAS-IP-Address}', '%{NAS-Port}', \
73 + '%{NAS-Port-Type}', '%S', NULL, \
74 + '0', '%{Acct-Authentic}', '%{Connect-Info}', \
76 + '%{Called-Station-Id}', '%{Calling-Station-Id}', '', \
77 + '%{Service-Type}', '%{Framed-Protocol}', '%{Framed-IP-Address}', \
78 + '%{%{Acct-Delay-Time}:-0}', '0', '%{X-Ascend-Session-Svr-Key}')"
80 #######################################################################
81 # Simultaneous Use Checking Queries
82 #######################################################################
83 Index: raddb/sql/oracle/dialup.conf
84 ===================================================================
85 RCS file: /source/radiusd/raddb/sql/oracle/dialup.conf,v
86 retrieving revision 1.4
87 diff -u -r1.4 dialup.conf
88 --- raddb/sql/oracle/dialup.conf 30 Apr 2008 08:33:39 -0000 1.4
89 +++ raddb/sql/oracle/dialup.conf 22 Jul 2009 13:09:15 -0000
91 # accounting_stop_query_alt - query for Accounting start packets
92 # (alternate in case first query doesn't
93 # affect any existing rows in the table)
94 + # accounting_failed_query - query for Accounting failed packets
95 #######################################################################
96 accounting_onoff_query = "UPDATE ${acct_table1} SET AcctStopTime=TO_DATE('%S','yyyy-mm-dd hh24:mi:ss'), AcctSessionTime=((TO_DATE('%S','yyyy-mm-dd hh24:mi:ss') - AcctStartTime)*86400), AcctTerminateCause='%{Acct-Terminate-Cause}', AcctStopDelay = %{Acct-Delay-Time:-0} WHERE AcctStopTime IS NULL AND NASIPAddress = '%{NAS-IP-Address}' AND AcctStartTime <= TO_DATE('%S','yyyy-mm-dd hh24:mi:ss')"
99 '%{Called-Station-Id}', '%{Calling-Station-Id}', '%{Acct-Terminate-Cause}', '%{Service-Type}', \
100 '%{Framed-Protocol}', '%{Framed-IP-Address}', '0', '%{Acct-Delay-Time:-0}')"
102 +accounting_failed_query = "INSERT into ${acct_table1} (RadAcctId, AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctStopTime, AcctSessionTime, AcctAuthentic, ConnectInfo_start, ConnectInfo_stop, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, AcctTerminateCause, ServiceType, FramedProtocol, FramedIPAddress, AcctStartDelay, AcctStopDelay, XAscendSessionSvrKey) \
103 + VALUES('', '%{Acct-Session-Id}', '%{Acct-Unique-Session-Id}', '%{SQL-User-Name}', '%{Realm}', '%{NAS-IP-Address}', '%{NAS-Port-Id}', '%{NAS-Port-Type}', TO_DATE('%S','yyyy-mm-dd hh24:mi:ss'), NULL, '0', '%{Acct-Authentic}', '%{Connect-Info}', '', '0', '0', '%{Called-Station-Id}', '%{Calling-Station-Id}', '', '%{Service-Type}', '%{Framed-Protocol}', '%{Framed-IP-Address}', '%{Acct-Delay-Time}', '0', '%{X-Ascend-Session-Svr-Key}')"
105 #######################################################################
106 # Simultaneous Use Checking Queries
107 #######################################################################
108 Index: raddb/sql/postgresql/dialup.conf
109 ===================================================================
110 RCS file: /source/radiusd/raddb/sql/postgresql/dialup.conf,v
111 retrieving revision 1.9
112 diff -u -r1.9 dialup.conf
113 --- raddb/sql/postgresql/dialup.conf 30 Apr 2008 08:33:40 -0000 1.9
114 +++ raddb/sql/postgresql/dialup.conf 22 Jul 2009 13:09:15 -0000
116 # accounting_stop_query_alt - query for Accounting start packets
117 # (alternate in case first query doesn't
118 # affect any existing rows in the table)
119 +# accounting_failed_query - query for Accounting failed packets
120 #######################################################################
122 accounting_onoff_query = "UPDATE ${acct_table1} \
124 '%{Framed-Protocol}', \
125 NULLIF('%{Framed-IP-Address}', '')::inet, 0)"
127 +accounting_failed_query = "INSERT INTO ${acct_table1} \
128 + (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, \
129 + NASPortId, NASPortType, AcctStartTime, AcctAuthentic, \
130 + ConnectInfo_start, CalledStationId, CallingStationId, ServiceType, \
131 + FramedProtocol, FramedIPAddress, AcctStartDelay, XAscendSessionSvrKey) \
132 + VALUES('%{Acct-Session-Id}', \
133 + '%{Acct-Unique-Session-Id}', \
134 + '%{SQL-User-Name}', \
135 + NULLIF('%{Realm}', ''), \
136 + '%{NAS-IP-Address}', \
137 + %{%{NAS-Port}:-NULL}::integer, \
138 + '%{NAS-Port-Type}', \
139 + ('%S'::timestamp - '%{%{Acct-Delay-Time}:-0}'::interval), \
140 + '%{Acct-Authentic}', \
141 + '%{Connect-Info}', \
142 + '%{Called-Station-Id}', \
143 + '%{Calling-Station-Id}', \
144 + '%{Service-Type}', \
145 + '%{Framed-Protocol}', \
146 + NULLIF('%{Framed-IP-Address}', '')::inet, \
148 + '%{X-Ascend-Session-Svr-Key}')"
150 #######################################################################
151 # Group Membership Queries
152 #######################################################################
153 Index: src/include/radius.h
154 ===================================================================
155 RCS file: /source/radiusd/src/include/radius.h,v
156 retrieving revision 1.93
157 diff -u -r1.93 radius.h
158 --- src/include/radius.h 25 Apr 2008 06:20:55 -0000 1.93
159 +++ src/include/radius.h 22 Jul 2009 13:09:15 -0000
161 #define PW_STATUS_ALIVE 3
162 #define PW_STATUS_ACCOUNTING_ON 7
163 #define PW_STATUS_ACCOUNTING_OFF 8
164 +#define PW_STATUS_FAILED 15
167 * Vendor Private Enterprise Codes
168 Index: src/modules/rlm_sql/conf.h
169 ===================================================================
170 RCS file: /source/radiusd/src/modules/rlm_sql/conf.h,v
171 retrieving revision 1.25
172 diff -u -r1.25 conf.h
173 --- src/modules/rlm_sql/conf.h 14 Nov 2006 21:22:29 -0000 1.25
174 +++ src/modules/rlm_sql/conf.h 22 Jul 2009 13:09:16 -0000
176 char *accounting_start_query_alt;
177 char *accounting_stop_query;
178 char *accounting_stop_query_alt;
179 + char *accounting_failed_query;
180 char *simul_count_query;
181 char *simul_verify_query;
182 char *groupmemb_query;
185 #define ASCEND_PORT_HACK
186 #define ASCEND_CHANNELS_PER_LINE 23
187 -#define CISCO_ACCOUNTING_HACK
188 +/* #define CISCO_ACCOUNTING_HACK */
191 #define MAX_QUERY_LEN 4096
192 Index: src/modules/rlm_sql/rlm_sql.c
193 ===================================================================
194 RCS file: /source/radiusd/src/modules/rlm_sql/rlm_sql.c,v
195 retrieving revision 1.182
196 diff -u -r1.182 rlm_sql.c
197 --- src/modules/rlm_sql/rlm_sql.c 13 Jun 2008 12:30:07 -0000 1.182
198 +++ src/modules/rlm_sql/rlm_sql.c 22 Jul 2009 13:09:16 -0000
200 offsetof(SQL_CONFIG,accounting_stop_query), NULL, ""},
201 {"accounting_stop_query_alt", PW_TYPE_STRING_PTR,
202 offsetof(SQL_CONFIG,accounting_stop_query_alt), NULL, ""},
203 + {"accounting_failed_query", PW_TYPE_STRING_PTR,
204 + offsetof(SQL_CONFIG,accounting_failed_query), NULL, ""},
205 {"group_membership_query", PW_TYPE_STRING_PTR,
206 offsetof(SQL_CONFIG,groupmemb_query), NULL, NULL},
207 {"connect_failure_retry_delay", PW_TYPE_INTEGER,
208 @@ -1287,6 +1289,32 @@
213 + * Got accounting failed packet
215 + case PW_STATUS_FAILED:
217 + * Set, escape, and check the user attr here
219 + sql_set_user(inst, request, sqlusername, NULL);
221 + radius_xlat(querystr, sizeof(querystr), inst->config->accounting_failed_query, request, sql_escape_func);
222 + query_log(request, inst, querystr);
224 + sqlsocket = sql_get_socket(inst);
225 + if (sqlsocket == NULL)
226 + return(RLM_MODULE_FAIL);
227 + if (*querystr) { /* non-empty query */
228 + if (rlm_sql_query(sqlsocket, inst, querystr)) {
229 + radlog(L_ERR, "rlm_sql (%s): Couldn't insert SQL accounting FAILED record - %s",
230 + inst->config->xlat_name,
231 + (char *)(inst->module->sql_error)(sqlsocket, inst->config));
232 + ret = RLM_MODULE_FAIL;
234 + (inst->module->sql_finish_query)(sqlsocket, inst->config);
239 * Anything else is ignored.