1 /***************************************************************************
2 * rlm_sql.h rlm_sql - FreeRADIUS SQL Module *
4 * Header for main SQL module file *
6 * Mike Machado <mike@innercite.com> *
7 ***************************************************************************/
20 #define SQLSOCK_LOCKED 0
21 #define SQLSOCK_UNLOCKED 1
23 #define PW_VP_USERDATA 1
24 #define PW_VP_GROUPDATA 2
25 #define PW_VP_REALMDATA 3
27 #define PW_ITEM_CHECK 0
28 #define PW_ITEM_REPLY 1
30 typedef char** SQL_ROW;
32 typedef struct sql_socket {
35 pthread_mutex_t mutex;
37 struct sql_socket *next;
38 enum { sockconnected, sockunconnected } state;
44 typedef struct rlm_sql_module_t {
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);
62 typedef struct sql_inst {
69 rlm_sql_module_t *module;
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);