From: Arran Cudbard-Bell Date: Wed, 6 Mar 2013 06:22:06 +0000 (-0500) Subject: More sqlite fixes X-Git-Tag: release_3_0_0_beta1~824 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bcaf24e65d561392efe64442f248057b29cfcf20;p=thirdparty%2Ffreeradius-server.git More sqlite fixes --- diff --git a/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c b/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c index a0f4430cee0..4e83dc05452 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c @@ -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; } diff --git a/src/modules/rlm_sql/rlm_sql.c b/src/modules/rlm_sql/rlm_sql.c index bd7239cfbf1..7549706196f 100644 --- a/src/modules/rlm_sql/rlm_sql.c +++ b/src/modules/rlm_sql/rlm_sql.c @@ -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;