request_t *request, fr_value_box_list_t *in)
{
sql_xlat_call_env_t *call_env = talloc_get_type_abort(xctx->env_data, sql_xlat_call_env_t);
- rlm_sql_handle_t *handle = NULL;
rlm_sql_t const *inst = talloc_get_type_abort(xctx->mctx->mi->data, rlm_sql_t);
rlm_sql_thread_t *thread = talloc_get_type_abort(xctx->mctx->thread, rlm_sql_thread_t);
char const *p;
if ((strncasecmp(p, "insert", 6) == 0) ||
(strncasecmp(p, "update", 6) == 0) ||
(strncasecmp(p, "delete", 6) == 0)) {
- MEM(query_ctx = fr_sql_query_alloc(unlang_interpret_frame_talloc_ctx(request), inst, request, handle,
+ MEM(query_ctx = fr_sql_query_alloc(unlang_interpret_frame_talloc_ctx(request), inst, request,
thread->trunk, arg->vb_strvalue, SQL_QUERY_OTHER));
unlang_xlat_yield(request, sql_xlat_query_resume, NULL, 0, query_ctx);
return sql_xlat_query_resume(ctx, out, &(xlat_ctx_t){.rctx = query_ctx, .inst = inst}, request, in);
} /* else it's a SELECT statement */
- MEM(query_ctx = fr_sql_query_alloc(unlang_interpret_frame_talloc_ctx(request), inst, request, handle,
+ MEM(query_ctx = fr_sql_query_alloc(unlang_interpret_frame_talloc_ctx(request), inst, request,
thread->trunk, arg->vb_strvalue, SQL_QUERY_SELECT));
unlang_xlat_yield(request, sql_xlat_select_resume, NULL, 0, query_ctx);
request_t *request, fr_value_box_list_t *in)
{
sql_xlat_call_env_t *call_env = talloc_get_type_abort(xctx->env_data, sql_xlat_call_env_t);
- rlm_sql_handle_t *handle = NULL;
rlm_sql_t const *inst = talloc_get_type_abort(xctx->mctx->mi->data, rlm_sql_t);
rlm_sql_thread_t *thread = talloc_get_type_abort(xctx->mctx->thread, rlm_sql_thread_t);
fr_value_box_t *arg = fr_value_box_list_head(in);
rlm_sql_query_log(inst, call_env->filename.vb_strvalue, arg->vb_strvalue);
}
- MEM(query_ctx = fr_sql_query_alloc(unlang_interpret_frame_talloc_ctx(request), inst, request, handle,
+ MEM(query_ctx = fr_sql_query_alloc(unlang_interpret_frame_talloc_ctx(request), inst, request,
thread->trunk, arg->vb_strvalue, SQL_QUERY_SELECT));
unlang_xlat_yield(request, sql_xlat_select_resume, NULL, 0, query_ctx);
request_t *request, fr_value_box_list_t *in)
{
sql_xlat_call_env_t *call_env = talloc_get_type_abort(xctx->env_data, sql_xlat_call_env_t);
- rlm_sql_handle_t *handle = NULL;
rlm_sql_t const *inst = talloc_get_type_abort(xctx->mctx->mi->data, rlm_sql_t);
rlm_sql_thread_t *thread = talloc_get_type_abort(xctx->mctx->thread, rlm_sql_thread_t);
fr_value_box_t *arg = fr_value_box_list_head(in);
rlm_sql_query_log(inst, call_env->filename.vb_strvalue, arg->vb_strvalue);
}
- MEM(query_ctx = fr_sql_query_alloc(unlang_interpret_frame_talloc_ctx(request), inst, request, handle,
+ MEM(query_ctx = fr_sql_query_alloc(unlang_interpret_frame_talloc_ctx(request), inst, request,
thread->trunk, arg->vb_strvalue, SQL_QUERY_OTHER));
unlang_xlat_yield(request, sql_xlat_query_resume, NULL, 0, query_ctx);
fr_sql_query_t *query_ctx = map_ctx->query_ctx;
map_list_t const *maps = map_ctx->maps;
rlm_sql_t const *inst = map_ctx->inst;
- rlm_sql_handle_t *handle = query_ctx->handle;
map_t const *map;
rlm_rcode_t rcode = RLM_MODULE_UPDATED;
sql_rcode_t ret;
finish:
talloc_free(fields);
talloc_free(map_ctx);
- if (handle) fr_pool_connection_release(inst->pool, request, handle);
RETURN_MODULE_RCODE(rcode);
}
{
rlm_sql_t const *inst = talloc_get_type_abort_const(mod_inst, rlm_sql_t);
rlm_sql_thread_t *thread = talloc_get_type_abort(module_thread(inst->mi)->data, rlm_sql_thread_t);
- rlm_sql_handle_t *handle = NULL;
fr_value_box_t *query_head = fr_value_box_list_head(query);
sql_map_ctx_t *map_ctx;
fr_value_box_t *vb = NULL;
.maps = maps,
};
- MEM(map_ctx->query_ctx = fr_sql_query_alloc(map_ctx, inst, request, handle,
+ MEM(map_ctx->query_ctx = fr_sql_query_alloc(map_ctx, inst, request,
thread->trunk, query_head->vb_strvalue, SQL_QUERY_SELECT));
if (unlang_function_push(request, NULL, mod_map_resume, NULL, 0,
RETURN_MODULE_OK;
}
-static unlang_action_t sql_get_grouplist(sql_group_ctx_t *group_ctx, rlm_sql_handle_t **handle, trunk_t *trunk, request_t *request)
+static unlang_action_t sql_get_grouplist(sql_group_ctx_t *group_ctx, trunk_t *trunk, request_t *request)
{
rlm_sql_t const *inst = group_ctx->inst;
if (!group_ctx->query || (group_ctx->query->vb_length == 0)) return UNLANG_ACTION_CALCULATE_RESULT;
- MEM(group_ctx->query_ctx = fr_sql_query_alloc(group_ctx, inst, request, *handle, trunk,
+ MEM(group_ctx->query_ctx = fr_sql_query_alloc(group_ctx, inst, request, trunk,
group_ctx->query->vb_strvalue, SQL_QUERY_SELECT));
if (unlang_function_push(request, NULL, sql_get_grouplist_resume, NULL, 0, UNLANG_SUB_FRAME, group_ctx) < 0) return UNLANG_ACTION_FAIL;
if (unlang_xlat_yield(request, sql_group_xlat_query_resume, NULL, 0, xlat_ctx) != XLAT_ACTION_YIELD) return XLAT_ACTION_FAIL;
- if (sql_get_grouplist(xlat_ctx->group_ctx, &xlat_ctx->handle, thread->trunk, request) != UNLANG_ACTION_PUSHED_CHILD)
+ if (sql_get_grouplist(xlat_ctx->group_ctx, thread->trunk, request) != UNLANG_ACTION_PUSHED_CHILD)
return XLAT_ACTION_FAIL;
return XLAT_ACTION_PUSH_UNLANG;
.query = query,
};
- if (sql_get_grouplist(autz_ctx->group_ctx, &autz_ctx->handle, autz_ctx->trunk, request) == UNLANG_ACTION_PUSHED_CHILD) {
+ if (sql_get_grouplist(autz_ctx->group_ctx, autz_ctx->trunk, request) == UNLANG_ACTION_PUSHED_CHILD) {
autz_ctx->status = SQL_AUTZ_GROUP_MEMB_RESUME;
return UNLANG_ACTION_PUSHED_CHILD;
}
};
if (unlang_function_repeat_set(request, mod_autz_group_resume) < 0) RETURN_MODULE_FAIL;
- if (sql_get_map_list(request, map_ctx, &autz_ctx->handle, autz_ctx->trunk) == UNLANG_ACTION_PUSHED_CHILD) {
+ if (sql_get_map_list(request, map_ctx, autz_ctx->trunk) == UNLANG_ACTION_PUSHED_CHILD) {
autz_ctx->status = autz_ctx->status & SQL_AUTZ_STAGE_GROUP ? SQL_AUTZ_GROUP_CHECK_RESUME : SQL_AUTZ_PROFILE_CHECK_RESUME;
return UNLANG_ACTION_PUSHED_CHILD;
}
};
if (unlang_function_repeat_set(request, mod_autz_group_resume) < 0) RETURN_MODULE_FAIL;
- if (sql_get_map_list(request, map_ctx, &autz_ctx->handle, autz_ctx->trunk) == UNLANG_ACTION_PUSHED_CHILD) {
+ if (sql_get_map_list(request, map_ctx, autz_ctx->trunk) == UNLANG_ACTION_PUSHED_CHILD) {
autz_ctx->status = autz_ctx->status & SQL_AUTZ_STAGE_GROUP ? SQL_AUTZ_GROUP_REPLY_RESUME : SQL_AUTZ_PROFILE_REPLY_RESUME;
return UNLANG_ACTION_PUSHED_CHILD;
}
};
if (unlang_function_repeat_set(request, mod_authorize_resume) < 0) RETURN_MODULE_FAIL;
- if (sql_get_map_list(request, map_ctx, &autz_ctx->handle, autz_ctx->trunk) == UNLANG_ACTION_PUSHED_CHILD){
+ if (sql_get_map_list(request, map_ctx, autz_ctx->trunk) == UNLANG_ACTION_PUSHED_CHILD){
autz_ctx->status = SQL_AUTZ_CHECK_RESUME;
return UNLANG_ACTION_PUSHED_CHILD;
}
};
if (unlang_function_repeat_set(request, mod_authorize_resume) < 0) RETURN_MODULE_FAIL;
- if (sql_get_map_list(request, map_ctx, &autz_ctx->handle, autz_ctx->trunk) == UNLANG_ACTION_PUSHED_CHILD){
+ if (sql_get_map_list(request, map_ctx, autz_ctx->trunk) == UNLANG_ACTION_PUSHED_CHILD){
autz_ctx->status = SQL_AUTZ_REPLY_RESUME;
return UNLANG_ACTION_PUSHED_CHILD;
}
rlm_sql_query_log(inst, call_env->filename.vb_strvalue, redundant_ctx->query_vb->vb_strvalue);
}
- MEM(redundant_ctx->query_ctx = fr_sql_query_alloc(redundant_ctx, inst, request,
- redundant_ctx->handle, redundant_ctx->trunk,
+ MEM(redundant_ctx->query_ctx = fr_sql_query_alloc(redundant_ctx, inst, request, redundant_ctx->trunk,
redundant_ctx->query_vb->vb_strvalue, SQL_QUERY_OTHER));
if (unlang_function_repeat_set(request, mod_sql_redundant_query_resume) < 0) RETURN_MODULE_FAIL;
typedef struct {
rlm_sql_t const *inst; //!< Module instance for this query.
request_t *request; //!< Request this query relates to.
- rlm_sql_handle_t *handle; //!< Connection handle this query is being run on.
trunk_t *trunk; //!< Trunk this query is being run on.
trunk_connection_t *tconn; //!< Trunk connection this query is being run on.
trunk_request_t *treq; //!< Trunk request for this query.
unlang_function_t query;
unlang_function_t select;
unlang_function_t fetch_row;
- fr_sql_query_t *(*query_alloc)(TALLOC_CTX *ctx, rlm_sql_t const *inst, request_t *request, rlm_sql_handle_t *handle, trunk_t *trunk, char const *query_str, fr_sql_query_type_t type);
+ fr_sql_query_t *(*query_alloc)(TALLOC_CTX *ctx, rlm_sql_t const *inst, request_t *request, trunk_t *trunk, char const *query_str, fr_sql_query_type_t type);
char const *name; //!< Module instance name.
fr_dict_attr_t const *group_da; //!< Group dictionary attribute.
};
void *sql_mod_conn_create(TALLOC_CTX *ctx, void *instance, fr_time_delta_t timeout);
-unlang_action_t sql_get_map_list(request_t *request, fr_sql_map_ctx_t *map_ctx, rlm_sql_handle_t **handle, trunk_t *trunk);
+unlang_action_t sql_get_map_list(request_t *request, fr_sql_map_ctx_t *map_ctx, trunk_t *trunk);
void rlm_sql_query_log(rlm_sql_t const *inst, char const *filename, char const *query) CC_HINT(nonnull);
unlang_action_t rlm_sql_select_query(rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx);
unlang_action_t rlm_sql_query(rlm_rcode_t *p_result, int *priority, request_t *request, void *uctx);
unlang_action_t rlm_sql_trunk_query(rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx);
unlang_action_t rlm_sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx);
void rlm_sql_print_error(rlm_sql_t const *inst, request_t *request, fr_sql_query_t *query_ctx, bool force_debug);
-fr_sql_query_t *fr_sql_query_alloc(TALLOC_CTX *ctx, rlm_sql_t const *inst, request_t *request, rlm_sql_handle_t *handle, trunk_t *trunk, char const *query_str, fr_sql_query_type_t type);
+fr_sql_query_t *fr_sql_query_alloc(TALLOC_CTX *ctx, rlm_sql_t const *inst, request_t *request, trunk_t *trunk, char const *query_str, fr_sql_query_type_t type);
/*
* sql_state.c
/** Allocate an sql query structure
*
*/
-fr_sql_query_t *fr_sql_query_alloc(TALLOC_CTX *ctx, rlm_sql_t const *inst, request_t *request, rlm_sql_handle_t *handle,
+fr_sql_query_t *fr_sql_query_alloc(TALLOC_CTX *ctx, rlm_sql_t const *inst, request_t *request,
trunk_t *trunk, char const *query_str, fr_sql_query_type_t type)
{
fr_sql_query_t *query;
MEM(query = talloc(ctx, fr_sql_query_t));
*query = (fr_sql_query_t) {
.inst = inst,
- .handle = handle,
.request = request,
.trunk = trunk,
.query_str = query_str,
rlm_sql_t const *inst = query_ctx->inst;
int i, count;
- /* Caller should check they have a valid handle */
- fr_assert(query_ctx->handle);
-
/* There's no query to run, return an error */
if (query_ctx->query_str[0] == '\0') {
if (request) REDEBUG("Zero length query");
* sockets in the pool and fail to establish a *new* connection.
*/
case RLM_SQL_RECONNECT:
- query_ctx->handle = fr_pool_connection_reconnect(inst->pool, request, query_ctx->handle);
- /* Reconnection failed */
- if (!query_ctx->handle) RETURN_MODULE_FAIL;
- /* Reconnection succeeded, try again with the new handle */
- continue;
+ RETURN_MODULE_FAIL;
/*
* These are bad and should make rlm_sql return invalid
rlm_sql_t const *inst = query_ctx->inst;
int i, count;
- /* Caller should check they have a valid handle */
- fr_assert(query_ctx->handle);
-
/* There's no query to run, return an error */
if (query_ctx->query_str[0] == '\0') {
if (request) REDEBUG("Zero length query");
* sockets in the pool and fail to establish a *new* connection.
*/
case RLM_SQL_RECONNECT:
- query_ctx->handle = fr_pool_connection_reconnect(inst->pool, request, query_ctx->handle);
- /* Reconnection failed */
- if (!query_ctx->handle) RETURN_MODULE_FAIL;
- /* Reconnection succeeded, try again with the new handle */
- continue;
+ RETURN_MODULE_FAIL;
case RLM_SQL_QUERY_INVALID:
case RLM_SQL_ERROR:
/** Submit the query to get any user / group check or reply pairs
*
*/
-unlang_action_t sql_get_map_list(request_t *request, fr_sql_map_ctx_t *map_ctx, rlm_sql_handle_t **handle,
- trunk_t *trunk)
+unlang_action_t sql_get_map_list(request_t *request, fr_sql_map_ctx_t *map_ctx, trunk_t *trunk)
{
rlm_sql_t const *inst = map_ctx->inst;
fr_assert(request);
- MEM(map_ctx->query_ctx = fr_sql_query_alloc(map_ctx->ctx, inst, request, *handle, trunk,
+ MEM(map_ctx->query_ctx = fr_sql_query_alloc(map_ctx->ctx, inst, request, trunk,
map_ctx->query->vb_strvalue, SQL_QUERY_SELECT));
if (unlang_function_push(request, NULL, sql_get_map_list_resume, NULL, 0, UNLANG_SUB_FRAME, map_ctx) < 0) return UNLANG_ACTION_FAIL;