int numaffected;
char buffer[21]; /* 64bit max is 20 decimal chars + null byte */
- if (rlm_sql_query(sqlsocket,inst,querystr)) {
+ if (rlm_sql_query(&sqlsocket,inst,querystr)) {
radlog(L_ERR, "rlm_sql (%s): database query error, %s: %s",
inst->config->xlat_name, querystr,
(inst->module->sql_error)(sqlsocket,
return ret;
} /* else it's a SELECT statement */
- if (rlm_sql_select_query(sqlsocket,inst,querystr)){
+ if (rlm_sql_select_query(&sqlsocket,inst,querystr)){
radlog(L_ERR, "rlm_sql (%s): database query error, %s: %s",
inst->config->xlat_name,querystr,
(inst->module->sql_error)(sqlsocket, inst->config));
return 0;
}
- ret = rlm_sql_fetch_row(sqlsocket, inst);
+ ret = rlm_sql_fetch_row(&sqlsocket, inst);
if (ret) {
RDEBUG("SQL query did not succeed");
sqlsocket = sql_get_socket(inst);
if (sqlsocket == NULL)
return -1;
- if (rlm_sql_select_query(sqlsocket,inst,querystr)){
+ if (rlm_sql_select_query(&sqlsocket,inst,querystr)){
radlog(L_ERR, "rlm_sql (%s): database query error, %s: %s",
inst->config->xlat_name,querystr,
(inst->module->sql_error)(sqlsocket, inst->config));
return -1;
}
- while(rlm_sql_fetch_row(sqlsocket, inst) == 0) {
+ while(rlm_sql_fetch_row(&sqlsocket, inst) == 0) {
i++;
row = sqlsocket->row;
if (row == NULL)
return -1;
}
- if (rlm_sql_select_query(sqlsocket, inst, querystr) < 0) {
+ if (rlm_sql_select_query(&sqlsocket, inst, querystr) < 0) {
radlog_request(L_ERR, 0, request,
"database query error, %s: %s",
querystr,
(inst->module->sql_error)(sqlsocket,inst->config));
return -1;
}
- while (rlm_sql_fetch_row(sqlsocket, inst) == 0) {
+ while (rlm_sql_fetch_row(&sqlsocket, inst) == 0) {
row = sqlsocket->row;
if (row == NULL)
break;
sql_grouplist_free(&group_list);
return -1;
}
- rows = sql_getvpdata(inst, sqlsocket, &check_tmp, querystr);
+ rows = sql_getvpdata(inst, &sqlsocket, &check_tmp, querystr);
if (rows < 0) {
radlog_request(L_ERR, 0, request, "Error retrieving check pairs for group %s",
group_list_tmp->groupname);
sql_grouplist_free(&group_list);
return -1;
}
- if (sql_getvpdata(inst, sqlsocket, &reply_tmp, querystr) < 0) {
+ if (sql_getvpdata(inst, &sqlsocket, &reply_tmp, querystr) < 0) {
radlog_request(L_ERR, 0, request, "Error retrieving reply pairs for group %s",
group_list_tmp->groupname);
/* Remove the grouup we added above */
sql_grouplist_free(&group_list);
return -1;
}
- if (sql_getvpdata(inst, sqlsocket, &reply_tmp, querystr) < 0) {
+ if (sql_getvpdata(inst, &sqlsocket, &reply_tmp, querystr) < 0) {
radlog_request(L_ERR, 0, request, "Error retrieving reply pairs for group %s",
group_list_tmp->groupname);
/* Remove the grouup we added above */
pairdelete(&request->packet->vps, PW_SQL_USER_NAME, 0);
return RLM_MODULE_FAIL;
}
- rows = sql_getvpdata(inst, sqlsocket, &check_tmp, querystr);
+ rows = sql_getvpdata(inst, &sqlsocket, &check_tmp, querystr);
if (rows < 0) {
radlog_request(L_ERR, 0, request, "SQL query error; rejecting user");
sql_release_socket(inst, sqlsocket);
pairfree(&check_tmp);
return RLM_MODULE_FAIL;
}
- if (sql_getvpdata(inst, sqlsocket, &reply_tmp, querystr) < 0) {
+ if (sql_getvpdata(inst, &sqlsocket, &reply_tmp, querystr) < 0) {
radlog_request(L_ERR, 0, request, "SQL query error; rejecting user");
sql_release_socket(inst, sqlsocket);
/* Remove the username we (maybe) added above */
if (sqlsocket == NULL)
return(RLM_MODULE_FAIL);
if (*querystr) { /* non-empty query */
- if (rlm_sql_query(sqlsocket, inst, querystr)) {
+ if (rlm_sql_query(&sqlsocket, inst, querystr)) {
radlog_request(L_ERR, 0, request, "Couldn't update SQL accounting for Acct On/Off packet - %s",
(inst->module->sql_error)(sqlsocket, inst->config));
ret = RLM_MODULE_FAIL;
if (sqlsocket == NULL)
return(RLM_MODULE_FAIL);
if (*querystr) { /* non-empty query */
- if (rlm_sql_query(sqlsocket, inst, querystr)) {
+ if (rlm_sql_query(&sqlsocket, inst, querystr)) {
radlog_request(L_ERR, 0, request, "Couldn't update SQL accounting ALIVE record - %s",
(inst->module->sql_error)(sqlsocket, inst->config));
ret = RLM_MODULE_FAIL;
radius_xlat(querystr, sizeof(querystr), inst->config->accounting_update_query_alt, request, sql_escape_func);
query_log(request, inst, querystr);
if (*querystr) { /* non-empty query */
- if (rlm_sql_query(sqlsocket, inst, querystr)) {
+ if (rlm_sql_query(&sqlsocket, inst, querystr)) {
radlog_request(L_ERR, 0, request, "Couldn't insert SQL accounting ALIVE record - %s",
(inst->module->sql_error)(sqlsocket, inst->config));
ret = RLM_MODULE_FAIL;
if (sqlsocket == NULL)
return(RLM_MODULE_FAIL);
if (*querystr) { /* non-empty query */
- if (rlm_sql_query(sqlsocket, inst, querystr)) {
+ if (rlm_sql_query(&sqlsocket, inst, querystr)) {
radlog_request(L_ERR, 0, request, "Couldn't insert SQL accounting START record - %s",
(inst->module->sql_error)(sqlsocket, inst->config));
query_log(request, inst, querystr);
if (*querystr) { /* non-empty query */
- if (rlm_sql_query(sqlsocket, inst, querystr)) {
+ if (rlm_sql_query(&sqlsocket, inst, querystr)) {
radlog_request(L_ERR, 0, request, "Couldn't update SQL accounting START record - %s",
(inst->module->sql_error)(sqlsocket, inst->config));
ret = RLM_MODULE_FAIL;
if (sqlsocket == NULL)
return(RLM_MODULE_FAIL);
if (*querystr) { /* non-empty query */
- if (rlm_sql_query(sqlsocket, inst, querystr)) {
+ if (rlm_sql_query(&sqlsocket, inst, querystr)) {
radlog_request(L_ERR, 0, request, "Couldn't update SQL accounting STOP record - %s",
(inst->module->sql_error)(sqlsocket, inst->config));
ret = RLM_MODULE_FAIL;
query_log(request, inst, querystr);
if (*querystr) { /* non-empty query */
- if (rlm_sql_query(sqlsocket, inst, querystr)) {
+ if (rlm_sql_query(&sqlsocket, inst, querystr)) {
radlog_request(L_ERR, 0, request, "Couldn't insert SQL accounting STOP record - %s",
(inst->module->sql_error)(sqlsocket, inst->config));
if(sqlsocket == NULL)
return RLM_MODULE_FAIL;
- if(rlm_sql_select_query(sqlsocket, inst, querystr)) {
+ if(rlm_sql_select_query(&sqlsocket, inst, querystr)) {
radlog(L_ERR, "rlm_sql (%s) sql_checksimul: Database query failed", inst->config->xlat_name);
sql_release_socket(inst, sqlsocket);
return RLM_MODULE_FAIL;
}
- ret = rlm_sql_fetch_row(sqlsocket, inst);
+ ret = rlm_sql_fetch_row(&sqlsocket, inst);
if (ret != 0) {
(inst->module->sql_finish_select_query)(sqlsocket, inst->config);
}
radius_xlat(querystr, sizeof(querystr), inst->config->simul_verify_query, request, sql_escape_func);
- if(rlm_sql_select_query(sqlsocket, inst, querystr)) {
+ if(rlm_sql_select_query(&sqlsocket, inst, querystr)) {
radlog_request(L_ERR, 0, request, "Database query error");
sql_release_socket(inst, sqlsocket);
return RLM_MODULE_FAIL;
call_num = vp->vp_strvalue;
- while (rlm_sql_fetch_row(sqlsocket, inst) == 0) {
+ while (rlm_sql_fetch_row(&sqlsocket, inst) == 0) {
row = sqlsocket->row;
if (row == NULL)
break;
return RLM_MODULE_FAIL;
/* Process the query */
- if (rlm_sql_query(sqlsocket, inst, querystr)) {
+ if (rlm_sql_query(&sqlsocket, inst, querystr)) {
radlog(L_ERR, "rlm_sql (%s) in sql_postauth: Database query error - %s",
inst->config->xlat_name,
(inst->module->sql_error)(sqlsocket, inst->config));
SQLSOCK *(*sql_get_socket)(SQL_INST * inst);
int (*sql_release_socket)(SQL_INST * inst, SQLSOCK * sqlsocket);
size_t (*sql_escape_func)(char *out, size_t outlen, const char *in);
- int (*sql_query)(SQLSOCK *sqlsocket, SQL_INST *inst, char *query);
- int (*sql_select_query)(SQLSOCK *sqlsocket, SQL_INST *inst, char *query);
- int (*sql_fetch_row)(SQLSOCK *sqlsocket, SQL_INST *inst);
+ int (*sql_query)(SQLSOCK **sqlsocket, SQL_INST *inst, char *query);
+ int (*sql_select_query)(SQLSOCK **sqlsocket, SQL_INST *inst, char *query);
+ int (*sql_fetch_row)(SQLSOCK **sqlsocket, SQL_INST *inst);
};
typedef struct sql_grouplist {
int sql_release_socket(SQL_INST * inst, SQLSOCK * sqlsocket);
int sql_userparse(VALUE_PAIR ** first_pair, SQL_ROW row);
int sql_read_realms(SQLSOCK * sqlsocket);
-int sql_getvpdata(SQL_INST * inst, SQLSOCK * sqlsocket, VALUE_PAIR **pair, char *query);
+int sql_getvpdata(SQL_INST * inst, SQLSOCK ** sqlsocket, VALUE_PAIR **pair, char *query);
int sql_read_naslist(SQLSOCK * sqlsocket);
int sql_read_clients(SQLSOCK * sqlsocket);
int sql_dict_init(SQLSOCK * sqlsocket);
void query_log(REQUEST *request, SQL_INST * inst, char *querystr);
-int rlm_sql_select_query(SQLSOCK *sqlsocket, SQL_INST *inst, char *query);
-int rlm_sql_query(SQLSOCK *sqlsocket, SQL_INST *inst, char *query);
-int rlm_sql_fetch_row(SQLSOCK *sqlsocket, SQL_INST *inst);
+int rlm_sql_select_query(SQLSOCK **sqlsocket, SQL_INST *inst, char *query);
+int rlm_sql_query(SQLSOCK **sqlsocket, SQL_INST *inst, char *query);
+int rlm_sql_fetch_row(SQLSOCK **sqlsocket, SQL_INST *inst);
int sql_set_user(SQL_INST *inst, REQUEST *request, char *sqlusername, const char *username);
#endif
* Purpose: call the module's sql_fetch_row and implement re-connect
*
*************************************************************************/
-int rlm_sql_fetch_row(SQLSOCK *sqlsocket, SQL_INST *inst)
+int rlm_sql_fetch_row(SQLSOCK **sqlsocket, SQL_INST *inst)
{
int ret;
- if (sqlsocket->conn) {
- ret = (inst->module->sql_fetch_row)(sqlsocket, inst->config);
+ if ((*sqlsocket)->conn) {
+ ret = (inst->module->sql_fetch_row)(*sqlsocket, inst->config);
} else {
ret = SQL_DOWN;
}
if (ret == SQL_DOWN) {
- sqlsocket = fr_connection_reconnect(inst->pool, sqlsocket);
- if (!sqlsocket) return -1;
+ *sqlsocket = fr_connection_reconnect(inst->pool, *sqlsocket);
+ if (!*sqlsocket) return -1;
/* retry the query on the newly connected socket */
- ret = (inst->module->sql_fetch_row)(sqlsocket, inst->config);
+ ret = (inst->module->sql_fetch_row)(*sqlsocket, inst->config);
if (ret) {
radlog(L_ERR, "rlm_sql (%s): failed after re-connect",
* Purpose: call the module's sql_query and implement re-connect
*
*************************************************************************/
-int rlm_sql_query(SQLSOCK *sqlsocket, SQL_INST *inst, char *query)
+int rlm_sql_query(SQLSOCK **sqlsocket, SQL_INST *inst, char *query)
{
int ret;
return -1;
}
- if (sqlsocket->conn) {
- ret = (inst->module->sql_query)(sqlsocket, inst->config, query);
+ if ((*sqlsocket)->conn) {
+ ret = (inst->module->sql_query)(*sqlsocket, inst->config, query);
} else {
ret = SQL_DOWN;
}
if (ret == SQL_DOWN) {
- sqlsocket = fr_connection_reconnect(inst->pool, sqlsocket);
- if (!sqlsocket) return -1;
+ *sqlsocket = fr_connection_reconnect(inst->pool, *sqlsocket);
+ if (!*sqlsocket) return -1;
/* retry the query on the newly connected socket */
- ret = (inst->module->sql_query)(sqlsocket, inst->config, query);
+ ret = (inst->module->sql_query)(*sqlsocket, inst->config, query);
if (ret) {
radlog(L_ERR, "rlm_sql (%s): failed after re-connect",
* Purpose: call the module's sql_select_query and implement re-connect
*
*************************************************************************/
-int rlm_sql_select_query(SQLSOCK *sqlsocket, SQL_INST *inst, char *query)
+int rlm_sql_select_query(SQLSOCK **sqlsocket, SQL_INST *inst, char *query)
{
int ret;
return -1;
}
- if (sqlsocket->conn) {
- ret = (inst->module->sql_select_query)(sqlsocket, inst->config,
+ if ((*sqlsocket)->conn) {
+ ret = (inst->module->sql_select_query)(*sqlsocket, inst->config,
query);
} else {
ret = SQL_DOWN;
}
if (ret == SQL_DOWN) {
- sqlsocket = fr_connection_reconnect(inst->pool, sqlsocket);
- if (!sqlsocket) return -1;
+ *sqlsocket = fr_connection_reconnect(inst->pool, *sqlsocket);
+ if (!*sqlsocket) return -1;
/* retry the query on the newly connected socket */
- ret = (inst->module->sql_select_query)(sqlsocket, inst->config, query);
+ ret = (inst->module->sql_select_query)(*sqlsocket, inst->config, query);
if (ret) {
radlog(L_ERR, "rlm_sql (%s): failed after re-connect",
* Purpose: Get any group check or reply pairs
*
*************************************************************************/
-int sql_getvpdata(SQL_INST * inst, SQLSOCK * sqlsocket, VALUE_PAIR **pair, char *query)
+int sql_getvpdata(SQL_INST * inst, SQLSOCK **sqlsocket, VALUE_PAIR **pair, char *query)
{
SQL_ROW row;
int rows = 0;
radlog(L_ERR, "rlm_sql_getvpdata: database query error");
return -1;
}
- while (rlm_sql_fetch_row(sqlsocket, inst)==0) {
- row = sqlsocket->row;
+ while (rlm_sql_fetch_row(sqlsocket, inst) == 0) {
+ row = (*sqlsocket)->row;
if (!row)
break;
if (sql_userparse(pair, row) != 0) {
radlog(L_ERR | L_CONS, "rlm_sql (%s): Error getting data from database", inst->config->xlat_name);
- (inst->module->sql_finish_select_query)(sqlsocket, inst->config);
+ (inst->module->sql_finish_select_query)(*sqlsocket, inst->config);
return -1;
}
rows++;
}
- (inst->module->sql_finish_select_query)(sqlsocket, inst->config);
+ (inst->module->sql_finish_select_query)(*sqlsocket, inst->config);
return rows;
}