]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Update sqlippool query functions to expect pre-expanded queries and take an rlm_sql_t
authorNick Porter <nick@portercomputing.co.uk>
Fri, 2 Feb 2024 14:23:07 +0000 (14:23 +0000)
committerNick Porter <nick@portercomputing.co.uk>
Wed, 7 Feb 2024 11:21:36 +0000 (11:21 +0000)
src/modules/rlm_sqlippool/rlm_sqlippool.c

index a1b54a9f623106efbdd68387464d4fbbafd2f91b..7e4b285294e243611329cd93395b77311b49d426 100644 (file)
@@ -133,51 +133,42 @@ static void *sql_escape_uctx_alloc(request_t *request, void const *uctx)
 
 /** Perform a single sqlippool query
  *
- * Mostly wrapper around sql_query which does some special sqlippool sequence substitutions and expands
- * the format string.
+ * Mostly wrapper around sql_query which returns the number of affected rows.
  *
- * @param[in] fmt sql query to expand.
+ * @param[in] query sql query to execute.
  * @param[in] handle sql connection handle.
- * @param[in] data Instance of rlm_sqlippool.
+ * @param[in] sql Instance of rlm_sql.
  * @param[in] request Current request.
  * @return
  *     - number of affected rows on success.
  *     - < 0 on error.
  */
-static int sqlippool_command(char const *fmt, rlm_sql_handle_t **handle,
-                            rlm_sqlippool_t const *data, request_t *request)
+static int sqlippool_command(char const *query, rlm_sql_handle_t **handle,
+                            rlm_sql_t const *sql, request_t *request)
 {
-       char *expanded = NULL;
-
-       int ret;
-       int affected;
+       int     ret, affected;
 
        /*
         *      If we don't have a command, do nothing.
         */
-       if (!fmt || !*fmt) return 0;
+       if (!query || !*query) return 0;
 
        /*
         *      No handle?  That's an error.
         */
        if (!handle || !*handle) return -1;
 
-       if (xlat_aeval(request, &expanded, request, fmt, data->sql->sql_escape_func, *handle) < 0) return -1;
-
-       ret = data->sql->query(data->sql, request, handle, expanded);
-       talloc_free(expanded);
-       if (ret < 0){
-               return -1;
-       }
+       ret = sql->query(sql, request, handle, query);
+       if (ret < 0) return -1;
 
        /*
         *      No handle, we can't continue.
         */
        if (!*handle) return -1;
 
-       affected = (data->sql->driver->sql_affected_rows)(*handle, &data->sql->config);
+       affected = (sql->driver->sql_affected_rows)(*handle, &sql->config);
 
-       (data->sql->driver->sql_finish_query)(*handle, &data->sql->config);
+       (sql->driver->sql_finish_query)(*handle, &sql->config);
 
        return affected;
 }
@@ -197,33 +188,23 @@ static int sqlippool_command(char const *fmt, rlm_sql_handle_t **handle,
 /*
  * Query the database expecting a single result row
  */
-static int CC_HINT(nonnull (1, 3, 4, 5)) sqlippool_query1(char *out, int outlen, char const *fmt,
-                                                         rlm_sql_handle_t **handle, rlm_sqlippool_t *data,
+static int CC_HINT(nonnull (1, 3, 4, 5)) sqlippool_query1(char *out, int outlen, char const *query,
+                                                         rlm_sql_handle_t **handle, rlm_sql_t const *sql,
                                                          request_t *request)
 {
-       char *expanded = NULL;
-
-       int rlen, retval;
-
-       rlm_sql_row_t row;
+       int             rlen, retval;
+       rlm_sql_row_t   row;
 
        *out = '\0';
 
-       /*
-        *      Do an xlat on the provided string
-        */
-       if (xlat_aeval(request, &expanded, request, fmt, data->sql->sql_escape_func, *handle) < 0) {
-               return 0;
-       }
-       retval = data->sql->select(data->sql, request, handle, expanded);
-       talloc_free(expanded);
+       retval = sql->select(sql, request, handle, query);
 
        if ((retval != 0) || !*handle) {
-               REDEBUG("database query error on '%s'", fmt);
+               REDEBUG("database query error on '%s'", query);
                return 0;
        }
 
-       if (data->sql->fetch_row(&row, data->sql, request, handle) < 0) {
+       if (sql->fetch_row(&row, sql, request, handle) < 0) {
                REDEBUG("Failed fetching query result");
                goto finish;
        }
@@ -248,7 +229,7 @@ static int CC_HINT(nonnull (1, 3, 4, 5)) sqlippool_query1(char *out, int outlen,
        retval = rlen;
 
 finish:
-       (data->sql->driver->sql_finish_select_query)(*handle, &data->sql->config);
+       (sql->driver->sql_finish_select_query)(*handle, &sql->config);
 
        return retval;
 }