Allow sqlite filename to be specified in the configuration file.
authorAlan T. DeKok <aland@freeradius.org>
Tue, 14 Sep 2010 00:40:24 +0000 (02:40 +0200)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 17 Sep 2010 09:35:47 +0000 (11:35 +0200)
Undocumented for now.  Based on a patch from Sven Anders

src/modules/rlm_sql/conf.h
src/modules/rlm_sql/drivers/rlm_sql_sqlite/sql_sqlite.c
src/modules/rlm_sql/rlm_sql.c

index 7d28f77..d1faae0 100644 (file)
@@ -18,6 +18,7 @@ typedef struct sql_config {
        char   *sql_login;
        char   *sql_password;
        char   *sql_db;
+       char   *sql_file;       /* for sqlite */
        char   *query_user;
        char   *default_profile;
        char   *nas_query;
index 5255000..f4b6dc0 100644 (file)
@@ -49,6 +49,7 @@ static int sql_init_socket(SQLSOCK *sqlsocket, SQL_CONFIG *config)
 {
        int status;
        rlm_sql_sqlite_sock *sqlite_sock;
+       char *filename;
        char buffer[2048];
        
        if (!sqlsocket->conn) {
@@ -60,12 +61,16 @@ static int sql_init_socket(SQLSOCK *sqlsocket, SQL_CONFIG *config)
        sqlite_sock = sqlsocket->conn;
        memset(sqlite_sock, 0, sizeof(rlm_sql_sqlite_sock));
        
-       snprintf(buffer, sizeof(buffer), "%s/sqlite_radius_client_database",
-                radius_dir);
+       filename = config->sql_file;
+       if (!filename) {
+               snprintf(buffer, sizeof(buffer), "%s/sqlite_radius_client_database",
+                        radius_dir);
+               filename = buffer;
+       }
        radlog(L_INFO, "rlm_sql_sqlite: Opening sqlite database %s for #%d",
-                       buffer, sqlsocket->id);
+              filename, sqlsocket->id);
        
-       status = sqlite3_open(buffer, &sqlite_sock->pDb);
+       status = sqlite3_open(filename, &sqlite_sock->pDb);
        radlog(L_INFO, "rlm_sql_sqlite: sqlite3_open() = %d\n", status);
        return (status != SQLITE_OK) * -1;
 }
@@ -333,7 +338,7 @@ static int sql_free_result(SQLSOCK * sqlsocket, UNUSED SQL_CONFIG *config)
  *               connection
  *
  *************************************************************************/
-static const char *sql_error(SQLSOCK * sqlsocket, UNUSED SQL_CONFIG *config)
+static const char *sql_error(UNUSED SQLSOCK * sqlsocket, UNUSED SQL_CONFIG *config)
 {
        return NULL;
 }
@@ -403,7 +408,7 @@ static int sql_finish_select_query(SQLSOCK * sqlsocket, SQL_CONFIG *config)
  *     Purpose: End the select query, such as freeing memory or result
  *
  *************************************************************************/
-static int sql_affected_rows(SQLSOCK * sqlsocket, UNUSED SQL_CONFIG *config)
+static int sql_affected_rows(UNUSED SQLSOCK * sqlsocket, UNUSED SQL_CONFIG *config)
 {
        return 0;
 }
index 800e8ef..15da1c6 100644 (file)
@@ -49,6 +49,8 @@ static const CONF_PARSER module_config[] = {
         offsetof(SQL_CONFIG,sql_password), NULL, ""},
        {"radius_db", PW_TYPE_STRING_PTR,
         offsetof(SQL_CONFIG,sql_db), NULL, "radius"},
+       {"filename", PW_TYPE_FILENAME, /* for sqlite */
+        offsetof(SQL_CONFIG,sql_file), NULL, NULL},
        {"read_groups", PW_TYPE_BOOLEAN,
         offsetof(SQL_CONFIG,read_groups), NULL, "yes"},
        {"sqltrace", PW_TYPE_BOOLEAN,