diff options
author | danielk1977 <danielk1977@noemail.net> | 2008-12-30 06:24:58 +0000 |
---|---|---|
committer | danielk1977 <danielk1977@noemail.net> | 2008-12-30 06:24:58 +0000 |
commit | ab9b703fdef545ad3392b4743e173197eb358468 (patch) | |
tree | bc9e022f787eb21c424be43fc55a08676732fee2 /src | |
parent | 954701a0548298577d7f43024be7e5b285c9f494 (diff) | |
download | sqlite-ab9b703fdef545ad3392b4743e173197eb358468.tar.gz sqlite-ab9b703fdef545ad3392b4743e173197eb358468.zip |
Invoke the authorization callback when compiling SAVEPOINT, ROLLBACK TO and RELEASE commands. (CVS 6074)
FossilOrigin-Name: e49807b16f7f86d3f2290d6c1f7562f3db6330f9
Diffstat (limited to 'src')
-rw-r--r-- | src/build.c | 23 | ||||
-rw-r--r-- | src/sqlite.h.in | 5 | ||||
-rw-r--r-- | src/tclsqlite.c | 3 |
3 files changed, 18 insertions, 13 deletions
diff --git a/src/build.c b/src/build.c index 25aff4fe3..c61fbb340 100644 --- a/src/build.c +++ b/src/build.c @@ -22,7 +22,7 @@ ** COMMIT ** ROLLBACK ** -** $Id: build.c,v 1.510 2008/12/23 11:11:51 danielk1977 Exp $ +** $Id: build.c,v 1.511 2008/12/30 06:24:58 danielk1977 Exp $ */ #include "sqliteInt.h" #include <ctype.h> @@ -3316,15 +3316,18 @@ void sqlite3RollbackTransaction(Parse *pParse){ ** release or rollback an SQL savepoint. */ void sqlite3Savepoint(Parse *pParse, int op, Token *pName){ - Vdbe *v; - if( pParse->nErr || pParse->db->mallocFailed ) return; - - /* TODO: Invoke the authorization callback */ - - v = sqlite3GetVdbe(pParse); - if( v ){ - const char *zName = (const char *)pName->z; - sqlite3VdbeAddOp4(v, OP_Savepoint, op, 0, 0, zName, pName->n); + char *zName = sqlite3NameFromToken(pParse->db, pName); + if( zName ){ + Vdbe *v = sqlite3GetVdbe(pParse); +#ifndef SQLITE_OMIT_AUTHORIZATION + static const char *az[] = { "BEGIN", "RELEASE", "ROLLBACK" }; + assert( !SAVEPOINT_BEGIN && SAVEPOINT_RELEASE==1 && SAVEPOINT_ROLLBACK==2 ); +#endif + if( !v || sqlite3AuthCheck(pParse, SQLITE_SAVEPOINT, az[op], zName, 0) ){ + sqlite3DbFree(pParse->db, zName); + return; + } + sqlite3VdbeAddOp4(v, OP_Savepoint, op, 0, 0, zName, P4_DYNAMIC); } } diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 9970d7b1b..e0a9eb132 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -30,7 +30,7 @@ ** the version number) and changes its name to "sqlite3.h" as ** part of the build process. ** -** @(#) $Id: sqlite.h.in,v 1.420 2008/12/16 13:46:30 drh Exp $ +** @(#) $Id: sqlite.h.in,v 1.421 2008/12/30 06:24:58 danielk1977 Exp $ */ #ifndef _SQLITE3_H_ #define _SQLITE3_H_ @@ -2397,7 +2397,7 @@ int sqlite3_set_authorizer( #define SQLITE_PRAGMA 19 /* Pragma Name 1st arg or NULL */ #define SQLITE_READ 20 /* Table Name Column Name */ #define SQLITE_SELECT 21 /* NULL NULL */ -#define SQLITE_TRANSACTION 22 /* NULL NULL */ +#define SQLITE_TRANSACTION 22 /* Operation NULL */ #define SQLITE_UPDATE 23 /* Table Name Column Name */ #define SQLITE_ATTACH 24 /* Filename NULL */ #define SQLITE_DETACH 25 /* Database Name NULL */ @@ -2407,6 +2407,7 @@ int sqlite3_set_authorizer( #define SQLITE_CREATE_VTABLE 29 /* Table Name Module Name */ #define SQLITE_DROP_VTABLE 30 /* Table Name Module Name */ #define SQLITE_FUNCTION 31 /* NULL Function Name */ +#define SQLITE_SAVEPOINT 32 /* Operation Savepoint Name */ #define SQLITE_COPY 0 /* No longer used */ /* diff --git a/src/tclsqlite.c b/src/tclsqlite.c index 5541b0c76..e3fd44c1a 100644 --- a/src/tclsqlite.c +++ b/src/tclsqlite.c @@ -12,7 +12,7 @@ ** A TCL Interface to SQLite. Append this file to sqlite3.c and ** compile the whole thing to build a TCL-enabled version of SQLite. ** -** $Id: tclsqlite.c,v 1.231 2008/12/10 22:18:40 drh Exp $ +** $Id: tclsqlite.c,v 1.232 2008/12/30 06:24:58 danielk1977 Exp $ */ #include "tcl.h" #include <errno.h> @@ -809,6 +809,7 @@ static int auth_callback( case SQLITE_CREATE_VTABLE : zCode="SQLITE_CREATE_VTABLE"; break; case SQLITE_DROP_VTABLE : zCode="SQLITE_DROP_VTABLE"; break; case SQLITE_FUNCTION : zCode="SQLITE_FUNCTION"; break; + case SQLITE_SAVEPOINT : zCode="SQLITE_SAVEPOINT"; break; default : zCode="????"; break; } Tcl_DStringInit(&str); |