Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Unified Diff: sql/connection.cc

Issue 5125579611308032: [sql] Allow restricting database to user read access. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: file_util::PathExists -> base::PathExists Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sql/connection.cc
diff --git a/sql/connection.cc b/sql/connection.cc
index ac8c0cd095b00ea666cb4c66a0fbce9b0e475984..ac898ea0818e048f877eb7be8f0a22f28b0485ca 100644
--- a/sql/connection.cc
+++ b/sql/connection.cc
@@ -168,6 +168,7 @@ Connection::Connection()
page_size_(0),
cache_size_(0),
exclusive_locking_(false),
+ restrict_to_user_(false),
transaction_nesting_(0),
needs_rollback_(false),
in_memory_(false),
@@ -728,6 +729,30 @@ bool Connection::OpenInternal(const std::string& file_name) {
return false;
}
+ // TODO(shess): OS_WIN support?
+#if defined(OS_POSIX)
Greg Billock 2013/07/15 23:26:06 Should this be treated as a DB version upgrade? Th
Scott Hess - ex-Googler 2013/07/16 18:08:13 Not sure what you mean. If it results in not bein
+ if (restrict_to_user_) {
+ DCHECK_NE(file_name, std::string(":memory"));
Jorge Lucangeli Obes 2013/07/11 23:00:43 Does ":memory" mean a memory-backed database?
Scott Hess - ex-Googler 2013/07/15 20:50:08 Yeah, sql::Connection has separate Open() and Open
+ base::FilePath file_path(file_name);
+ int mode = 0;
+ // TODO(shess): Arguably, failure to retrieve and change
+ // permissions should be fatal if the file exists.
+ if (file_util::GetPosixFilePermissions(file_path, &mode)) {
+ mode &= file_util::FILE_PERMISSION_USER_MASK;
Greg Billock 2013/07/15 23:26:06 do we need IXUSR? How about just mode = ... ? We'
Scott Hess - ex-Googler 2013/07/16 18:08:13 I'm aiming for "Adjust what SQLite has done after
+ file_util::SetPosixFilePermissions(file_path, mode);
+
+ // SQLite sets the permissions on these files from the main
+ // database on create. Set them here in case they already exist
+ // at this point. Failure to set these permissions should not
+ // be fatal unless the file doesn't exist.
+ base::FilePath journal_path(file_name + FILE_PATH_LITERAL("-journal"));
+ base::FilePath wal_path(file_name + FILE_PATH_LITERAL("-wal"));
+ file_util::SetPosixFilePermissions(journal_path, mode);
Greg Billock 2013/07/15 23:26:06 Do we need the same "if Get { Set }" formulation h
Scott Hess - ex-Googler 2013/07/16 18:08:13 The SQLite code uses the main database permissions
+ file_util::SetPosixFilePermissions(wal_path, mode);
+ }
+ }
+#endif // defined(OS_POSIX)
+
// SQLite uses a lookaside buffer to improve performance of small mallocs.
// Chromium already depends on small mallocs being efficient, so we disable
// this to avoid the extra memory overhead.
« no previous file with comments | « sql/connection.h ('k') | sql/connection_unittest.cc » ('j') | sql/connection_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698