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#ifndef DatabaseAuthorizer_h 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define DatabaseAuthorizer_h 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 31ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#include "PlatformString.h" 32ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#include <wtf/Forward.h> 33d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <wtf/HashSet.h> 342bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/ThreadSafeRefCounted.h> 35f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/StringHash.h> 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern const int SQLAuthAllow; 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern const int SQLAuthIgnore; 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern const int SQLAuthDeny; 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 432bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass DatabaseAuthorizer : public ThreadSafeRefCounted<DatabaseAuthorizer> { 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 45f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 46f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch enum Permissions { 47f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch ReadWriteMask = 0, 48f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch ReadOnlyMask = 1 << 1, 49f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NoAccessMask = 1 << 2 50f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }; 51f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 52ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block static PassRefPtr<DatabaseAuthorizer> create(const String& databaseInfoTableName); 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int createTable(const String& tableName); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int createTempTable(const String& tableName); 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int dropTable(const String& tableName); 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int dropTempTable(const String& tableName); 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int allowAlterTable(const String& databaseName, const String& tableName); 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int createIndex(const String& indexName, const String& tableName); 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int createTempIndex(const String& indexName, const String& tableName); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int dropIndex(const String& indexName, const String& tableName); 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int dropTempIndex(const String& indexName, const String& tableName); 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int createTrigger(const String& triggerName, const String& tableName); 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int createTempTrigger(const String& triggerName, const String& tableName); 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int dropTrigger(const String& triggerName, const String& tableName); 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int dropTempTrigger(const String& triggerName, const String& tableName); 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 70231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block int createView(const String& viewName); 71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block int createTempView(const String& viewName); 72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block int dropView(const String& viewName); 73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block int dropTempView(const String& viewName); 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int createVTable(const String& tableName, const String& moduleName); 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int dropVTable(const String& tableName, const String& moduleName); 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int allowDelete(const String& tableName); 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int allowInsert(const String& tableName); 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int allowUpdate(const String& tableName, const String& columnName); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int allowTransaction(); 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int allowSelect() { return SQLAuthAllow; } 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int allowRead(const String& tableName, const String& columnName); 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 86231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block int allowReindex(const String& indexName); 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int allowAnalyze(const String& tableName); 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int allowFunction(const String& functionName); 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int allowPragma(const String& pragmaName, const String& firstArgument); 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int allowAttach(const String& filename); 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int allowDetach(const String& databaseName); 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void disable(); 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void enable(); 965f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void setReadOnly(); 97f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void setPermissions(int permissions); 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void reset(); 100545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void resetDeletes(); 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool lastActionWasInsert() const { return m_lastActionWasInsert; } 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool lastActionChangedDatabase() const { return m_lastActionChangedDatabase; } 104545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch bool hadDeletes() const { return m_hadDeletes; } 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 107ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block DatabaseAuthorizer(const String& databaseInfoTableName); 108d0825bca7fe65beaee391d30da42e937db621564Steve Block void addWhitelistedFunctions(); 109ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block int denyBasedOnTableName(const String&) const; 110545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch int updateDeletesBasedOnTableName(const String&); 111f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool allowWrite(); 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 113f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch int m_permissions; 1145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian bool m_securityEnabled : 1; 1155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian bool m_lastActionWasInsert : 1; 1165f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian bool m_lastActionChangedDatabase : 1; 117545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch bool m_hadDeletes : 1; 118d0825bca7fe65beaee391d30da42e937db621564Steve Block 119ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block const String m_databaseInfoTableName; 120ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 121d0825bca7fe65beaee391d30da42e937db621564Steve Block HashSet<String, CaseFoldingHash> m_whitelistedFunctions; 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // DatabaseAuthorizer_h 127