add new header ident.h
[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
19 #define SQLSOCK_LOCKED          0
20 #define SQLSOCK_UNLOCKED        1
21
22 #define PW_ITEM_CHECK                   0
23 #define PW_ITEM_REPLY                   1
24
25 typedef char** SQL_ROW;
26
27 typedef struct sql_socket {
28         int     id;
29 #ifdef HAVE_PTHREAD_H
30         pthread_mutex_t mutex;
31 #endif
32         struct sql_socket *next;
33         enum { sockconnected, sockunconnected } state;
34
35         void    *conn;
36         SQL_ROW row;
37 } SQLSOCK;
38
39 typedef struct rlm_sql_module_t {
40         const char *name;
41         int (*sql_init_socket)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
42         int (*sql_destroy_socket)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
43         int (*sql_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config, char *query);
44         int (*sql_select_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config, char *query);
45         int (*sql_store_result)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
46         int (*sql_num_fields)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
47         int (*sql_num_rows)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
48         int (*sql_fetch_row)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
49         int (*sql_free_result)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
50         char *(*sql_error)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
51         int (*sql_close)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
52         int (*sql_finish_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
53         int (*sql_finish_select_query)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
54         int (*sql_affected_rows)(SQLSOCK *sqlsocket, SQL_CONFIG *config);
55 } rlm_sql_module_t;
56
57 typedef struct sql_inst {
58         time_t          connect_after;
59         SQLSOCK         *sqlpool;
60         SQLSOCK         *last_used;
61         SQL_CONFIG      *config;
62
63         lt_dlhandle handle;
64         rlm_sql_module_t *module;
65 } SQL_INST;
66
67 typedef struct sql_grouplist {
68         char                    groupname[MAX_STRING_LEN];
69         struct sql_grouplist    *next;
70 } SQL_GROUPLIST;
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);
79 int     sql_read_realms(SQLSOCK * sqlsocket);
80 int     sql_getvpdata(SQL_INST * inst, SQLSOCK * sqlsocket, VALUE_PAIR **pair, char *query);
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