1 | # |
---|
2 | # Configuration for the SQL module, when using MSSQL. |
---|
3 | # |
---|
4 | # The database schema is available at: |
---|
5 | # |
---|
6 | # doc/examples/mssql.sql |
---|
7 | # |
---|
8 | # $Id: mssql.conf,v 1.6.4.1 2006/02/04 14:53:44 nbk Exp $ |
---|
9 | # |
---|
10 | sql { |
---|
11 | |
---|
12 | # Database type |
---|
13 | # Current supported are: rlm_sql_mysql, rlm_sql_postgresql, |
---|
14 | # rlm_sql_iodbc, rlm_sql_oracle, rlm_sql_unixodbc |
---|
15 | driver = "rlm_sql_unixodbc" |
---|
16 | |
---|
17 | # Connect info |
---|
18 | server = "localhost" |
---|
19 | login = "root" |
---|
20 | password = "rootpass" |
---|
21 | |
---|
22 | # Database table configuration |
---|
23 | radius_db = "radius" |
---|
24 | |
---|
25 | # If you want both stop and start records logged to the |
---|
26 | # same SQL table, leave this as is. If you want them in |
---|
27 | # different tables, put the start table in acct_table1 |
---|
28 | # and stop table in acct_table2 |
---|
29 | acct_table1 = "radacct" |
---|
30 | acct_table2 = "radacct" |
---|
31 | |
---|
32 | authcheck_table = "radcheck" |
---|
33 | authreply_table = "radreply" |
---|
34 | |
---|
35 | groupcheck_table = "radgroupcheck" |
---|
36 | groupreply_table = "radgroupreply" |
---|
37 | |
---|
38 | usergroup_table = "usergroup" |
---|
39 | |
---|
40 | # Remove stale session if checkrad does not see a double login |
---|
41 | deletestalesessions = yes |
---|
42 | |
---|
43 | # Print all SQL statements when in debug mode (-x) |
---|
44 | sqltrace = no |
---|
45 | sqltracefile = ${logdir}/sqltrace.sql |
---|
46 | |
---|
47 | # number of sql connections to make to server |
---|
48 | num_sql_socks = 5 |
---|
49 | |
---|
50 | # Safe characters list for sql queries. Everything else is replaced |
---|
51 | # with their mime-encoded equivalents. |
---|
52 | # The default list should be ok |
---|
53 | #safe-characters = "@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_: /" |
---|
54 | |
---|
55 | ####################################################################### |
---|
56 | # Query config: Username |
---|
57 | ####################################################################### |
---|
58 | # This is the username that will get substituted, escaped, and added |
---|
59 | # as attribute 'SQL-User-Name'. '%{SQL-User-Name}' should be used |
---|
60 | # below everywhere a username substitution is needed so you you can |
---|
61 | # be sure the username passed from the client is escaped properly. |
---|
62 | # |
---|
63 | # Uncomment the next line, if you want the sql_user_name to mean: |
---|
64 | # |
---|
65 | # Use Stripped-User-Name, if it's there. |
---|
66 | # Else use User-Name, if it's there, |
---|
67 | # Else use hard-coded string "none" as the user name. |
---|
68 | #sql_user_name = "%{Stripped-User-Name:-%{User-Name:-none}}" |
---|
69 | # |
---|
70 | sql_user_name = "%{User-Name}" |
---|
71 | |
---|
72 | |
---|
73 | ####################################################################### |
---|
74 | # Authorization Queries |
---|
75 | ####################################################################### |
---|
76 | # These queries compare the check items for the user |
---|
77 | # in ${authcheck_table} and setup the reply items in |
---|
78 | # ${authreply_table}. You can use any query/tables |
---|
79 | # you want, but the return data for each row MUST |
---|
80 | # be in the following order: |
---|
81 | # |
---|
82 | # 0. Row ID (currently unused) |
---|
83 | # 1. UserName/GroupName |
---|
84 | # 2. Item Attr Name |
---|
85 | # 3. Item Attr Value |
---|
86 | # 4. Item Attr Operation |
---|
87 | ####################################################################### |
---|
88 | # Query for case sensitive usernames was removed. Please contact with me, |
---|
89 | # if you know analog of STRCMP functions for MS SQL. |
---|
90 | |
---|
91 | authorize_check_query = "SELECT id,UserName,Attribute,Value,op FROM ${authcheck_table} WHERE Username = '%{SQL-User-Name}' ORDER BY id" |
---|
92 | authorize_reply_query = "SELECT id,UserName,Attribute,Value,op FROM ${authreply_table} WHERE Username = '%{SQL-User-Name}' ORDER BY id" |
---|
93 | |
---|
94 | authorize_group_check_query = "SELECT ${groupcheck_table}.id,${groupcheck_table}.GroupName,${groupcheck_table}.Attribute,${groupcheck_table}.Value,${groupcheck_table}.op FROM ${groupcheck_table},${usergroup_table} WHERE ${usergroup_table}.Username = '%{SQL-User-Name}' AND ${usergroup_table}.GroupName = ${groupcheck_table}.GroupName ORDER BY ${groupcheck_table}.id" |
---|
95 | authorize_group_reply_query = "SELECT ${groupreply_table}.id,${groupreply_table}.GroupName,${groupreply_table}.Attribute,${groupreply_table}.Value,${groupreply_table}.op FROM ${groupreply_table},${usergroup_table} WHERE ${usergroup_table}.Username = '%{SQL-User-Name}' AND ${usergroup_table}.GroupName = ${groupreply_table}.GroupName ORDER BY ${groupreply_table}.id" |
---|
96 | |
---|
97 | |
---|
98 | ####################################################################### |
---|
99 | # Accounting Queries |
---|
100 | ####################################################################### |
---|
101 | # accounting_onoff_query - query for Accounting On/Off packets |
---|
102 | # accounting_update_query - query for Accounting update packets |
---|
103 | # accounting_update_query_alt - query for Accounting update packets |
---|
104 | # (alternate in case first query fails) |
---|
105 | # accounting_start_query - query for Accounting start packets |
---|
106 | # accounting_start_query_alt - query for Accounting start packets |
---|
107 | # (alternate in case first query fails) |
---|
108 | # accounting_stop_query - query for Accounting stop packets |
---|
109 | # accounting_stop_query_alt - query for Accounting start packets |
---|
110 | # (alternate in case first query doesn't |
---|
111 | # affect any existing rows in the table) |
---|
112 | ####################################################################### |
---|
113 | accounting_onoff_query = "UPDATE ${acct_table1} SET AcctStopTime='%S', AcctSessionTime=unix_timestamp('%S') - unix_timestamp(AcctStartTime), AcctTerminateCause='%{Acct-Terminate-Cause}', AcctStopDelay = %{Acct-Delay-Time} WHERE AcctSessionTime=0 AND AcctStopTime=0 AND NASIPAddress= '%{NAS-IP-Address}' AND AcctStartTime <= '%S'" |
---|
114 | |
---|
115 | accounting_update_query = "UPDATE ${acct_table1} SET FramedIPAddress = '%{Framed-IP-Address}' WHERE AcctSessionId = '%{Acct-Session-Id}' AND UserName = '%{SQL-User-Name}' AND NASIPAddress= '%{NAS-IP-Address}' AND AcctStopTime = 0" |
---|
116 | |
---|
117 | accounting_update_query_alt = "INSERT into ${acct_table1} (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPort, NASPortType, AcctSessionTime, AcctAuthentic, ConnectInfo_start, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, ServiceType, FramedProtocol, FramedIPAddress, AcctStartDelay) values('%{Acct-Session-Id}', '%{Acct-Unique-Session-Id}', '%{SQL-User-Name}', '%{Realm}', '%{NAS-IP-Address}', '%{NAS-Port-Id}', '%{NAS-Port-Type}', '%{Acct-Session-Time}', '%{Acct-Authentic}', '', '%{Acct-Input-Octets}', '%{Acct-Output-Octets}', '%{Called-Station-Id}', '%{Calling-Station-Id}', '%{Service-Type}', '%{Framed-Protocol}', '%{Framed-IP-Address}', '0')" |
---|
118 | |
---|
119 | # accounting_start_query: Inserting of RadAcctId and AcctStopTime was |
---|
120 | # removed. These fields are processing by a database |
---|
121 | 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) 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')" |
---|
122 | |
---|
123 | accounting_start_query_alt = "UPDATE ${acct_table1} SET AcctStartTime = '%S', AcctStartDelay = '%{Acct-Delay-Time}', ConnectInfo_start = '%{Connect-Info}' WHERE AcctSessionId = '%{Acct-Session-Id}' AND UserName = '%{SQL-User-Name}' AND NASIPAddress = '%{NAS-IP-Address}' AND AcctStopTime = 0" |
---|
124 | |
---|
125 | accounting_stop_query = "UPDATE ${acct_table2} SET AcctStopTime = '%S', AcctSessionTime = '%{Acct-Session-Time}', AcctInputOctets = '%{Acct-Input-Octets}', AcctOutputOctets = '%{Acct-Output-Octets}', AcctTerminateCause = '%{Acct-Terminate-Cause}', AcctStopDelay = '%{Acct-Delay-Time}', ConnectInfo_stop = '%{Connect-Info}' WHERE AcctSessionId = '%{Acct-Session-Id}' AND UserName = '%{SQL-User-Name}' AND NASIPAddress = '%{NAS-IP-Address}' AND AcctStopTime = 0" |
---|
126 | |
---|
127 | # accounting_stop_query_alt: Inserting of RadAcctId and AcctStartTime was |
---|
128 | # removed. These fields are processing by a database |
---|
129 | 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}')" |
---|
130 | |
---|
131 | } |
---|