aboutsummaryrefslogtreecommitdiff
path: root/src/tclsqlite.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2014-09-11 13:44:52 +0000
committerdrh <drh@noemail.net>2014-09-11 13:44:52 +0000
commit32c6a48b5ec977fc849833f9c340b85893103074 (patch)
tree5447aaed784dac0b0d37aef340ce4bb99e0d9afd /src/tclsqlite.c
parentd39c40ff5e89601a242f004faa45735e80275fcb (diff)
downloadsqlite-32c6a48b5ec977fc849833f9c340b85893103074.tar.gz
sqlite-32c6a48b5ec977fc849833f9c340b85893103074.zip
Add support for the extra parameter on the sqlite3_set_authorizer() callback
and support for failing an ATTACH with an authentication-required database using bad credentials. The extension is now feature complete, but much testing and bug-fixing remains. FossilOrigin-Name: 596e728b0eb19a34c888e33d4d37978ca2bf1e00
Diffstat (limited to 'src/tclsqlite.c')
-rw-r--r--src/tclsqlite.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/tclsqlite.c b/src/tclsqlite.c
index 945fd9598..756d0daa5 100644
--- a/src/tclsqlite.c
+++ b/src/tclsqlite.c
@@ -872,6 +872,9 @@ static int auth_callback(
const char *zArg2,
const char *zArg3,
const char *zArg4
+#ifdef SQLITE_USER_AUTHENTICATION
+ ,const char *zArg5
+#endif
){
const char *zCode;
Tcl_DString str;
@@ -924,6 +927,9 @@ static int auth_callback(
Tcl_DStringAppendElement(&str, zArg2 ? zArg2 : "");
Tcl_DStringAppendElement(&str, zArg3 ? zArg3 : "");
Tcl_DStringAppendElement(&str, zArg4 ? zArg4 : "");
+#ifdef SQLITE_USER_AUTHENTICATION
+ Tcl_DStringAppendElement(&str, zArg5 ? zArg5 : "");
+#endif
rc = Tcl_GlobalEval(pDb->interp, Tcl_DStringValue(&str));
Tcl_DStringFree(&str);
zReply = rc==TCL_OK ? Tcl_GetStringResult(pDb->interp) : "SQLITE_DENY";
@@ -1700,8 +1706,11 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
pDb->zAuth = 0;
}
if( pDb->zAuth ){
+ typedef int (*sqlite3_auth_cb)(
+ void*,int,const char*,const char*,
+ const char*,const char*);
pDb->interp = interp;
- sqlite3_set_authorizer(pDb->db, auth_callback, pDb);
+ sqlite3_set_authorizer(pDb->db,(sqlite3_auth_cb)auth_callback,pDb);
}else{
sqlite3_set_authorizer(pDb->db, 0, 0);
}