Better rlm_sql errors
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 17 Nov 2014 15:14:38 +0000 (10:14 -0500)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 17 Nov 2014 15:15:09 +0000 (10:15 -0500)
src/modules/rlm_sql/rlm_sql.c
src/modules/rlm_sql/rlm_sql.h
src/modules/rlm_sql/sql.c

index 1b5339e..d1b1522 100644 (file)
@@ -225,10 +225,8 @@ static ssize_t sql_xlat(void *instance, REQUEST *request, char const *query, cha
                goto finish;
        } /* else it's a SELECT statement */
 
-       if (rlm_sql_select_query(&handle, inst, query) != RLM_SQL_OK){
-               char const *error = (inst->module->sql_error)(handle, inst->config);
-               REDEBUG("SQL query failed: %s", error);
-               ret = -1;
+       if (rlm_sql_select_query(&handle, inst, query) != RLM_SQL_OK) {
+               ret = -1;  /* error handled by rlm_sql_select_query */
 
                goto finish;
        }
@@ -297,9 +295,7 @@ static int generate_sql_clients(rlm_sql_t *inst)
                return -1;
        }
 
-       if (rlm_sql_select_query(&handle, inst, inst->config->client_query) != RLM_SQL_OK){
-               return -1;
-       }
+       if (rlm_sql_select_query(&handle, inst, inst->config->client_query) != RLM_SQL_OK) return -1;
 
        while ((rlm_sql_fetch_row(&handle, inst) == 0) && (row = handle->row)) {
                char *server = NULL;
@@ -511,9 +507,7 @@ static int sql_get_grouplist(rlm_sql_t *inst, rlm_sql_handle_t **handle, REQUEST
 
        ret = rlm_sql_select_query(handle, inst, expanded);
        talloc_free(expanded);
-       if (ret != RLM_SQL_OK) {
-               return -1;
-       }
+       if (ret != RLM_SQL_OK) return -1;
 
        while (rlm_sql_fetch_row(handle, inst) == 0) {
                row = (*handle)->row;
@@ -667,7 +661,7 @@ static rlm_rcode_t rlm_sql_process_groups(rlm_sql_t *inst, REQUEST *request, rlm
                                goto finish;
                        }
 
-                       rows = sql_getvpdata(request, inst, handle, &check_tmp, expanded);
+                       rows = sql_getvpdata(request, inst, request, handle, &check_tmp, expanded);
                        TALLOC_FREE(expanded);
                        if (rows < 0) {
                                REDEBUG("Error retrieving check pairs for group %s", entry->name);
@@ -714,7 +708,7 @@ static rlm_rcode_t rlm_sql_process_groups(rlm_sql_t *inst, REQUEST *request, rlm
                                goto finish;
                        }
 
-                       rows = sql_getvpdata(request->reply, inst, handle, &reply_tmp, expanded);
+                       rows = sql_getvpdata(request->reply, inst, request, handle, &reply_tmp, expanded);
                        TALLOC_FREE(expanded);
                        if (rows < 0) {
                                REDEBUG("Error retrieving reply pairs for group %s", entry->name);
@@ -1004,7 +998,7 @@ static rlm_rcode_t CC_HINT(nonnull) mod_authorize(void *instance, REQUEST *reque
                        goto error;
                }
 
-               rows = sql_getvpdata(request, inst, &handle, &check_tmp, expanded);
+               rows = sql_getvpdata(request, inst, request, &handle, &check_tmp, expanded);
                TALLOC_FREE(expanded);
                if (rows < 0) {
                        REDEBUG("SQL query error getting check attributes");
@@ -1052,7 +1046,7 @@ static rlm_rcode_t CC_HINT(nonnull) mod_authorize(void *instance, REQUEST *reque
                        goto error;
                }
 
-               rows = sql_getvpdata(request->reply, inst, &handle, &reply_tmp, expanded);
+               rows = sql_getvpdata(request->reply, inst, request, &handle, &reply_tmp, expanded);
                TALLOC_FREE(expanded);
                if (rows < 0) {
                        REDEBUG("SQL query error getting reply attributes");
@@ -1453,9 +1447,7 @@ static rlm_rcode_t CC_HINT(nonnull) mod_checksimul(void *instance, REQUEST * req
                goto finish;
        }
 
-       if (rlm_sql_select_query(&handle, inst, expanded) != RLM_SQL_OK) {
-               goto finish;
-       }
+       if (rlm_sql_select_query(&handle, inst, expanded) != RLM_SQL_OK) goto finish;
 
        /*
         *      Setup some stuff, like for MPP detection.
index 24e4150..d75c27b 100644 (file)
@@ -159,7 +159,7 @@ typedef struct sql_grouplist {
 void           *mod_conn_create(TALLOC_CTX *ctx, void *instance);
 int            sql_userparse(TALLOC_CTX *ctx, VALUE_PAIR **first_pair, rlm_sql_row_t row);
 int            sql_read_realms(rlm_sql_handle_t *handle);
-int            sql_getvpdata(TALLOC_CTX *ctx, rlm_sql_t *inst, rlm_sql_handle_t **handle, VALUE_PAIR **pair, char const *query);
+int            sql_getvpdata(TALLOC_CTX *ctx, rlm_sql_t *inst, REQUEST *request, rlm_sql_handle_t **handle, VALUE_PAIR **pair, char const *query);
 int            sql_read_naslist(rlm_sql_handle_t *handle);
 int            sql_read_clients(rlm_sql_handle_t *handle);
 int            sql_dict_init(rlm_sql_handle_t *handle);
index ad8048b..b61dc21 100644 (file)
@@ -316,7 +316,10 @@ sql_rcode_t rlm_sql_query(rlm_sql_handle_t **handle, rlm_sql_t *inst, char const
        int i, count;
 
        /* There's no query to run, return an error */
-       if (query[0] == '\0') return RLM_SQL_QUERY_ERROR;
+       if (query[0] == '\0') {
+               ERROR("rlm_sql (%s): Zero length query", inst->config->xlat_name);
+               return RLM_SQL_QUERY_ERROR;
+       }
 
        /* There's no handle, we need a new one */
        if (!*handle) return RLM_SQL_RECONNECT;
@@ -383,10 +386,10 @@ sql_rcode_t rlm_sql_select_query(rlm_sql_handle_t **handle, rlm_sql_t *inst, cha
        int i, count;
 
        /* There's no query to run, return an error */
-       if (query[0] == '\0') return RLM_SQL_QUERY_ERROR;
-
-       /* There's no handle, we need a new one */
-       if (!*handle) return RLM_SQL_RECONNECT;
+       if (query[0] == '\0') {
+               ERROR("rlm_sql (%s): Zero length SELECT query", inst->config->xlat_name);
+               return RLM_SQL_QUERY_ERROR;
+       }
 
        /*
         *  inst->pool may be NULL is this function is called by mod_conn_create.
@@ -438,25 +441,21 @@ sql_rcode_t rlm_sql_select_query(rlm_sql_handle_t **handle, rlm_sql_t *inst, cha
  *     Purpose: Get any group check or reply pairs
  *
  *************************************************************************/
-int sql_getvpdata(TALLOC_CTX *ctx, rlm_sql_t *inst, rlm_sql_handle_t **handle,
+int sql_getvpdata(TALLOC_CTX *ctx, rlm_sql_t *inst, REQUEST *request, rlm_sql_handle_t **handle,
                  VALUE_PAIR **pair, char const *query)
 {
-       rlm_sql_row_t row;
-       int     rows = 0;
-       sql_rcode_t rcode;
+       rlm_sql_row_t   row;
+       int             rows = 0;
+       sql_rcode_t     rcode;
 
        rcode = rlm_sql_select_query(handle, inst, query);
-       if (!rcode) {
-               ERROR("rlm_sql (%s): Failed in SELECT query: %d", inst->config->xlat_name, rcode);
-               return -1;
-       }
+       if (!rcode) return -1; /* error handled by rlm_sql_select_query */
 
        while (rlm_sql_fetch_row(handle, inst) == 0) {
                row = (*handle)->row;
-               if (!row)
-                       break;
+               if (!row) break;
                if (sql_userparse(ctx, pair, row) != 0) {
-                       ERROR("rlm_sql (%s): Error parsing user data from database result", inst->config->xlat_name);
+                       REDEBUG("Error parsing user data from database result");
 
                        (inst->module->sql_finish_select_query)(*handle, inst->config);