import from HEAD
[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 #ifdef HAVE_PTHREAD_H
12 #include        <pthread.h>
13 #endif
14
15 #include        <ltdl.h>
16
17 #include "conf.h"
18 #include "conffile.h"
19
20 #define SQLSOCK_LOCKED          0
21 #define SQLSOCK_UNLOCKED        1
22
23 #define PW_VP_USERDATA          1
24 #define PW_VP_GROUPDATA         2
25 #define PW_VP_REALMDATA         3
26
27 #define PW_ITEM_CHECK                   0
28 #define PW_ITEM_REPLY                   1
29
30 typedef char** SQL_ROW;
31
32 typedef struct sql_socket {
33         int     id;
34 #ifdef HAVE_PTHREAD_H
35         pthread_mutex_t mutex;
36 #endif
37         struct sql_socket *next;
38         enum { sockconnected, sockunconnected } state;
39
40         void    *conn;
41         SQL_ROW row;
42 } SQLSOCK;
43
44 typedef struct rlm_sql_module_t {
45         const char *name;
46         int (*sql_init_socket)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
47         int (*sql_destroy_socket)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
48         int (*sql_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config, char *query);
49         int (*sql_select_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config, char *query);
50         int (*sql_store_result)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
51         int (*sql_num_fields)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
52         int (*sql_num_rows)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
53         int (*sql_fetch_row)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
54         int (*sql_free_result)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
55         char *(*sql_error)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
56         int (*sql_close)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
57         int (*sql_finish_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
58         int (*sql_finish_select_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
59         int (*sql_affected_rows)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
60 } rlm_sql_module_t;
61
62 typedef 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 } SQL_INST;
71
72
73 int     sql_init_socketpool(SQL_INST * inst);
74 void    sql_poolfree(SQL_INST * inst);
75 int     sql_close_socket(SQL_INST *inst, SQLSOCK * sqlsocket);
76 SQLSOCK *sql_get_socket(SQL_INST * inst);
77 int     sql_release_socket(SQL_INST * inst, SQLSOCK * sqlsocket);
78 int     sql_userparse(VALUE_PAIR ** first_pair, SQL_ROW row, int mode);
79 int     sql_read_realms(SQLSOCK * sqlsocket);
80 int     sql_getvpdata(SQL_INST * inst, SQLSOCK * sqlsocket, VALUE_PAIR **pair, char *query, int mode);
81 int     sql_read_naslist(SQLSOCK * sqlsocket);
82 int     sql_read_clients(SQLSOCK * sqlsocket);
83 int     sql_dict_init(SQLSOCK * sqlsocket);
84 void    query_log(REQUEST *request, SQL_INST * inst, char *querystr);
85 int     rlm_sql_select_query(SQLSOCK *sqlsocket, SQL_INST *inst, char *query);
86 int     rlm_sql_query(SQLSOCK *sqlsocket, SQL_INST *inst, char *query);
87 int     rlm_sql_fetch_row(SQLSOCK *sqlsocket, SQL_INST *inst);
88 #endif