1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-18 10:21:03 +03:00

Do not invoke the authorizer when reparsing the schema after a schema

change or when trying to figure out the result set of a view. (CVS 4488)

FossilOrigin-Name: e756bc9b74ef357c088b3044527c41e6834ba1a2
This commit is contained in:
drh
2007-10-12 20:42:28 +00:00
parent 7d97efbe57
commit a6d0ffc359
5 changed files with 120 additions and 13 deletions

View File

@@ -1,5 +1,5 @@
C Convert\sa\sK&R\sstyle\sfunction\sto\sANSI\sstyle.\s\sTicket\s#2548.\s(CVS\s4487) C Do\snot\sinvoke\sthe\sauthorizer\swhen\sreparsing\sthe\sschema\safter\sa\sschema\nchange\sor\swhen\strying\sto\sfigure\sout\sthe\sresult\sset\sof\sa\sview.\s(CVS\s4488)
D 2007-10-12T19:35:49 D 2007-10-12T20:42:29
F Makefile.in 75b729d562e9525d57d9890ec598b38e1a8b02bc F Makefile.in 75b729d562e9525d57d9890ec598b38e1a8b02bc
F Makefile.linux-gcc 65241babba6faf1152bf86574477baab19190499 F Makefile.linux-gcc 65241babba6faf1152bf86574477baab19190499
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -84,7 +84,7 @@ F src/btmutex.c 442be6f068d77ca9ffd69899cf0a3943c244548c
F src/btree.c a491c45b4412e6f19458e122bafa0cca8f22d224 F src/btree.c a491c45b4412e6f19458e122bafa0cca8f22d224
F src/btree.h d0736ebca4b6eafbdd823c46a8de574cea078211 F src/btree.h d0736ebca4b6eafbdd823c46a8de574cea078211
F src/btreeInt.h 4330c19b8314545fdb209cc77e2a57f6a5290e9c F src/btreeInt.h 4330c19b8314545fdb209cc77e2a57f6a5290e9c
F src/build.c fec792576c6e64200259ae5c0f7ee34a6c1abbae F src/build.c a400945db0c43f077e06d45a670bf9ad0c6fd4a2
F src/callback.c 77b302b0d41468dcda78c70e706e5b84577f0fa0 F src/callback.c 77b302b0d41468dcda78c70e706e5b84577f0fa0
F src/complete.c 4cf68fd75d60257524cbe74f87351b9848399131 F src/complete.c 4cf68fd75d60257524cbe74f87351b9848399131
F src/date.c 49c5a6d2de6c12000905b4d36868b07d3011bbf6 F src/date.c 49c5a6d2de6c12000905b4d36868b07d3011bbf6
@@ -124,7 +124,7 @@ F src/pager.c 0a92a08192785af79547b017cda45eb683b22552
F src/pager.h d783e7f184afdc33adff37ba58d4e029bd8793b3 F src/pager.h d783e7f184afdc33adff37ba58d4e029bd8793b3
F src/parse.y 2d2ce439dc6184621fb0b86f4fc5aca7f391a590 F src/parse.y 2d2ce439dc6184621fb0b86f4fc5aca7f391a590
F src/pragma.c 363e548dafb52327face8d99757ab56a7b1c1b26 F src/pragma.c 363e548dafb52327face8d99757ab56a7b1c1b26
F src/prepare.c 920d09a5fc690ccd48ec8c82717a11d53365dae3 F src/prepare.c 663284f62a73a48b89f5f4e769e155fefba60384
F src/printf.c 96c8d55315a13fc53cb3754cb15046f3ff891ea2 F src/printf.c 96c8d55315a13fc53cb3754cb15046f3ff891ea2
F src/random.c 4a22746501bf36b0a088c66e38dde5daba6a35da F src/random.c 4a22746501bf36b0a088c66e38dde5daba6a35da
F src/select.c 4706a6115da1bdc09a2be5991168a6cc2c0df267 F src/select.c 4706a6115da1bdc09a2be5991168a6cc2c0df267
@@ -190,7 +190,7 @@ F test/attach2.test 099e46a9a753035ff1b8ec0954e18ea50a934df3
F test/attach3.test 7b92dc8e40c1ebca9732ca6f2d3fefbd46f196df F test/attach3.test 7b92dc8e40c1ebca9732ca6f2d3fefbd46f196df
F test/attachmalloc.test 56c5e55563dba6d64641ef2f70ce06900df16912 F test/attachmalloc.test 56c5e55563dba6d64641ef2f70ce06900df16912
F test/auth.test 6d98da67f40475ff9eba99b4a74954c123ba1792 F test/auth.test 6d98da67f40475ff9eba99b4a74954c123ba1792
F test/auth2.test 8da06f0ffcfd98154dda78e0f3b35a6503c27b64 F test/auth2.test 65ac294b8d52cbdd463f61e77ad0165268373126
F test/autoinc.test 0e67964f4855081e3a325e484adfebaab41f23a1 F test/autoinc.test 0e67964f4855081e3a325e484adfebaab41f23a1
F test/autovacuum.test 4339e66003b9cf813dd667a83aed2dee27c4c36d F test/autovacuum.test 4339e66003b9cf813dd667a83aed2dee27c4c36d
F test/autovacuum_crash.test 05a63b8805b20cfba7ace82856ce4ccdda075a31 F test/autovacuum_crash.test 05a63b8805b20cfba7ace82856ce4ccdda075a31
@@ -581,7 +581,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
P 4a807d48ea9923c1e3df4a5ad503710e62ae29f8 P e1b2e7c24ce0f838687a503dc98188a0e67c79de
R 4b8c327d78cb80cdce0615f0d18610ed R 525828fdeb77c0b3207ff7d87dd55a9d
U drh U drh
Z 9f848e6120696622a7cbb1f37bdcaef8 Z 10cf92f8870071423d4027eef109f9ac

