Index: third_party/sqlite/src/src/auth.c |
diff --git a/third_party/sqlite/src/src/auth.c b/third_party/sqlite/src/src/auth.c |
index ec35142572827739238323eb0a257b30ea9b47fc..d38bb836a784fbfab6ab7b03d4e6dd43edc41fa7 100644 |
--- a/third_party/sqlite/src/src/auth.c |
+++ b/third_party/sqlite/src/src/auth.c |
@@ -13,8 +13,6 @@ |
** API. This facility is an optional feature of the library. Embedded |
** systems that do not need this facility may omit it by recompiling |
** the library with -DSQLITE_OMIT_AUTHORIZATION=1 |
-** |
-** $Id: auth.c,v 1.32 2009/07/02 18:40:35 danielk1977 Exp $ |
*/ |
#include "sqliteInt.h" |
@@ -92,6 +90,39 @@ static void sqliteAuthBadReturnCode(Parse *pParse){ |
} |
/* |
+** Invoke the authorization callback for permission to read column zCol from |
+** table zTab in database zDb. This function assumes that an authorization |
+** callback has been registered (i.e. that sqlite3.xAuth is not NULL). |
+** |
+** If SQLITE_IGNORE is returned and pExpr is not NULL, then pExpr is changed |
+** to an SQL NULL expression. Otherwise, if pExpr is NULL, then SQLITE_IGNORE |
+** is treated as SQLITE_DENY. In this case an error is left in pParse. |
+*/ |
+int sqlite3AuthReadCol( |
+ Parse *pParse, /* The parser context */ |
+ const char *zTab, /* Table name */ |
+ const char *zCol, /* Column name */ |
+ int iDb /* Index of containing database. */ |
+){ |
+ sqlite3 *db = pParse->db; /* Database handle */ |
+ char *zDb = db->aDb[iDb].zName; /* Name of attached database */ |
+ int rc; /* Auth callback return code */ |
+ |
+ rc = db->xAuth(db->pAuthArg, SQLITE_READ, zTab,zCol,zDb,pParse->zAuthContext); |
+ if( rc==SQLITE_DENY ){ |
+ if( db->nDb>2 || iDb!=0 ){ |
+ sqlite3ErrorMsg(pParse, "access to %s.%s.%s is prohibited",zDb,zTab,zCol); |
+ }else{ |
+ sqlite3ErrorMsg(pParse, "access to %s.%s is prohibited", zTab, zCol); |
+ } |
+ pParse->rc = SQLITE_AUTH; |
+ }else if( rc!=SQLITE_IGNORE && rc!=SQLITE_OK ){ |
+ sqliteAuthBadReturnCode(pParse); |
+ } |
+ return rc; |
+} |
+ |
+/* |
** The pExpr should be a TK_COLUMN expression. The table referred to |
** is in pTabList or else it is the NEW or OLD table of a trigger. |
** Check to see if it is OK to read this particular column. |
@@ -107,11 +138,9 @@ void sqlite3AuthRead( |
SrcList *pTabList /* All table that pExpr might refer to */ |
){ |
sqlite3 *db = pParse->db; |
- int rc; |
Table *pTab = 0; /* The table being read */ |
const char *zCol; /* Name of the column of the table */ |
int iSrc; /* Index in pTabList->a[] of table being read */ |
- const char *zDBase; /* Name of database being accessed */ |
int iDb; /* The index of the database the expression refers to */ |
int iCol; /* Index of column in table */ |
@@ -148,21 +177,8 @@ void sqlite3AuthRead( |
zCol = "ROWID"; |
} |
assert( iDb>=0 && iDb<db->nDb ); |
- zDBase = db->aDb[iDb].zName; |
- rc = db->xAuth(db->pAuthArg, SQLITE_READ, pTab->zName, zCol, zDBase, |
- pParse->zAuthContext); |
- if( rc==SQLITE_IGNORE ){ |
+ if( SQLITE_IGNORE==sqlite3AuthReadCol(pParse, pTab->zName, zCol, iDb) ){ |
pExpr->op = TK_NULL; |
- }else if( rc==SQLITE_DENY ){ |
- if( db->nDb>2 || iDb!=0 ){ |
- sqlite3ErrorMsg(pParse, "access to %s.%s.%s is prohibited", |
- zDBase, pTab->zName, zCol); |
- }else{ |
- sqlite3ErrorMsg(pParse, "access to %s.%s is prohibited",pTab->zName,zCol); |
- } |
- pParse->rc = SQLITE_AUTH; |
- }else if( rc!=SQLITE_OK ){ |
- sqliteAuthBadReturnCode(pParse); |
} |
} |