]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Move SQL results row to query_ctx
authorNick Porter <nick@portercomputing.co.uk>
Fri, 10 May 2024 14:57:50 +0000 (15:57 +0100)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 7 Jun 2024 02:26:58 +0000 (22:26 -0400)
14 files changed:
src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c
src/modules/rlm_sql/drivers/rlm_sql_db2/rlm_sql_db2.c
src/modules/rlm_sql/drivers/rlm_sql_firebird/rlm_sql_firebird.c
src/modules/rlm_sql/drivers/rlm_sql_freetds/rlm_sql_freetds.c
src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c
src/modules/rlm_sql/drivers/rlm_sql_null/rlm_sql_null.c
src/modules/rlm_sql/drivers/rlm_sql_oracle/rlm_sql_oracle.c
src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c
src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c
src/modules/rlm_sql/drivers/rlm_sql_unixodbc/rlm_sql_unixodbc.c
src/modules/rlm_sql/rlm_sql.c
src/modules/rlm_sql/rlm_sql.h
src/modules/rlm_sql/sql.c
src/modules/rlm_sqlippool/rlm_sqlippool.c

index a623f1bacecf03018d07c7123f6bdb233d9f58ab..a08f598dd9d67c5a51f02b49dcea79659bf2d540 100644 (file)
@@ -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);
index dec4e40fcef4a0cc3c326b58eb8080de1ca58851..00f7830d7affc7abca94bfebe8354b135ba3208e 100644 (file)
@@ -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;
index a6daa81b5228aed975c14cac9ecd2040247668a6..f53af3ba9a2443a3201fa620a34f4e5a8a7f6206 100644 (file)
@@ -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;
index f006b66d07d2b5c3b0cc63c1f58f5b042a3c2241..55c7881a02e2039bf3989f4715bc118d5ec70902 100644 (file)
@@ -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;
index bf42fc6f5dfd47133fbf217846630a4450376cd6..4b926f5715d8fff274fd6e6e8c4737da87c05ae2 100644 (file)
@@ -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;
 }
index a2bac5fc7357201d16ff1f8e1f83aaaa8d3a476c..7d47bd9303273ae57aaa4cb0cf07f96648715f43 100644 (file)
@@ -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;
 }
index 1be2241dfe2c2fbd0fcb3327bab0b6a9d260d925..5c0a2e08abf478b82caa82f122714cc628c7b080 100644 (file)
@@ -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;
index 8b3c2b6cbc199b02605b66f6f9cd9d517e24ebee..25f38817181a541493a8d3e92073f9659fdd9c25 100644 (file)
@@ -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;
        }
index 75e4b468ce44170b1fc97f12459724cc657c0080..66d5d7d1e50917e58c655df984f4376f7c52bd5f 100644 (file)
@@ -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;
index a5662056e078b678e4a7aba8aa31523b3bd8ebd6..79acd9c93bc32a0a9dcdfc333f02c3cdb1528667 100644 (file)
@@ -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;
index 3a9896c209cd6723879ff830329d7cd6909e0691..5da2d0f8135a6612239216c3299d70da5728dc45 100644 (file)
@@ -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);
index 9b4d6050c9258cb083a2ac77d61a84cf94849718..7e095b2de0db19387706eb26744364af386cc4f3 100644 (file)
@@ -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[];
index 8c24d3881875c14115f4499ba89ea9e082979b91..abbda18965108f3422232de787aaf005e1f83859 100644 (file)
@@ -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;
index 411d399b330a2563f08a1d0cfd699bf8dd850bc1..2b739f42b33c45f8d03ef82c9747ad723a8a6fea 100644 (file)
@@ -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;