236078bc68b75b83db5a60b6af08d9f42edac3bb
[freeradius.git] / src / modules / rlm_sql / rlm_sql.h
1 /***************************************************************************
2 *  rlm_sql.h                          rlm_sql - FreeRADIUS SQL Module      *
3 *                                                                          *
4 *      Header for main SQL module file                                     *
5 *                                                                          *
6 *                                     Mike Machado <mike@innercite.com>    *
7 ***************************************************************************/
8 #ifndef _RLM_SQL_H
9 #define _RLM_SQL_H
10
11 #include <freeradius-devel/ident.h>
12 RCSIDH(rlm_sql_h, "$Id$")
13
14 #ifdef HAVE_PTHREAD_H
15 #include        <pthread.h>
16 #endif
17
18 #include        <ltdl.h>
19
20 #include "conf.h"
21
22 #define SQLSOCK_LOCKED          0
23 #define SQLSOCK_UNLOCKED        1
24
25 #define PW_ITEM_CHECK                   0
26 #define PW_ITEM_REPLY                   1
27
28 typedef char** SQL_ROW;
29
30 typedef struct sql_socket {
31         int     id;
32 #ifdef HAVE_PTHREAD_H
33         pthread_mutex_t mutex;
34 #endif
35         struct sql_socket *next;
36         enum { sockconnected, sockunconnected } state;
37
38         void    *conn;
39         SQL_ROW row;
40 } SQLSOCK;
41
42 typedef struct rlm_sql_module_t {
43         const char *name;
44         int (*sql_init_socket)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
45         int (*sql_destroy_socket)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
46         int (*sql_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config, char *query);
47         int (*sql_select_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config, char *query);
48         int (*sql_store_result)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
49         int (*sql_num_fields)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
50         int (*sql_num_rows)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
51         int (*sql_fetch_row)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
52         int (*sql_free_result)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
53         const char *(*sql_error)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
54         int (*sql_close)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
55         int (*sql_finish_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
56         int (*sql_finish_select_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
57         int (*sql_affected_rows)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
58 } rlm_sql_module_t;
59
60 typedef struct sql_inst SQL_INST;
61
62 struct sql_inst {
63         time_t          connect_after;
64         SQLSOCK         *sqlpool;
65         SQLSOCK         *last_used;
66         SQL_CONFIG      *config;
67
68         lt_dlhandle handle;
69         rlm_sql_module_t *module;
70
71         int (*sql_set_user)(SQL_INST *inst, REQUEST *request, char *sqlusername, const char *username);
72         SQLSOCK *(*sql_get_socket)(SQL_INST * inst);
73         int (*sql_release_socket)(SQL_INST * inst, SQLSOCK * sqlsocket);
74         size_t (*sql_escape_func)(char *out, size_t outlen, const char *in);
75 };
76
77 typedef struct sql_grouplist {
78         char                    groupname[MAX_STRING_LEN];
79         struct sql_grouplist    *next;
80 } SQL_GROUPLIST;
81
82
83 int     sql_init_socketpool(SQL_INST * inst);
84 void    sql_poolfree(SQL_INST * inst);
85 int     sql_close_socket(SQL_INST *inst, SQLSOCK * sqlsocket);
86 SQLSOCK *sql_get_socket(SQL_INST * inst);
87 int     sql_release_socket(SQL_INST * inst, SQLSOCK * sqlsocket);
88 int     sql_userparse(VALUE_PAIR ** first_pair, SQL_ROW row);
89 int     sql_read_realms(SQLSOCK * sqlsocket);
90 int     sql_getvpdata(SQL_INST * inst, SQLSOCK * sqlsocket, VALUE_PAIR **pair, char *query);
91 int     sql_read_naslist(SQLSOCK * sqlsocket);
92 int     sql_read_clients(SQLSOCK * sqlsocket);
93 int     sql_dict_init(SQLSOCK * sqlsocket);
94 void    query_log(REQUEST *request, SQL_INST * inst, char *querystr);
95 int     rlm_sql_select_query(SQLSOCK *sqlsocket, SQL_INST *inst, char *query);
96 int     rlm_sql_query(SQLSOCK *sqlsocket, SQL_INST *inst, char *query);
97 int     rlm_sql_fetch_row(SQLSOCK *sqlsocket, SQL_INST *inst);
98 int     sql_set_user(SQL_INST *inst, REQUEST *request, char *sqlusername, const char *username);
99 #endif