]> git.pld-linux.org Git - packages/freeradius-server.git/blob - failed_calls_accounting.patch
- package rlm_sql_map and rlm_totp modules + (optional) rlm_sql_db2 in -module-sql...
[packages/freeradius-server.git] / failed_calls_accounting.patch
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
8 @@ -118,6 +118,8 @@
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.
14  .IP simul_count_query
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
24 @@ -66,6 +66,7 @@
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'"
31  
32 @@ -88,3 +89,7 @@
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}')"
35  
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
47 @@ -135,6 +135,7 @@
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} \
55 @@ -263,6 +264,27 @@
56               '%{Service-Type}', '%{Framed-Protocol}', '%{Framed-IP-Address}', \
57               '0', '%{%{Acct-Delay-Time}:-0}')"
58  
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) \
69 +        VALUES \
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}', \
75 +             '', '0', '0', \
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}')"
79 +
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
90 @@ -95,6 +95,7 @@
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')"
97  
98 @@ -142,6 +143,9 @@
99      '%{Called-Station-Id}', '%{Calling-Station-Id}', '%{Acct-Terminate-Cause}', '%{Service-Type}', \
100      '%{Framed-Protocol}', '%{Framed-IP-Address}', '0', '%{Acct-Delay-Time:-0}')"
101  
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}')"
104 +
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
115 @@ -153,6 +153,7 @@
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  #######################################################################
121  
122  accounting_onoff_query = "UPDATE ${acct_table1} \
123 @@ -262,6 +263,29 @@
124    '%{Framed-Protocol}', \
125    NULLIF('%{Framed-IP-Address}', '')::inet, 0)"
126  
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, \
147 +   0, \
148 +   '%{X-Ascend-Session-Svr-Key}')"
149 +
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
160 @@ -286,6 +286,7 @@
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
165  
166  /*
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
175 @@ -32,6 +32,7 @@
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;
183 @@ -74,7 +75,7 @@
184  
185  #define ASCEND_PORT_HACK
186  #define ASCEND_CHANNELS_PER_LINE        23
187 -#define CISCO_ACCOUNTING_HACK
188 +/* #define CISCO_ACCOUNTING_HACK */
189  
190  /* SQL defines */
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
199 @@ -89,6 +89,8 @@
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 @@
209                         }
210                         break;
211  
212 +           /*
213 +            * Got accounting failed packet
214 +            */
215 +       case PW_STATUS_FAILED:
216 +           /*
217 +            * Set, escape, and check the user attr here
218 +            */
219 +           sql_set_user(inst, request, sqlusername, NULL);
220 +
221 +           radius_xlat(querystr, sizeof(querystr), inst->config->accounting_failed_query, request, sql_escape_func);
222 +           query_log(request, inst, querystr);
223 +
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;
233 +               }
234 +               (inst->module->sql_finish_query)(sqlsocket, inst->config);
235 +           }
236 +           break;
237 +
238                         /*
239                          *      Anything else is ignored.
240                          */
This page took 0.104876 seconds and 3 git commands to generate.