]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
More sqlite fixes
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 6 Mar 2013 06:22:06 +0000 (01:22 -0500)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 6 Mar 2013 06:46:47 +0000 (01:46 -0500)
src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c
src/modules/rlm_sql/rlm_sql.c

index a0f4430cee0cc0435d16d3dd6fd6070a98a2be48..4e83dc05452f32aab053797a314e8b2e09780a11 100644 (file)
@@ -66,11 +66,11 @@ static int sql_check_error(sqlite3 *db)
        /*
         *      User/transient errors
         */
+       case SQLITE_ERROR:      /* SQL error or missing database */
        case SQLITE_FULL:
        case SQLITE_CONSTRAINT:
        case SQLITE_MISMATCH:
-               radlog(L_ERR, "rlm_sql_sqlite: SQLite error (%d): %s", error,
-                      sqlite3_errmsg(db));
+               radlog(L_ERR, "rlm_sql_sqlite: Error (%d)", error);
                
                return -1;
                break;
@@ -79,8 +79,8 @@ static int sql_check_error(sqlite3 *db)
         *      Errors with the handle, that probably require reinitialisation
         */
        default:
-               radlog(L_ERR, "rlm_sql_sqlite: Handle is unusable, SQLite "
-                      "error (%d): %s", error, sqlite3_errmsg(db));
+               radlog(L_ERR, "rlm_sql_sqlite: Handle is unusable, "
+                      "error (%d)", error);
                return SQL_DOWN;
                break;
        }
@@ -119,15 +119,14 @@ static int sql_init_socket(rlm_sql_handle_t *handle, rlm_sql_config_t *config)
        
        int status;
 
-       if (!conn) {
-               MEM(handle->conn = talloc_zero(NULL, rlm_sql_conn_t));
-       }
-       
-       conn = handle->conn;
+       MEM(conn = handle->conn = talloc_zero(handle, rlm_sql_conn_t));
 
-       DEBUG("rlm_sql_sqlite: Opening SQLite database %s", driver->filename);
+       radlog(L_INFO, "rlm_sql_sqlite: Opening SQLite database \"%s\"",
+              driver->filename);
        
-       status = sqlite3_open(driver->filename, &(conn->db));
+       status = sqlite3_open_v2(driver->filename, &(conn->db),
+                                SQLITE_OPEN_READWRITE | SQLITE_OPEN_FULLMUTEX,
+                                NULL);
        if (status != SQLITE_OK) {
                return sql_check_error(conn->db);
        }
@@ -417,7 +416,11 @@ static int sql_close(rlm_sql_handle_t *handle,
                conn->db = NULL;
        }
        
-       return sql_check_error(conn->db);
+       if (status != SQLITE_OK) {
+               return -1;
+       }
+       
+       return 0;
 }
 
 
index bd7239cfbf1f994acca612bf4b3a63c8b5f5652e..7549706196fdf80353474e7ae419ccdccbdde112 100644 (file)
@@ -39,16 +39,16 @@ RCSID("$Id$")
 
 static const CONF_PARSER acct_section_config[] = {
        {"reference", PW_TYPE_STRING_PTR,
-         offsetof(sql_acct_section_t, reference), NULL, ".query"},
-         
+         offsetof(sql_acct_section_t, reference), NULL, ".query"},  
        {"logfile", PW_TYPE_STRING_PTR,
         offsetof(sql_acct_section_t, logfile), NULL, NULL},
+        
        {NULL, -1, 0, NULL, NULL}
 };
 
 static const CONF_PARSER module_config[] = {
        {"driver", PW_TYPE_STRING_PTR,
-        offsetof(rlm_sql_config_t,sql_driver_name), NULL, "mysql"},
+        offsetof(rlm_sql_config_t,sql_driver_name), NULL, "rlm_sql_null"},
        {"server", PW_TYPE_STRING_PTR,
         offsetof(rlm_sql_config_t,sql_server), NULL, "localhost"},
        {"port", PW_TYPE_STRING_PTR,
@@ -933,11 +933,29 @@ static int rlm_sql_instantiate(CONF_SECTION *conf, void **instance)
                return -1;
        }
        
-       if (inst->module->sql_instantiate) {    
+       if (inst->module->sql_instantiate) {
+               CONF_SECTION *cs;
+               const char *name;
+               
+               name = strrchr(inst->config->sql_driver_name, '_');
+               if (!name) {
+                       name = inst->config->sql_driver_name;
+               } else {
+                       name++;
+               }
+               
+               cs = cf_section_sub_find(conf, name);
+               if (!cs) {
+                       radlog(L_ERR, "%s driver requires %s driver subsection",
+                              inst->config->sql_driver_name, name);
+                              
+                        return -1;
+               }
+               
                /*
                 *      It's up to the driver to register a destructor
                 */
-               if (inst->module->sql_instantiate(cf_section_sub_find(conf, inst->config->sql_driver_name), inst->config) < 0) {
+               if (inst->module->sql_instantiate(cs, inst->config) < 0) {
                        return -1;
                }
        }
@@ -949,10 +967,8 @@ static int rlm_sql_instantiate(CONF_SECTION *conf, void **instance)
        /*
         *      Initialise the connection pool for this instance
         */
-       radlog(L_INFO, "rlm_sql (%s): Attempting to connect to %s@%s:%s/%s",
-              inst->config->xlat_name, inst->config->sql_login,
-              inst->config->sql_server, inst->config->sql_port,
-              inst->config->sql_db);
+       radlog(L_INFO, "rlm_sql (%s): Attempting to connect to database \"%s\"",
+              inst->config->xlat_name, inst->config->sql_db);
               
        if (sql_init_socketpool(inst) < 0) return -1;