eb1736756915ef35077f6d8d116f0d15f8c1f9c3
[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 #if HAVE_PTHREAD_H
12 #include        <pthread.h>
13 #endif
14
15 #if HAVE_SEMAPHORE_H
16 #include        <semaphore.h>
17 #endif
18
19 #include        <ltdl.h>
20
21 #include "conf.h"
22 #include "conffile.h"
23
24 #define SQLSOCK_LOCKED          0
25 #define SQLSOCK_UNLOCKED        1
26
27 #define PW_VP_USERDATA          1
28 #define PW_VP_GROUPDATA         2
29 #define PW_VP_REALMDATA         3
30
31 #define PW_ITEM_CHECK                   0
32 #define PW_ITEM_REPLY                   1
33
34 typedef char** SQL_ROW;
35
36 typedef struct sql_socket {
37         int     id;
38 #if HAVE_SEMAPHORE_H
39         sem_t  *semaphore;
40 #else
41         int     in_use;
42 #endif
43         struct sql_socket *next;
44         enum { sockconnected, sockunconnected } state;
45
46         void    *conn;
47         SQL_ROW row;
48 } SQLSOCK;
49
50 typedef struct rlm_sql_module_t {
51         const char *name;
52         int (*sql_init_socket)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
53         int (*sql_destroy_socket)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
54         int (*sql_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config, char *query);
55         int (*sql_select_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config, char *query);
56         int (*sql_store_result)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
57         int (*sql_num_fields)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
58         int (*sql_num_rows)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
59         int (*sql_fetch_row)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
60         int (*sql_free_result)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
61         char *(*sql_error)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
62         int (*sql_close)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
63         int (*sql_finish_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
64         int (*sql_finish_select_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
65         int (*sql_affected_rows)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
66 } rlm_sql_module_t;
67
68 typedef struct sql_inst {
69         int             used;
70         time_t connect_after;
71         SQLSOCK         *sqlpool;
72         SQL_CONFIG      *config;
73
74         rlm_sql_module_t *module;
75
76         int socknr;
77 #if HAVE_PTHREAD_H
78         pthread_mutex_t mutex;
79 #endif
80 } SQL_INST;
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, int mode);
89 int     sql_read_realms(SQLSOCK * sqlsocket);
90 int     sql_getvpdata(SQL_INST * inst, SQLSOCK * sqlsocket, VALUE_PAIR **pair, char *query, int mode);
91 int     sql_check_multi(SQL_INST * inst, SQLSOCK * sqlsocket, char *name, VALUE_PAIR * request, int maxsimul);
92 int     sql_read_naslist(SQLSOCK * sqlsocket);
93 int     sql_read_clients(SQLSOCK * sqlsocket);
94 int     sql_dict_init(SQLSOCK * sqlsocket);
95 void    query_log(SQL_INST * inst, char *querystr);
96 int     rlm_sql_select_query(SQLSOCK *sqlsocket, SQL_INST *inst, char *query);
97 int     rlm_sql_query(SQLSOCK *sqlsocket, SQL_INST *inst, char *query);
98 int     rlm_sql_fetch_row(SQLSOCK *sqlsocket, SQL_INST *inst);
99 #endif