From: Nick Porter Date: Fri, 10 May 2024 14:57:50 +0000 (+0100) Subject: Move SQL results row to query_ctx X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a824d6fc4fa8e0f63f360f9b2cca74bc22258962;p=thirdparty%2Ffreeradius-server.git Move SQL results row to query_ctx --- diff --git a/src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c b/src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c index a623f1bacec..a08f598dd9d 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c @@ -537,7 +537,7 @@ do {\ }\ sql_set_last_error_printf(conn, "Failed to retrieve " _t " data at column %s (%d): %s", \ _col_name, i, cass_error_desc(_ret));\ - TALLOC_FREE(handle->row);\ + TALLOC_FREE(query_ctx->row);\ query_ctx->rcode = RLM_SQL_ERROR;\ RETURN_MODULE_FAIL;\ } while(0) @@ -562,8 +562,8 @@ do {\ /* * Free the previous result (also gets called on finish_query) */ - talloc_free(handle->row); - MEM(row = handle->row = talloc_zero_array(handle, char *, fields + 1)); + talloc_free(query_ctx->row); + MEM(row = query_ctx->row = talloc_zero_array(query_ctx, char *, fields + 1)); for (i = 0; i < fields; i++) { CassValue const *value; @@ -644,7 +644,7 @@ do {\ sql_set_last_error_printf(conn, "Failed to retrieve data at column %s (%d): Unsupported data type", col_name, i); - talloc_free(handle->row); + talloc_free(query_ctx->row); query_ctx->rcode = RLM_SQL_ERROR; RETURN_MODULE_FAIL; } @@ -658,7 +658,7 @@ static sql_rcode_t sql_free_result(fr_sql_query_t *query_ctx, UNUSED rlm_sql_con { rlm_sql_cassandra_conn_t *conn = query_ctx->handle->conn; - if (query_ctx->handle->row) TALLOC_FREE(query_ctx->handle->row); + if (query_ctx->row) TALLOC_FREE(query_ctx->row); if (conn->iterator) { cass_iterator_free(conn->iterator); diff --git a/src/modules/rlm_sql/drivers/rlm_sql_db2/rlm_sql_db2.c b/src/modules/rlm_sql/drivers/rlm_sql_db2/rlm_sql_db2.c index dec4e40fcef..00f7830d7af 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_db2/rlm_sql_db2.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_db2/rlm_sql_db2.c @@ -192,7 +192,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority rlm_sql_db2_conn_t *conn; rlm_sql_handle_t *handle = query_ctx->handle; - TALLOC_FREE(handle->row); + TALLOC_FREE(query_ctx->row); conn = handle->conn; c = sql_num_fields(handle, config); @@ -203,7 +203,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority RETURN_MODULE_OK; } - MEM(row = (rlm_sql_row_t)talloc_zero_array(handle, char *, c + 1)); + MEM(row = (rlm_sql_row_t)talloc_zero_array(query_ctx, char *, c + 1)); for (i = 0; i < c; i++) { /* get column length */ SQLColAttribute(conn->stmt, i + 1, SQL_DESC_DISPLAY_SIZE, NULL, 0, NULL, &len); @@ -215,7 +215,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority if (slen == SQL_NULL_DATA) row[i][0] = '\0'; } - handle->row = row; + query_ctx->row = row; query_ctx->rcode = RLM_SQL_OK; RETURN_MODULE_OK; @@ -226,7 +226,7 @@ static sql_rcode_t sql_free_result(fr_sql_query_t *query_, UNUSED rlm_sql_config rlm_sql_db2_conn_t *conn; conn = query_ctx->handle->conn; - TALLOC_FREE(query_ctx->handle->row); + TALLOC_FREE(query_ctx->row); SQLFreeHandle(SQL_HANDLE_STMT, conn->stmt); return RLM_SQL_OK; diff --git a/src/modules/rlm_sql/drivers/rlm_sql_firebird/rlm_sql_firebird.c b/src/modules/rlm_sql/drivers/rlm_sql_firebird/rlm_sql_firebird.c index a6daa81b522..f53af3ba9a2 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_firebird/rlm_sql_firebird.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_firebird/rlm_sql_firebird.c @@ -194,7 +194,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority rlm_sql_firebird_conn_t *conn = handle->conn; int res; - handle->row = NULL; + query_ctx->row = NULL; if (conn->statement_type != isc_info_sql_stmt_exec_procedure) { res = fb_fetch(conn); @@ -215,7 +215,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority fb_store_row(conn); - handle->row = conn->row; + query_ctx->row = conn->row; query_ctx->rcode = RLM_SQL_OK; RETURN_MODULE_OK; diff --git a/src/modules/rlm_sql/drivers/rlm_sql_freetds/rlm_sql_freetds.c b/src/modules/rlm_sql/drivers/rlm_sql_freetds/rlm_sql_freetds.c index f006b66d07d..55c7881a02e 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_freetds/rlm_sql_freetds.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_freetds/rlm_sql_freetds.c @@ -592,7 +592,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority rlm_sql_freetds_conn_t *conn = handle->conn; CS_INT ret, count; - handle->row = NULL; + query_ctx->row = NULL; ret = ct_fetch(conn->command, CS_UNUSED, CS_UNUSED, CS_UNUSED, &count); switch (ret) { @@ -615,7 +615,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority RETURN_MODULE_OK; case CS_SUCCEED: - handle->row = conn->results; + query_ctx->row = conn->results; query_ctx->rcode = RLM_SQL_OK; RETURN_MODULE_OK; diff --git a/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c b/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c index bf42fc6f5df..4b926f5715d 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c @@ -505,7 +505,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority RETURN_MODULE_FAIL; } - TALLOC_FREE(handle->row); /* Clear previous row set */ + TALLOC_FREE(query_ctx->row); /* Clear previous row set */ retry_fetch_row: row = mysql_fetch_row(conn->result); @@ -540,9 +540,9 @@ retry_fetch_row: field_lens = mysql_fetch_lengths(conn->result); - MEM(handle->row = talloc_zero_array(handle, char *, num_fields + 1)); + MEM(query_ctx->row = talloc_zero_array(query_ctx, char *, num_fields + 1)); for (i = 0; i < num_fields; i++) { - MEM(handle->row[i] = talloc_bstrndup(handle->row, row[i], field_lens[i])); + MEM(query_ctx->row[i] = talloc_bstrndup(query_ctx->row, row[i], field_lens[i])); } query_ctx->rcode = RLM_SQL_OK; @@ -557,7 +557,7 @@ static sql_rcode_t sql_free_result(fr_sql_query_t *query_ctx, UNUSED rlm_sql_con mysql_free_result(conn->result); conn->result = NULL; } - TALLOC_FREE(query_ctx->handle->row); + TALLOC_FREE(query_ctx->row); return RLM_SQL_OK; } diff --git a/src/modules/rlm_sql/drivers/rlm_sql_null/rlm_sql_null.c b/src/modules/rlm_sql/drivers/rlm_sql_null/rlm_sql_null.c index a2bac5fc735..7d47bd93032 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_null/rlm_sql_null.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_null/rlm_sql_null.c @@ -56,7 +56,7 @@ static int sql_num_rows(UNUSED fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority, UNUSED request_t *request, void *uctx) { fr_sql_query_t *query_ctx = talloc_get_type_abort(uctx, fr_sql_query_t); - query_ctx->handle->row = NULL; + query_ctx->row = NULL; query_ctx->rcode = RLM_SQL_NO_MORE_ROWS; RETURN_MODULE_OK; } diff --git a/src/modules/rlm_sql/drivers/rlm_sql_oracle/rlm_sql_oracle.c b/src/modules/rlm_sql/drivers/rlm_sql_oracle/rlm_sql_oracle.c index 1be2241dfe2..5c0a2e08abf 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_oracle/rlm_sql_oracle.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_oracle/rlm_sql_oracle.c @@ -560,11 +560,11 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority RETURN_MODULE_FAIL; } - handle->row = NULL; + query_ctx->row = NULL; status = OCIStmtFetch(conn->query, conn->error, 1, OCI_FETCH_NEXT, OCI_DEFAULT); if (status == OCI_SUCCESS) { - handle->row = conn->row; + query_ctx->row = conn->row; query_ctx->rcode = RLM_SQL_OK; RETURN_MODULE_OK; diff --git a/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c b/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c index 8b3c2b6cbc1..25f38817181 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c @@ -429,7 +429,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority int records, i, len; rlm_sql_postgres_conn_t *conn = handle->conn; - handle->row = NULL; + query_ctx->row = NULL; query_ctx->rcode = RLM_SQL_NO_MORE_ROWS; if (conn->cur_row >= PQntuples(conn->result)) RETURN_MODULE_OK; @@ -447,7 +447,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority strlcpy(conn->row[i], PQgetvalue(conn->result, conn->cur_row, i), len + 1); } conn->cur_row++; - handle->row = conn->row; + query_ctx->row = conn->row; query_ctx->rcode = RLM_SQL_OK; } diff --git a/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c b/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c index 75e4b468ce4..66d5d7d1e50 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c @@ -529,7 +529,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority rlm_sql_sqlite_conn_t *conn = handle->conn; char **row; - TALLOC_FREE(handle->row); + TALLOC_FREE(query_ctx->row); /* * Executes the SQLite query and iterates over the results @@ -565,7 +565,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority /* * Free the previous result (also gets called on finish_query) */ - MEM(row = handle->row = talloc_zero_array(handle->conn, char *, conn->col_count + 1)); + MEM(row = query_ctx->row = talloc_zero_array(query_ctx, char *, conn->col_count + 1)); for (i = 0; i < conn->col_count; i++) { switch (sqlite3_column_type(conn->statement, i)) { @@ -615,7 +615,7 @@ static sql_rcode_t sql_free_result(fr_sql_query_t *query_ctx, UNUSED rlm_sql_con rlm_sql_sqlite_conn_t *conn = query_ctx->handle->conn; if (conn->statement) { - TALLOC_FREE(query_ctx->handle->row); + TALLOC_FREE(query_ctx->row); (void) sqlite3_finalize(conn->statement); conn->statement = NULL; diff --git a/src/modules/rlm_sql/drivers/rlm_sql_unixodbc/rlm_sql_unixodbc.c b/src/modules/rlm_sql/drivers/rlm_sql_unixodbc/rlm_sql_unixodbc.c index a5662056e07..79acd9c93bc 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_unixodbc/rlm_sql_unixodbc.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_unixodbc/rlm_sql_unixodbc.c @@ -221,7 +221,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority rlm_sql_unixodbc_conn_t *conn = handle->conn; long err_handle; - handle->row = NULL; + query_ctx->row = NULL; err_handle = SQLFetch(conn->stmt); if (err_handle == SQL_NO_DATA_FOUND) { @@ -232,7 +232,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority query_ctx->rcode = sql_check_error(err_handle, handle, &query_ctx->inst->config); if (query_ctx->rcode != RLM_SQL_OK) RETURN_MODULE_FAIL; - handle->row = conn->row; + query_ctx->row = conn->row; query_ctx->rcode = RLM_SQL_OK; RETURN_MODULE_OK; diff --git a/src/modules/rlm_sql/rlm_sql.c b/src/modules/rlm_sql/rlm_sql.c index 3a9896c209c..5da2d0f8135 100644 --- a/src/modules/rlm_sql/rlm_sql.c +++ b/src/modules/rlm_sql/rlm_sql.c @@ -471,7 +471,7 @@ static xlat_action_t sql_xlat(TALLOC_CTX *ctx, fr_dcursor_t *out, do { inst->fetch_row(&p_result, NULL, request, query_ctx); - row = query_ctx->handle->row; + row = query_ctx->row; switch (query_ctx->rcode) { case RLM_SQL_OK: if (row[0]) break; @@ -709,7 +709,7 @@ static unlang_action_t mod_map_proc(rlm_rcode_t *p_result, void const *mod_inst, */ while ((inst->fetch_row(p_result, NULL, request, query_ctx) == UNLANG_ACTION_CALCULATE_RESULT) && (query_ctx->rcode == RLM_SQL_OK)) { - row = query_ctx->handle->row; + row = query_ctx->row; rows++; for (map = map_list_head(maps), j = 0; map && (j < MAX_SQL_FIELD_INDEX); @@ -908,7 +908,7 @@ static int sql_get_grouplist(rlm_sql_t const *inst, rlm_sql_handle_t **handle, f while ((inst->fetch_row(&p_result, NULL, request, query_ctx) == UNLANG_ACTION_CALCULATE_RESULT) && (query_ctx->rcode == RLM_SQL_OK)) { - row = query_ctx->handle->row; + row = query_ctx->row; if (!row[0]){ RDEBUG2("row[0] returned NULL"); (inst->driver->sql_finish_select_query)(query_ctx, &inst->config); diff --git a/src/modules/rlm_sql/rlm_sql.h b/src/modules/rlm_sql/rlm_sql.h index 9b4d6050c92..7e095b2de0d 100644 --- a/src/modules/rlm_sql/rlm_sql.h +++ b/src/modules/rlm_sql/rlm_sql.h @@ -112,7 +112,6 @@ typedef struct { typedef struct { void *conn; //!< Database specific connection handle. - rlm_sql_row_t row; //!< Row data from the last query. rlm_sql_t const *inst; //!< The rlm_sql instance this connection belongs to. TALLOC_CTX *log_ctx; //!< Talloc pool used to avoid allocing memory //!< when log strings need to be copied. @@ -143,6 +142,7 @@ typedef struct { fr_sql_query_type_t type; //!< Type of query. fr_sql_query_status_t status; //!< Status of the query. sql_rcode_t rcode; //!< Result code. + rlm_sql_row_t row; //!< Row data from the last query. } fr_sql_query_t; extern fr_table_num_sorted_t const sql_rcode_description_table[]; diff --git a/src/modules/rlm_sql/sql.c b/src/modules/rlm_sql/sql.c index 8c24d388187..abbda189651 100644 --- a/src/modules/rlm_sql/sql.c +++ b/src/modules/rlm_sql/sql.c @@ -293,7 +293,7 @@ static int sql_pair_afrom_row(TALLOC_CTX *ctx, request_t *request, fr_pair_list_ /** Call the driver's sql_fetch_row function * * Calls the driver's sql_fetch_row logging any errors. On success, will - * write row data to ``uctx->handle->row``. + * write row data to ``uctx->row``. * * The rcode within the query context is updated to * - #RLM_SQL_OK on success. @@ -323,11 +323,11 @@ unlang_action_t rlm_sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority, r (inst->driver->sql_fetch_row)(p_result, NULL, request, query_ctx); switch (query_ctx->rcode) { case RLM_SQL_OK: - fr_assert(query_ctx->handle->row != NULL); + fr_assert(query_ctx->row != NULL); RETURN_MODULE_OK; case RLM_SQL_NO_MORE_ROWS: - fr_assert(query_ctx->handle->row == NULL); + fr_assert(query_ctx->row == NULL); RETURN_MODULE_OK; default: @@ -657,7 +657,7 @@ int sql_get_map_list(TALLOC_CTX *ctx, rlm_sql_t const *inst, request_t *request, (query_ctx->rcode == RLM_SQL_OK)) { map_t *map; - row = query_ctx->handle->row; + row = query_ctx->row; if (map_afrom_fields(ctx, &map, &parent, request, row[2], row[4], row[3], &lhs_rules, &rhs_rules) < 0) { RPEDEBUG("Error parsing user data from database result"); goto error; diff --git a/src/modules/rlm_sqlippool/rlm_sqlippool.c b/src/modules/rlm_sqlippool/rlm_sqlippool.c index 411d399b330..2b739f42b33 100644 --- a/src/modules/rlm_sqlippool/rlm_sqlippool.c +++ b/src/modules/rlm_sqlippool/rlm_sqlippool.c @@ -212,7 +212,7 @@ static int CC_HINT(nonnull (1, 3, 4, 6)) sqlippool_query1(char *out, int outlen, goto finish; } - row = query_ctx->handle->row; + row = query_ctx->row; if (!row) { RDEBUG2("SQL query did not return any results"); goto finish;