View File

@@ -1 +1 @@
e1b2e7c24ce0f838687a503dc98188a0e67c79de e756bc9b74ef357c088b3044527c41e6834ba1a2

View File

@@ -22,7 +22,7 @@
** COMMIT ** COMMIT
** ROLLBACK ** ROLLBACK
** **
** $Id: build.c,v 1.445 2007/10/04 18:11:16 danielk1977 Exp $ ** $Id: build.c,v 1.446 2007/10/12 20:42:29 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <ctype.h> #include <ctype.h>
@@ -1679,6 +1679,7 @@ int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
int nErr = 0; /* Number of errors encountered */ int nErr = 0; /* Number of errors encountered */
int n; /* Temporarily holds the number of cursors assigned */ int n; /* Temporarily holds the number of cursors assigned */
sqlite3 *db = pParse->db; /* Database connection for malloc errors */ sqlite3 *db = pParse->db; /* Database connection for malloc errors */
int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
assert( pTable ); assert( pTable );
@@ -1724,7 +1725,10 @@ int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
n = pParse->nTab; n = pParse->nTab;
sqlite3SrcListAssignCursors(pParse, pSel->pSrc); sqlite3SrcListAssignCursors(pParse, pSel->pSrc);
pTable->nCol = -1; pTable->nCol = -1;
xAuth = db->xAuth;
db->xAuth = 0;
pSelTab = sqlite3ResultSetOfSelect(pParse, 0, pSel); pSelTab = sqlite3ResultSetOfSelect(pParse, 0, pSel);
db->xAuth = xAuth;
pParse->nTab = n; pParse->nTab = n;
if( pSelTab ){ if( pSelTab ){
assert( pTable->aCol==0 ); assert( pTable->aCol==0 );

View File

@@ -13,7 +13,7 @@
** interface, and routines that contribute to loading the database schema ** interface, and routines that contribute to loading the database schema
** from disk. ** from disk.
** **
** $Id: prepare.c,v 1.61 2007/10/03 08:46:45 danielk1977 Exp $ ** $Id: prepare.c,v 1.62 2007/10/12 20:42:30 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <ctype.h> #include <ctype.h>
@@ -301,7 +301,17 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
"SELECT name, rootpage, sql FROM '%q'.%s", "SELECT name, rootpage, sql FROM '%q'.%s",
db->aDb[iDb].zName, zMasterName); db->aDb[iDb].zName, zMasterName);
sqlite3SafetyOff(db); sqlite3SafetyOff(db);
rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0); #ifndef SQLITE_OMIT_AUTHORIZATION
{
int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
xAuth = db->xAuth;
db->xAuth = 0;
#endif
rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0);
#ifndef SQLITE_OMIT_AUTHORIZATION
db->xAuth = xAuth;
}
#endif
if( rc==SQLITE_ABORT ) rc = initData.rc; if( rc==SQLITE_ABORT ) rc = initData.rc;
sqlite3SafetyOn(db); sqlite3SafetyOn(db);
sqlite3_free(zSql); sqlite3_free(zSql);

