Skip to content

Commit a01c70a

Browse files
authored
Merge branch 'mattn:master' into master
2 parents 81fbf42 + 8bf7a8a commit a01c70a

File tree

9 files changed

+3360
-2541
lines changed

9 files changed

+3360
-2541
lines changed

.github/workflows/go.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
strategy:
1515
matrix:
1616
os: [ubuntu-latest, macos-latest]
17-
go: ['1.19', '1.20', '1.21']
17+
go: ['1.22', '1.23', '1.24']
1818
fail-fast: false
1919
env:
2020
OS: ${{ matrix.os }}
@@ -44,7 +44,7 @@ jobs:
4444
run: go-acc . -- -race -v -tags "libsqlite3"
4545

4646
- name: 'Tags: full'
47-
run: go-acc . -- -race -v -tags "sqlite_allow_uri_authority sqlite_app_armor sqlite_column_metadata sqlite_foreign_keys sqlite_fts5 sqlite_icu sqlite_introspect sqlite_json sqlite_math_functions sqlite_os_trace sqlite_preupdate_hook sqlite_secure_delete sqlite_see sqlite_stat4 sqlite_trace sqlite_unlock_notify sqlite_userauth sqlite_vacuum_incr sqlite_vtable"
47+
run: go-acc . -- -race -v -tags "sqlite_allow_uri_authority sqlite_app_armor sqlite_column_metadata sqlite_foreign_keys sqlite_fts5 sqlite_icu sqlite_introspect sqlite_json sqlite_math_functions sqlite_os_trace sqlite_preupdate_hook sqlite_secure_delete sqlite_see sqlite_stat4 sqlite_trace sqlite_unlock_notify sqlite_vacuum_incr sqlite_vtable"
4848

4949
- name: 'Tags: vacuum'
5050
run: go-acc . -- -race -v -tags "sqlite_vacuum_full"
@@ -64,7 +64,7 @@ jobs:
6464

6565
strategy:
6666
matrix:
67-
go: ['1.19', '1.20', '1.21']
67+
go: ['1.22', '1.23', '1.24']
6868
fail-fast: false
6969
env:
7070
OS: windows-latest
@@ -99,7 +99,7 @@ jobs:
9999
- name: 'Tags: full'
100100
run: |
101101
echo 'skip this test'
102-
echo go build -race -v -tags "sqlite_allow_uri_authority sqlite_app_armor sqlite_column_metadata sqlite_foreign_keys sqlite_fts5 sqlite_icu sqlite_introspect sqlite_json sqlite_math_functions sqlite_preupdate_hook sqlite_secure_delete sqlite_see sqlite_stat4 sqlite_trace sqlite_unlock_notify sqlite_userauth sqlite_vacuum_incr sqlite_vtable"
102+
echo go build -race -v -tags "sqlite_allow_uri_authority sqlite_app_armor sqlite_column_metadata sqlite_foreign_keys sqlite_fts5 sqlite_icu sqlite_introspect sqlite_json sqlite_math_functions sqlite_preupdate_hook sqlite_secure_delete sqlite_see sqlite_stat4 sqlite_trace sqlite_unlock_notify sqlite_vacuum_incr sqlite_vtable"
103103
shell: msys2 {0}
104104

105105
- name: 'Tags: vacuum'

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,8 @@ For example the TDM-GCC Toolchain can be found [here](https://jmeubank.github.io
351351
352352
# User Authentication
353353
354+
***This is deprecated***
355+
354356
This package supports the SQLite User Authentication module.
355357
356358
## Compile

error_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ func TestCorruptDbErrors(t *testing.T) {
4343
_, err = db.Exec("drop table foo")
4444
}
4545

46-
sqliteErr := err.(Error)
46+
sqliteErr, ok := err.(Error)
47+
if !ok {
48+
t.Fatal(err)
49+
}
4750
if sqliteErr.Code != ErrNotADB {
4851
t.Error("wrong error code for corrupted DB")
4952
}

sqlite3-binding.c

Lines changed: 3096 additions & 1651 deletions
Large diffs are not rendered by default.

sqlite3-binding.h

Lines changed: 188 additions & 128 deletions
Large diffs are not rendered by default.

sqlite3_opt_userauth.go

Lines changed: 13 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -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
*/
6220
import "C"
6321
import (
6422
"errors"
65-
"unsafe"
6623
)
6724

6825
const (
6926
SQLITE_AUTH = C.SQLITE_AUTH
7027
)
7128

7229
var (
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
@@ -88,15 +46,7 @@ var (
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.
9048
func (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)
11161
func (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.
13373
func (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)
16491
func (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.
183100
func (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)
217121
func (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.
236130
func (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)
260146
func (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
273151
func (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
291164
func (c *SQLiteConn) authEnabled() int {
292-
return int(C._sqlite3_auth_enabled(c.db))
165+
return 0
293166
}
294167

295168
// EOF

0 commit comments

Comments
 (0)