Trying to accomodate the different db API's by only passing a SQLSOCK and the indivua...
[freeradius.git] / src / modules / rlm_sql / rlm_sql.h
1 /* freeradius sql module
2 *          Mike Machado
3 *          InnerCite
4 *          mike@innercite.com
5 */
6
7 #include "radiusd.h"
8 #include "sql_module.h"
9
10
11 #define QUERYLOG        "/var/log/radacct/radius.sql"
12 #define SQLCONFIGFILE   "radius.conf"
13 #define SQLBACKUP       "/var/log/radacct/sqlbackup.dat"
14
15 #define SQLBIGREC       32
16 #define SQLLILREC       16
17 #define PW_VP_USERDATA  1
18 #define PW_VP_GROUPDATA 2
19
20 #define MAX_TABLE_LEN 20
21 #define MAX_AUTH_QUERY_LEN 256
22
23 typedef struct sqlrec {
24         char            AcctSessionId[SQLBIGREC];
25         char            UserName[SQLBIGREC];
26         char            Realm[SQLBIGREC];
27         char            NASIPAddress[SQLLILREC];
28         unsigned long   NASPortId;
29         char            NASPortType[SQLBIGREC];
30         char            AcctStatusType[SQLBIGREC];
31         unsigned int    AcctStatusTypeId;
32         char            AcctTimeStamp[20];
33         unsigned long   AcctSessionTime;
34         char            AcctAuthentic[SQLBIGREC];
35         char            ConnectInfo[SQLBIGREC];
36         unsigned long   AcctInputOctets;
37         unsigned long   AcctOutputOctets;
38         char            CalledStationId[SQLLILREC];
39         char            CallingStationId[SQLLILREC];
40         char            AcctTerminateCause[SQLBIGREC];
41         char            ServiceType[SQLBIGREC];
42         char            FramedProtocol[SQLBIGREC];
43         char            FramedIPAddress[SQLLILREC];
44         unsigned long   AcctDelayTime;
45 } SQLREC; 
46
47 typedef struct sqlconfig {
48         char            sql_type[40];
49         char            sql_server[40];
50         int             sql_port;
51         char            sql_login[20];
52         char            sql_password[20];
53         char            sql_db[20];
54         char            sql_acct_table[MAX_TABLE_LEN];
55         char            sql_authcheck_table[MAX_TABLE_LEN];
56         char            sql_authreply_table[MAX_TABLE_LEN];
57         char            sql_groupcheck_table[MAX_TABLE_LEN];
58         char            sql_groupreply_table[MAX_TABLE_LEN];
59         char            sql_usergroup_table[MAX_TABLE_LEN];
60         char            sql_realm_table[MAX_TABLE_LEN];
61         char            sql_realmgroup_table[MAX_TABLE_LEN];
62         char            sql_nas_table[MAX_TABLE_LEN];
63         char            sql_dict_table[MAX_TABLE_LEN];
64         int             sql_keepopen;
65         int             sqltrace;
66 } SQLCONFIG;
67
68 typedef struct sql {
69         SQLSOCK         *AuthSock;
70         SQLSOCK         *AcctSock;
71         SQLREC          *sqlrecord;
72         SQLREC          *backuprecord;
73         SQLCONFIG       config;
74 } SQL;
75         
76 #define SQL_LOCK_LEN sizeof(SQLREC)
77
78 int             sql_start();
79 int             sql_save_acct(SQLREC *sqlrecord);
80 int             sql_userparse(VALUE_PAIR **first_pair, SQL_ROW row);
81 int             sql_checksocket(const char *facility);
82 int             sql_getvpdata(char *table, VALUE_PAIR **vp, char *user, int mode);
83 int             sql_check_multi(char *name, VALUE_PAIR *request, int maxsimul);