@@ -16,62 +16,20 @@ package sqlite3
1616#else
1717#include <sqlite3.h>
1818#endif
19- #include <stdlib.h>
20-
21- static int
22- _sqlite3_user_authenticate(sqlite3* db, const char* zUsername, const char* aPW, int nPW)
23- {
24- return sqlite3_user_authenticate(db, zUsername, aPW, nPW);
25- }
26-
27- static int
28- _sqlite3_user_add(sqlite3* db, const char* zUsername, const char* aPW, int nPW, int isAdmin)
29- {
30- return sqlite3_user_add(db, zUsername, aPW, nPW, isAdmin);
31- }
32-
33- static int
34- _sqlite3_user_change(sqlite3* db, const char* zUsername, const char* aPW, int nPW, int isAdmin)
35- {
36- return sqlite3_user_change(db, zUsername, aPW, nPW, isAdmin);
37- }
38-
39- static int
40- _sqlite3_user_delete(sqlite3* db, const char* zUsername)
41- {
42- return sqlite3_user_delete(db, zUsername);
43- }
44-
45- static int
46- _sqlite3_auth_enabled(sqlite3* db)
47- {
48- int exists = -1;
49-
50- sqlite3_stmt *stmt;
51- sqlite3_prepare_v2(db, "select count(type) from sqlite_master WHERE type='table' and name='sqlite_user';", -1, &stmt, NULL);
52-
53- while ( sqlite3_step(stmt) == SQLITE_ROW) {
54- exists = sqlite3_column_int(stmt, 0);
55- }
56-
57- sqlite3_finalize(stmt);
58-
59- return exists;
60- }
6119*/
6220import "C"
6321import (
6422 "errors"
65- "unsafe"
6623)
6724
6825const (
6926 SQLITE_AUTH = C .SQLITE_AUTH
7027)
7128
7229var (
73- ErrUnauthorized = errors .New ("SQLITE_AUTH: Unauthorized" )
74- ErrAdminRequired = errors .New ("SQLITE_AUTH: Unauthorized; Admin Privileges Required" )
30+ ErrUnauthorized = errors .New ("SQLITE_AUTH: Unauthorized" )
31+ ErrAdminRequired = errors .New ("SQLITE_AUTH: Unauthorized; Admin Privileges Required" )
32+ errUserAuthNoLongerSupported = errors .New ("sqlite3: the sqlite_userauth tag is no longer supported as the userauth extension is no longer supported by the SQLite authors, see https://github.com/mattn/go-sqlite3/issues/1341" )
7533)
7634
7735// Authenticate will perform an authentication of the provided username
8846// If the SQLITE_USER table is not present in the database file, then
8947// this interface is a harmless no-op returning SQLITE_OK.
9048func (c * SQLiteConn ) Authenticate (username , password string ) error {
91- rv := c .authenticate (username , password )
92- switch rv {
93- case C .SQLITE_ERROR , C .SQLITE_AUTH :
94- return ErrUnauthorized
95- case C .SQLITE_OK :
96- return nil
97- default :
98- return c .lastError ()
99- }
49+ return errUserAuthNoLongerSupported
10050}
10151
10252// authenticate provides the actual authentication to SQLite.
@@ -109,17 +59,7 @@ func (c *SQLiteConn) Authenticate(username, password string) error {
10959// C.SQLITE_ERROR (1)
11060// C.SQLITE_AUTH (23)
11161func (c * SQLiteConn ) authenticate (username , password string ) int {
112- // Allocate C Variables
113- cuser := C .CString (username )
114- cpass := C .CString (password )
115-
116- // Free C Variables
117- defer func () {
118- C .free (unsafe .Pointer (cuser ))
119- C .free (unsafe .Pointer (cpass ))
120- }()
121-
122- return int (C ._sqlite3_user_authenticate (c .db , cuser , cpass , C .int (len (password ))))
62+ return 1
12363}
12464
12565// AuthUserAdd can be used (by an admin user only)
@@ -131,20 +71,7 @@ func (c *SQLiteConn) authenticate(username, password string) int {
13171// for any ATTACH-ed databases. Any call to AuthUserAdd by a
13272// non-admin user results in an error.
13373func (c * SQLiteConn ) AuthUserAdd (username , password string , admin bool ) error {
134- isAdmin := 0
135- if admin {
136- isAdmin = 1
137- }
138-
139- rv := c .authUserAdd (username , password , isAdmin )
140- switch rv {
141- case C .SQLITE_ERROR , C .SQLITE_AUTH :
142- return ErrAdminRequired
143- case C .SQLITE_OK :
144- return nil
145- default :
146- return c .lastError ()
147- }
74+ return errUserAuthNoLongerSupported
14875}
14976
15077// authUserAdd enables the User Authentication if not enabled.
@@ -162,17 +89,7 @@ func (c *SQLiteConn) AuthUserAdd(username, password string, admin bool) error {
16289// C.SQLITE_ERROR (1)
16390// C.SQLITE_AUTH (23)
16491func (c * SQLiteConn ) authUserAdd (username , password string , admin int ) int {
165- // Allocate C Variables
166- cuser := C .CString (username )
167- cpass := C .CString (password )
168-
169- // Free C Variables
170- defer func () {
171- C .free (unsafe .Pointer (cuser ))
172- C .free (unsafe .Pointer (cpass ))
173- }()
174-
175- return int (C ._sqlite3_user_add (c .db , cuser , cpass , C .int (len (password )), C .int (admin )))
92+ return 1
17693}
17794
17895// AuthUserChange can be used to change a users
@@ -181,20 +98,7 @@ func (c *SQLiteConn) authUserAdd(username, password string, admin int) int {
18198// credentials or admin privilege setting. No user may change their own
18299// admin privilege setting.
183100func (c * SQLiteConn ) AuthUserChange (username , password string , admin bool ) error {
184- isAdmin := 0
185- if admin {
186- isAdmin = 1
187- }
188-
189- rv := c .authUserChange (username , password , isAdmin )
190- switch rv {
191- case C .SQLITE_ERROR , C .SQLITE_AUTH :
192- return ErrAdminRequired
193- case C .SQLITE_OK :
194- return nil
195- default :
196- return c .lastError ()
197- }
101+ return errUserAuthNoLongerSupported
198102}
199103
200104// authUserChange allows to modify a user.
@@ -215,17 +119,7 @@ func (c *SQLiteConn) AuthUserChange(username, password string, admin bool) error
215119// C.SQLITE_ERROR (1)
216120// C.SQLITE_AUTH (23)
217121func (c * SQLiteConn ) authUserChange (username , password string , admin int ) int {
218- // Allocate C Variables
219- cuser := C .CString (username )
220- cpass := C .CString (password )
221-
222- // Free C Variables
223- defer func () {
224- C .free (unsafe .Pointer (cuser ))
225- C .free (unsafe .Pointer (cpass ))
226- }()
227-
228- return int (C ._sqlite3_user_change (c .db , cuser , cpass , C .int (len (password )), C .int (admin )))
122+ return 1
229123}
230124
231125// AuthUserDelete can be used (by an admin user only)
@@ -234,15 +128,7 @@ func (c *SQLiteConn) authUserChange(username, password string, admin int) int {
234128// the database cannot be converted into a no-authentication-required
235129// database.
236130func (c * SQLiteConn ) AuthUserDelete (username string ) error {
237- rv := c .authUserDelete (username )
238- switch rv {
239- case C .SQLITE_ERROR , C .SQLITE_AUTH :
240- return ErrAdminRequired
241- case C .SQLITE_OK :
242- return nil
243- default :
244- return c .lastError ()
245- }
131+ return errUserAuthNoLongerSupported
246132}
247133
248134// authUserDelete can be used to delete a user.
@@ -258,25 +144,12 @@ func (c *SQLiteConn) AuthUserDelete(username string) error {
258144// C.SQLITE_ERROR (1)
259145// C.SQLITE_AUTH (23)
260146func (c * SQLiteConn ) authUserDelete (username string ) int {
261- // Allocate C Variables
262- cuser := C .CString (username )
263-
264- // Free C Variables
265- defer func () {
266- C .free (unsafe .Pointer (cuser ))
267- }()
268-
269- return int (C ._sqlite3_user_delete (c .db , cuser ))
147+ return 1
270148}
271149
272150// AuthEnabled checks if the database is protected by user authentication
273151func (c * SQLiteConn ) AuthEnabled () (exists bool ) {
274- rv := c .authEnabled ()
275- if rv == 1 {
276- exists = true
277- }
278-
279- return
152+ return false
280153}
281154
282155// authEnabled perform the actual check for user authentication.
@@ -289,7 +162,7 @@ func (c *SQLiteConn) AuthEnabled() (exists bool) {
289162// 0 - Disabled
290163// 1 - Enabled
291164func (c * SQLiteConn ) authEnabled () int {
292- return int ( C . _sqlite3_auth_enabled ( c . db ))
165+ return 0
293166}
294167
295168// EOF
0 commit comments