1 /***************************************************************************
2 * rlm_sql.h rlm_sql - FreeRADIUS SQL Module *
4 * Header for main SQL module file *
6 * Mike Machado <mike@innercite.com> *
7 ***************************************************************************/
11 #include <freeradius-devel/ident.h>
12 RCSIDH(rlm_sql_h, "$Id$")
22 #define SQLSOCK_LOCKED 0
23 #define SQLSOCK_UNLOCKED 1
25 #define PW_ITEM_CHECK 0
26 #define PW_ITEM_REPLY 1
28 typedef char** SQL_ROW;
30 typedef struct sql_socket {
33 pthread_mutex_t mutex;
35 struct sql_socket *next;
36 enum { sockconnected, sockunconnected } state;
42 typedef struct rlm_sql_module_t {
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);
60 typedef struct sql_inst SQL_INST;
69 rlm_sql_module_t *module;
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);
77 typedef struct sql_grouplist {
78 char groupname[MAX_STRING_LEN];
79 struct sql_grouplist *next;
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);