View File

@@ -12,7 +12,7 @@
# focus of this script is testing the sqlite3_set_authorizer() API # focus of this script is testing the sqlite3_set_authorizer() API
# and related functionality. # and related functionality.
# #
# $Id: auth2.test,v 1.1 2006/08/24 14:59:46 drh Exp $ # $Id: auth2.test,v 1.2 2007/10/12 20:42:30 drh Exp $
# #
set testdir [file dirname $argv0] set testdir [file dirname $argv0]
@@ -72,4 +72,97 @@ do_test auth2-1.8 {
set ::flist set ::flist
} coalesce } coalesce
# Make sure the authorizer is not called when parsing the schema
# and when computing the result set of a view.
#
db close
sqlite3 db test.db
sqlite3 db2 test.db
proc auth {args} {
global authargs
append authargs $args\n
return SQLITE_OK
}
db auth auth
do_test auth2-2.1 {
set ::authargs {}
db eval {
CREATE TABLE t2(x,y,z);
}
set ::authargs
} {SQLITE_INSERT sqlite_master {} main {}
SQLITE_CREATE_TABLE t2 {} main {}
SQLITE_UPDATE sqlite_master type main {}
SQLITE_UPDATE sqlite_master name main {}
SQLITE_UPDATE sqlite_master tbl_name main {}
SQLITE_UPDATE sqlite_master rootpage main {}
SQLITE_UPDATE sqlite_master sql main {}
SQLITE_READ sqlite_master ROWID main {}
SQLITE_READ sqlite_master name main {}
SQLITE_READ sqlite_master rootpage main {}
SQLITE_READ sqlite_master sql main {}
SQLITE_READ sqlite_master tbl_name main {}
}
do_test auth2-2.2 {
set ::authargs {}
db eval {
CREATE VIEW v2 AS SELECT x+y AS a, y+z AS b from t2;
}
set ::authargs
} {SQLITE_INSERT sqlite_master {} main {}
SQLITE_CREATE_VIEW v2 {} main {}
SQLITE_UPDATE sqlite_master type main {}
SQLITE_UPDATE sqlite_master name main {}
SQLITE_UPDATE sqlite_master tbl_name main {}
SQLITE_UPDATE sqlite_master rootpage main {}
SQLITE_UPDATE sqlite_master sql main {}
SQLITE_READ sqlite_master ROWID main {}
SQLITE_READ sqlite_master name main {}
SQLITE_READ sqlite_master rootpage main {}
SQLITE_READ sqlite_master sql main {}
SQLITE_READ sqlite_master tbl_name main {}
}
do_test auth2-2.3 {
set ::authargs {}
db eval {
SELECT a, b FROM v2;
}
set ::authargs
} {SQLITE_SELECT {} {} {} {}
SQLITE_READ v2 a main {}
SQLITE_READ v2 b main {}
SQLITE_SELECT {} {} {} v2
SQLITE_READ t2 x main v2
SQLITE_READ t2 y main v2
SQLITE_READ t2 y main v2
SQLITE_READ t2 z main v2
}
do_test auth2-2.4 {
db2 eval {
CREATE TABLE t3(p,q,r);
}
set ::authargs {}
db eval {
SELECT b, a FROM v2;
}
set ::authargs
} {SQLITE_SELECT {} {} {} {}
SQLITE_READ v2 b main {}
SQLITE_READ v2 a main {}
SQLITE_SELECT {} {} {} v2
SQLITE_READ t2 x main v2
SQLITE_READ t2 y main v2
SQLITE_READ t2 y main v2
SQLITE_READ t2 z main v2
SQLITE_SELECT {} {} {} {}
SQLITE_READ v2 b main {}
SQLITE_READ v2 a main {}
SQLITE_SELECT {} {} {} v2
SQLITE_READ t2 x main v2
SQLITE_READ t2 y main v2
SQLITE_READ t2 y main v2
SQLITE_READ t2 z main v2
}
db2 close
finish_test finish_test