diff options
author | Gert-Jan Timmer <gjr.timmer@gmail.com> | 2018-05-31 14:55:22 +0200 |
---|---|---|
committer | Gert-Jan Timmer <gjr.timmer@gmail.com> | 2018-05-31 14:55:22 +0200 |
commit | 183e7d61d12d767363bf91073584300a2d470507 (patch) | |
tree | 533348da9033332bc41610bf81d543c49fe9b2bf | |
parent | Fix: Free memory (diff) | |
download | golite-183e7d61d12d767363bf91073584300a2d470507.tar.gz golite-183e7d61d12d767363bf91073584300a2d470507.tar.xz |
UPD: User Authentication
Implemented table check; only activate User Authentication on a database which has no UA enabled.
Closes #582
-rw-r--r-- | sqlite3.go | 10 | ||||
-rw-r--r-- | sqlite3_opt_userauth.go | 27 |
2 files changed, 29 insertions, 8 deletions
@@ -1368,14 +1368,8 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { return nil, fmt.Errorf("Missing '_auth_pass' while user authentication was requested with '_auth'") } - // TODO: Table exists check for table 'sqlite_user' - // replace 'authExists := false' with return value of table exists check - // - // REPLACE BY RESULT FROM TABLE EXISTS - // SELECT count(type) as exists FROM sqlite_master WHERE type='table' AND name='sqlite_user'; - // Scan result 'exists' and use it instead of boolean below. - authExists := false - + // Check if User Authentication is Enabled + authExists := conn.AuthIsEnabled() if !authExists { if err := conn.AuthUserAdd(authUser, authPass, true); err != nil { return nil, err diff --git a/sqlite3_opt_userauth.go b/sqlite3_opt_userauth.go index 2892dd0..2f5da0e 100644 --- a/sqlite3_opt_userauth.go +++ b/sqlite3_opt_userauth.go @@ -40,6 +40,23 @@ _sqlite3_user_delete(sqlite3* db, const char* zUsername) { return sqlite3_user_delete(db, zUsername); } + +static int +_sqlite3_auth_is_enabled(sqlite3* db) +{ + int exists = -1; + + sqlite3_stmt *stmt; + sqlite3_prepare_v2(db, "select count(type) from sqlite_master WHERE type='table' and name='sqlite_user';", -1, &stmt, NULL); + + while ( sqlite3_step(stmt) == SQLITE_ROW) { + exists = sqlite3_column_int(stmt, 0); + } + + sqlite3_finalize(stmt); + + return exists; +} */ import "C" import ( @@ -165,4 +182,14 @@ func (c *SQLiteConn) AuthUserDelete(username string) error { return nil } +// Check is database is protected by user authentication +func (c *SQLiteConn) AuthIsEnabled() (exists bool) { + rv := C._sqlite3_auth_is_enabled(c.db) + if rv == 1 { + exists = true + } + + return +} + // EOF |