Check for closed sockets.
authorAlan T. DeKok <aland@freeradius.org>
Tue, 9 Mar 2010 09:12:01 +0000 (10:12 +0100)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 9 Mar 2010 09:16:38 +0000 (10:16 +0100)
This allows the module to continue if the DB suddenly disappears

src/modules/rlm_sql/sql.c

index e5e15bc..ecd77e0 100644 (file)
@@ -511,7 +511,11 @@ int rlm_sql_query(SQLSOCK *sqlsocket, SQL_INST *inst, char *query)
                return -1;
        }
 
-       ret = (inst->module->sql_query)(sqlsocket, inst->config, query);
+       if (sqlsocket->conn) {
+               ret = (inst->module->sql_query)(sqlsocket, inst->config, query);
+       } else {
+               ret = SQL_DOWN;
+       }
 
        if (ret == SQL_DOWN) {
                /* close the socket that failed */
@@ -556,7 +560,12 @@ int rlm_sql_select_query(SQLSOCK *sqlsocket, SQL_INST *inst, char *query)
                return -1;
        }
 
-       ret = (inst->module->sql_select_query)(sqlsocket, inst->config, query);
+       if (sqlsocket->conn) {
+               ret = (inst->module->sql_select_query)(sqlsocket, inst->config,
+                                                      query);
+       } else {
+               ret = SQL_DOWN;
+       }
 
        if (ret == SQL_DOWN) {
                /* close the socket that failed */
@@ -596,13 +605,6 @@ int sql_getvpdata(SQL_INST * inst, SQLSOCK * sqlsocket, VALUE_PAIR **pair, char
        SQL_ROW row;
        int     rows = 0;
 
-       /*
-        *      If there's no query, return an error.
-        */
-       if (!query || !*query) {
-               return -1;
-       }
-
        if (rlm_sql_select_query(sqlsocket, inst, query)) {
                radlog(L_ERR, "rlm_sql_getvpdata: database query error");
                return -1;