18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "DatabaseAuthorizer.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 325abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#if ENABLE(DATABASE) 335abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformString.h" 35ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#include <wtf/PassRefPtr.h> 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve BlockPassRefPtr<DatabaseAuthorizer> DatabaseAuthorizer::create(const String& databaseInfoTableName) 40ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{ 41ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return adoptRef(new DatabaseAuthorizer(databaseInfoTableName)); 42ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block} 43ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 44ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve BlockDatabaseAuthorizer::DatabaseAuthorizer(const String& databaseInfoTableName) 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_securityEnabled(false) 46ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block , m_databaseInfoTableName(databaseInfoTableName) 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project reset(); 49d0825bca7fe65beaee391d30da42e937db621564Steve Block addWhitelistedFunctions(); 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid DatabaseAuthorizer::reset() 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_lastActionWasInsert = false; 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_lastActionChangedDatabase = false; 56f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_permissions = ReadWriteMask; 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid DatabaseAuthorizer::resetDeletes() 60545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 61545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_hadDeletes = false; 62545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 63545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 64d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid DatabaseAuthorizer::addWhitelistedFunctions() 65d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 66d0825bca7fe65beaee391d30da42e937db621564Steve Block // SQLite functions used to help implement some operations 67d0825bca7fe65beaee391d30da42e937db621564Steve Block // ALTER TABLE helpers 68d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("sqlite_rename_table"); 69d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("sqlite_rename_trigger"); 70d0825bca7fe65beaee391d30da42e937db621564Steve Block // GLOB helpers 71d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("glob"); 72d0825bca7fe65beaee391d30da42e937db621564Steve Block 73d0825bca7fe65beaee391d30da42e937db621564Steve Block // SQLite core functions 74d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("abs"); 75d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("changes"); 76d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("coalesce"); 77d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("glob"); 78d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("ifnull"); 79d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("hex"); 80d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("last_insert_rowid"); 81d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("length"); 82d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("like"); 83d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("lower"); 84d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("ltrim"); 85d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("max"); 86d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("min"); 87d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("nullif"); 88d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("quote"); 89d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("replace"); 90d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("round"); 91d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("rtrim"); 92d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("soundex"); 93d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("sqlite_source_id"); 94d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("sqlite_version"); 95d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("substr"); 96d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("total_changes"); 97d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("trim"); 98d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("typeof"); 99d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("upper"); 100d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("zeroblob"); 101d0825bca7fe65beaee391d30da42e937db621564Steve Block 102d0825bca7fe65beaee391d30da42e937db621564Steve Block // SQLite date and time functions 103d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("date"); 104d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("time"); 105d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("datetime"); 106d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("julianday"); 107d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("strftime"); 108d0825bca7fe65beaee391d30da42e937db621564Steve Block 109d0825bca7fe65beaee391d30da42e937db621564Steve Block // SQLite aggregate functions 110d0825bca7fe65beaee391d30da42e937db621564Steve Block // max() and min() are already in the list 111d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("avg"); 112d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("count"); 113d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("group_concat"); 114d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("sum"); 115d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("total"); 116d0825bca7fe65beaee391d30da42e937db621564Steve Block 117d0825bca7fe65beaee391d30da42e937db621564Steve Block // SQLite FTS functions 1185af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke m_whitelistedFunctions.add("match"); 119d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("snippet"); 120d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("offsets"); 121d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("optimize"); 122d0825bca7fe65beaee391d30da42e937db621564Steve Block 123d0825bca7fe65beaee391d30da42e937db621564Steve Block // SQLite ICU functions 124d0825bca7fe65beaee391d30da42e937db621564Steve Block // like(), lower() and upper() are already in the list 125d0825bca7fe65beaee391d30da42e937db621564Steve Block m_whitelistedFunctions.add("regexp"); 126d0825bca7fe65beaee391d30da42e937db621564Steve Block} 127d0825bca7fe65beaee391d30da42e937db621564Steve Block 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint DatabaseAuthorizer::createTable(const String& tableName) 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 130f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 1315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return SQLAuthDeny; 1325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_lastActionChangedDatabase = true; 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return denyBasedOnTableName(tableName); 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint DatabaseAuthorizer::createTempTable(const String& tableName) 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 139231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // SQLITE_CREATE_TEMP_TABLE results in a UPDATE operation, which is not 140231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // allowed in read-only transactions or private browsing, so we might as 141231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // well disallow SQLITE_CREATE_TEMP_TABLE in these cases 142f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 143231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return SQLAuthDeny; 144231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return denyBasedOnTableName(tableName); 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint DatabaseAuthorizer::dropTable(const String& tableName) 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 150f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 1515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return SQLAuthDeny; 1525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 153545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return updateDeletesBasedOnTableName(tableName); 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint DatabaseAuthorizer::dropTempTable(const String& tableName) 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 158231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // SQLITE_DROP_TEMP_TABLE results in a DELETE operation, which is not 159231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // allowed in read-only transactions or private browsing, so we might as 160231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // well disallow SQLITE_DROP_TEMP_TABLE in these cases 161f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 162231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return SQLAuthDeny; 163231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 164545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return updateDeletesBasedOnTableName(tableName); 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 167635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::allowAlterTable(const String&, const String& tableName) 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 169f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 1705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return SQLAuthDeny; 1715f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_lastActionChangedDatabase = true; 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return denyBasedOnTableName(tableName); 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 176635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::createIndex(const String&, const String& tableName) 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 178f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 1795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return SQLAuthDeny; 1805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_lastActionChangedDatabase = true; 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return denyBasedOnTableName(tableName); 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 185635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::createTempIndex(const String&, const String& tableName) 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 187231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // SQLITE_CREATE_TEMP_INDEX should result in a UPDATE or INSERT operation, 188231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // which is not allowed in read-only transactions or private browsing, 189231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // so we might as well disallow SQLITE_CREATE_TEMP_INDEX in these cases 190f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 191231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return SQLAuthDeny; 192231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return denyBasedOnTableName(tableName); 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 196635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::dropIndex(const String&, const String& tableName) 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 198f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 1995f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return SQLAuthDeny; 2005f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 201545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return updateDeletesBasedOnTableName(tableName); 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 204635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::dropTempIndex(const String&, const String& tableName) 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 206231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // SQLITE_DROP_TEMP_INDEX should result in a DELETE operation, which is 207231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // not allowed in read-only transactions or private browsing, so we might 208231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // as well disallow SQLITE_DROP_TEMP_INDEX in these cases 209f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 210231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return SQLAuthDeny; 211231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 212545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return updateDeletesBasedOnTableName(tableName); 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 215635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::createTrigger(const String&, const String& tableName) 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 217f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 2185f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return SQLAuthDeny; 2195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_lastActionChangedDatabase = true; 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return denyBasedOnTableName(tableName); 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 224635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::createTempTrigger(const String&, const String& tableName) 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 226231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // SQLITE_CREATE_TEMP_TRIGGER results in a INSERT operation, which is not 227231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // allowed in read-only transactions or private browsing, so we might as 228231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // well disallow SQLITE_CREATE_TEMP_TRIGGER in these cases 229f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 230231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return SQLAuthDeny; 231231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return denyBasedOnTableName(tableName); 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 235635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::dropTrigger(const String&, const String& tableName) 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 237f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 2385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return SQLAuthDeny; 2395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 240545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return updateDeletesBasedOnTableName(tableName); 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 243635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::dropTempTrigger(const String&, const String& tableName) 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 245231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // SQLITE_DROP_TEMP_TRIGGER results in a DELETE operation, which is not 246231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // allowed in read-only transactions or private browsing, so we might as 247231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // well disallow SQLITE_DROP_TEMP_TRIGGER in these cases 248f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 249231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return SQLAuthDeny; 250231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 251545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return updateDeletesBasedOnTableName(tableName); 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 254231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockint DatabaseAuthorizer::createView(const String&) 255231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 256f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return (!allowWrite() ? SQLAuthDeny : SQLAuthAllow); 257231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 258231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 259231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockint DatabaseAuthorizer::createTempView(const String&) 260231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 261231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // SQLITE_CREATE_TEMP_VIEW results in a UPDATE operation, which is not 262231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // allowed in read-only transactions or private browsing, so we might as 263231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // well disallow SQLITE_CREATE_TEMP_VIEW in these cases 264f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return (!allowWrite() ? SQLAuthDeny : SQLAuthAllow); 265231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 266231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 267231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockint DatabaseAuthorizer::dropView(const String&) 268231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 269f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 270545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return SQLAuthDeny; 271545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 272545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_hadDeletes = true; 273545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return SQLAuthAllow; 274231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 275231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 276231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockint DatabaseAuthorizer::dropTempView(const String&) 277231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 278231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // SQLITE_DROP_TEMP_VIEW results in a DELETE operation, which is not 279231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // allowed in read-only transactions or private browsing, so we might as 280231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // well disallow SQLITE_DROP_TEMP_VIEW in these cases 281f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 282545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return SQLAuthDeny; 283545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 284545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_hadDeletes = true; 285545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return SQLAuthAllow; 286231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 287231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 288692e5dbf12901edacf14812a6fae25462920af42Steve Blockint DatabaseAuthorizer::createVTable(const String& tableName, const String& moduleName) 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 290f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 2915f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return SQLAuthDeny; 2925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2935af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke // Allow only the FTS3 extension 294967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (!equalIgnoringCase(moduleName, "fts3")) 295692e5dbf12901edacf14812a6fae25462920af42Steve Block return SQLAuthDeny; 296692e5dbf12901edacf14812a6fae25462920af42Steve Block 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_lastActionChangedDatabase = true; 298692e5dbf12901edacf14812a6fae25462920af42Steve Block return denyBasedOnTableName(tableName); 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 301692e5dbf12901edacf14812a6fae25462920af42Steve Blockint DatabaseAuthorizer::dropVTable(const String& tableName, const String& moduleName) 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 303f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 3045f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return SQLAuthDeny; 3055f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 3065af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke // Allow only the FTS3 extension 307967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (!equalIgnoringCase(moduleName, "fts3")) 308692e5dbf12901edacf14812a6fae25462920af42Steve Block return SQLAuthDeny; 309692e5dbf12901edacf14812a6fae25462920af42Steve Block 310545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return updateDeletesBasedOnTableName(tableName); 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint DatabaseAuthorizer::allowDelete(const String& tableName) 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 315f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 3165f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return SQLAuthDeny; 3175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 318545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return updateDeletesBasedOnTableName(tableName); 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint DatabaseAuthorizer::allowInsert(const String& tableName) 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 323f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 3245f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return SQLAuthDeny; 3255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_lastActionChangedDatabase = true; 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_lastActionWasInsert = true; 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return denyBasedOnTableName(tableName); 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 331635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::allowUpdate(const String& tableName, const String&) 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 333f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!allowWrite()) 3345f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return SQLAuthDeny; 3355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_lastActionChangedDatabase = true; 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return denyBasedOnTableName(tableName); 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint DatabaseAuthorizer::allowTransaction() 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_securityEnabled ? SQLAuthDeny : SQLAuthAllow; 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 345635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::allowRead(const String& tableName, const String&) 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 347f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (m_permissions & NoAccessMask && m_securityEnabled) 348f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return SQLAuthDeny; 349f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return denyBasedOnTableName(tableName); 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 353231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockint DatabaseAuthorizer::allowReindex(const String&) 354231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 355f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return (!allowWrite() ? SQLAuthDeny : SQLAuthAllow); 356231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 357231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint DatabaseAuthorizer::allowAnalyze(const String& tableName) 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return denyBasedOnTableName(tableName); 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 363635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::allowPragma(const String&, const String&) 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_securityEnabled ? SQLAuthDeny : SQLAuthAllow; 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 368635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::allowAttach(const String&) 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_securityEnabled ? SQLAuthDeny : SQLAuthAllow; 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 373635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint DatabaseAuthorizer::allowDetach(const String&) 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_securityEnabled ? SQLAuthDeny : SQLAuthAllow; 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 378d0825bca7fe65beaee391d30da42e937db621564Steve Blockint DatabaseAuthorizer::allowFunction(const String& functionName) 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 380d0825bca7fe65beaee391d30da42e937db621564Steve Block if (m_securityEnabled && !m_whitelistedFunctions.contains(functionName)) 381d0825bca7fe65beaee391d30da42e937db621564Steve Block return SQLAuthDeny; 382d0825bca7fe65beaee391d30da42e937db621564Steve Block 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return SQLAuthAllow; 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid DatabaseAuthorizer::disable() 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_securityEnabled = false; 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid DatabaseAuthorizer::enable() 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_securityEnabled = true; 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 396f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochbool DatabaseAuthorizer::allowWrite() 397f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 398f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return !(m_securityEnabled && (m_permissions & ReadOnlyMask || m_permissions & NoAccessMask)); 399f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 400f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 4015f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid DatabaseAuthorizer::setReadOnly() 4025f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 403f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_permissions |= ReadOnlyMask; 404f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 405f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 406f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid DatabaseAuthorizer::setPermissions(int permissions) 407f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 408f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_permissions = permissions; 4095f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 4105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 411ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockint DatabaseAuthorizer::denyBasedOnTableName(const String& tableName) const 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_securityEnabled) 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return SQLAuthAllow; 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Sadly, normal creates and drops end up affecting sqlite_master in an authorizer callback, so 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // it will be tough to enforce all of the following policies 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //if (equalIgnoringCase(tableName, "sqlite_master") || equalIgnoringCase(tableName, "sqlite_temp_master") || 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // equalIgnoringCase(tableName, "sqlite_sequence") || equalIgnoringCase(tableName, Database::databaseInfoTableName())) 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // return SQLAuthDeny; 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 422ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (equalIgnoringCase(tableName, m_databaseInfoTableName)) 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return SQLAuthDeny; 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return SQLAuthAllow; 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 428545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochint DatabaseAuthorizer::updateDeletesBasedOnTableName(const String& tableName) 429545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 430545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch int allow = denyBasedOnTableName(tableName); 431545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (allow) 432545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_hadDeletes = true; 433545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return allow; 434545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 435545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 4375abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 4385abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#endif 439