Chromium Code Reviews| Index: sql/connection_unittest.cc |
| diff --git a/sql/connection_unittest.cc b/sql/connection_unittest.cc |
| index 37cb7502aa4de3370ce88e16197ae2a39fae1d1d..7ce336f556a232bdb28a5bb04ddadf1d08a1ab2a 100644 |
| --- a/sql/connection_unittest.cc |
| +++ b/sql/connection_unittest.cc |
| @@ -559,4 +559,59 @@ TEST_F(SQLConnectionTest, Delete) { |
| EXPECT_FALSE(base::PathExists(journal)); |
| } |
| +#if defined(OS_POSIX) |
| +TEST_F(SQLConnectionTest, UserPermission) { |
| + // Cause the journal file to be created. If the default |
| + // journal_mode is changed back to DELETE, then parts of this test |
| + // will need to be updated. |
| + EXPECT_TRUE(db().Execute("CREATE TABLE x (x)")); |
| + |
| + base::FilePath journal(db_path().value() + FILE_PATH_LITERAL("-journal")); |
| + int mode; |
| + |
| + // If the umask is restrictive, the database files might be created |
| + // without group or other access. In that case, later tests |
| + // woudln't test anything real. |
|
Greg Billock
2013/07/15 23:26:06
wouldn't
But I'm not sure I understood this comme
Scott Hess - ex-Googler
2013/07/16 18:08:13
Usually, I would expect the default umask for OSX
|
| + ASSERT_TRUE(base::PathExists(db_path())); |
| + ASSERT_TRUE(base::PathExists(journal)); |
| + mode = file_util::FILE_PERMISSION_MASK; |
| + EXPECT_TRUE(file_util::GetPosixFilePermissions(db_path(), &mode)); |
| + ASSERT_NE((mode & file_util::FILE_PERMISSION_USER_MASK), mode); |
|
Greg Billock
2013/07/15 23:26:06
Will this pass for such a umask? Looks like not, c
Scott Hess - ex-Googler
2013/07/16 18:08:13
Changed so this won't happen.
|
| + mode = file_util::FILE_PERMISSION_MASK; |
| + EXPECT_TRUE(file_util::GetPosixFilePermissions(journal, &mode)); |
| + ASSERT_NE((mode & file_util::FILE_PERMISSION_USER_MASK), mode); |
| + |
| + // Re-open with restricted permissions and verify that the modes |
| + // changed for both the main database and the journal. |
| + db().Close(); |
| + db().set_restrict_to_user(); |
| + ASSERT_TRUE(db().Open(db_path())); |
| + ASSERT_TRUE(base::PathExists(db_path())); |
| + ASSERT_TRUE(base::PathExists(journal)); |
| + mode = file_util::FILE_PERMISSION_MASK; |
| + EXPECT_TRUE(file_util::GetPosixFilePermissions(db_path(), &mode)); |
| + ASSERT_EQ((mode & file_util::FILE_PERMISSION_USER_MASK), mode); |
| + mode = file_util::FILE_PERMISSION_MASK; |
| + EXPECT_TRUE(file_util::GetPosixFilePermissions(journal, &mode)); |
| + ASSERT_EQ((mode & file_util::FILE_PERMISSION_USER_MASK), mode); |
| + |
| + // Delete and re-create the database, the restriction should still apply. |
| + db().Close(); |
| + sql::Connection::Delete(db_path()); |
| + ASSERT_TRUE(db().Open(db_path())); |
| + ASSERT_TRUE(base::PathExists(db_path())); |
| + ASSERT_FALSE(base::PathExists(journal)); |
| + mode = file_util::FILE_PERMISSION_MASK; |
| + EXPECT_TRUE(file_util::GetPosixFilePermissions(db_path(), &mode)); |
| + ASSERT_EQ((mode & file_util::FILE_PERMISSION_USER_MASK), mode); |
| + |
| + // Verify that journal creation inherits the restriction. |
| + EXPECT_TRUE(db().Execute("CREATE TABLE x (x)")); |
| + ASSERT_TRUE(base::PathExists(journal)); |
| + mode = file_util::FILE_PERMISSION_MASK; |
| + EXPECT_TRUE(file_util::GetPosixFilePermissions(journal, &mode)); |
| + ASSERT_EQ((mode & file_util::FILE_PERMISSION_USER_MASK), mode); |
| +} |
| +#endif // defined(OS_POSIX) |
| + |
| } // namespace |