summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortommycli@chromium.org <tommycli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-07 18:33:22 +0000
committertommycli@chromium.org <tommycli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-07 18:33:22 +0000
commit45d5c60f9cfbd86cf6ff89d48aa80365ae534ba2 (patch)
treeb85de65ec2e49c866aa474c92f720bc3e272b47e
parente281263f331634d9b1aa68c1837ac5396b4d7001 (diff)
downloadchromium_src-45d5c60f9cfbd86cf6ff89d48aa80365ae534ba2.zip
chromium_src-45d5c60f9cfbd86cf6ff89d48aa80365ae534ba2.tar.gz
chromium_src-45d5c60f9cfbd86cf6ff89d48aa80365ae534ba2.tar.bz2
ChildProcessSecurityPolicy: Remove CanReadDirectory (special directory enumeration grant).
Per discussion with kinuko here (https://codereview.chromium.org/24631002/), there is no longer a need for a special directory enumeration permission grant. This is part of Step 4 of this refactoring plan: https://docs.google.com/a/google.com/document/d/1QGkGWuwgSuaRqovz4wyb0upqPKDVsgYOFKt44E7gmOE/edit?usp=sharing BUG=262142, 263150 Review URL: https://codereview.chromium.org/25601002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@227304 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--base/platform_file.h9
-rw-r--r--content/browser/child_process_security_policy_impl.cc16
-rw-r--r--content/browser/child_process_security_policy_impl.h8
-rw-r--r--content/browser/child_process_security_policy_unittest.cc34
-rw-r--r--content/browser/renderer_host/render_view_host_impl.cc6
-rw-r--r--content/browser/web_contents/web_contents_impl.cc2
-rw-r--r--webkit/browser/fileapi/file_system_operation_impl.cc5
7 files changed, 8 insertions, 72 deletions
diff --git a/base/platform_file.h b/base/platform_file.h
index e94c7ed..3d69ae7 100644
--- a/base/platform_file.h
+++ b/base/platform_file.h
@@ -44,14 +44,13 @@ enum PlatformFileFlags {
PLATFORM_FILE_DELETE_ON_CLOSE = 1 << 13,
PLATFORM_FILE_WRITE_ATTRIBUTES = 1 << 14, // Used on Windows only
- PLATFORM_FILE_ENUMERATE = 1 << 15, // May enumerate directory
- PLATFORM_FILE_SHARE_DELETE = 1 << 16, // Used on Windows only
+ PLATFORM_FILE_SHARE_DELETE = 1 << 15, // Used on Windows only
- PLATFORM_FILE_TERMINAL_DEVICE = 1 << 17, // Serial port flags
- PLATFORM_FILE_BACKUP_SEMANTICS = 1 << 18, // Used on Windows only
+ PLATFORM_FILE_TERMINAL_DEVICE = 1 << 16, // Serial port flags
+ PLATFORM_FILE_BACKUP_SEMANTICS = 1 << 17, // Used on Windows only
- PLATFORM_FILE_EXECUTE = 1 << 19, // Used on Windows only
+ PLATFORM_FILE_EXECUTE = 1 << 18, // Used on Windows only
};
// PLATFORM_FILE_ERROR_ACCESS_DENIED is returned when a call fails because of
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc
index b725f7e..291005e 100644
--- a/content/browser/child_process_security_policy_impl.cc
+++ b/content/browser/child_process_security_policy_impl.cc
@@ -49,10 +49,6 @@ const int kWriteFilePermissions =
const int kCreateNewFilePermissions =
base::PLATFORM_FILE_CREATE;
-const int kEnumerateDirectoryPermissions =
- kReadFilePermissions |
- base::PLATFORM_FILE_ENUMERATE;
-
const int kCreateOverwriteFilePermissions =
base::PLATFORM_FILE_OPEN_ALWAYS |
base::PLATFORM_FILE_CREATE_ALWAYS;
@@ -438,11 +434,6 @@ void ChildProcessSecurityPolicyImpl::GrantCreateReadWriteFile(
GrantPermissionsForFile(child_id, file, kCreateReadWriteFilePermissions);
}
-void ChildProcessSecurityPolicyImpl::GrantReadDirectory(
- int child_id, const base::FilePath& directory) {
- GrantPermissionsForFile(child_id, directory, kEnumerateDirectoryPermissions);
-}
-
void ChildProcessSecurityPolicyImpl::GrantPermissionsForFile(
int child_id, const base::FilePath& file, int permissions) {
base::AutoLock lock(lock_);
@@ -621,13 +612,6 @@ bool ChildProcessSecurityPolicyImpl::CanCreateReadWriteFile(
return HasPermissionsForFile(child_id, file, kCreateReadWriteFilePermissions);
}
-bool ChildProcessSecurityPolicyImpl::CanReadDirectory(
- int child_id, const base::FilePath& directory) {
- return HasPermissionsForFile(child_id,
- directory,
- kEnumerateDirectoryPermissions);
-}
-
bool ChildProcessSecurityPolicyImpl::CanReadFileSystem(
int child_id, const std::string& filesystem_id) {
return HasPermissionsForFileSystem(child_id,
diff --git a/content/browser/child_process_security_policy_impl.h b/content/browser/child_process_security_policy_impl.h
index b1f68e4..dec309c 100644
--- a/content/browser/child_process_security_policy_impl.h
+++ b/content/browser/child_process_security_policy_impl.h
@@ -102,10 +102,6 @@ class CONTENT_EXPORT ChildProcessSecurityPolicyImpl
// file:// URL, but not all urls of the file:// scheme.
void GrantRequestSpecificFileURL(int child_id, const GURL& url);
- // Grants the child process permission to enumerate all the files in
- // this directory and read those files.
- void GrantReadDirectory(int child_id, const base::FilePath& directory);
-
// Revokes all permissions granted to the given file.
void RevokeAllPermissionsForFile(int child_id, const base::FilePath& file);
@@ -133,10 +129,6 @@ class CONTENT_EXPORT ChildProcessSecurityPolicyImpl
const GURL& url,
ResourceType::Type resource_type);
- // Before servicing a child process's request to enumerate a directory
- // the browser should call this method to check for the capability.
- bool CanReadDirectory(int child_id, const base::FilePath& directory);
-
// Explicit permissions checks for FileSystemURL specified files.
bool CanReadFileSystemFile(int child_id, const fileapi::FileSystemURL& url);
bool CanWriteFileSystemFile(int child_id, const fileapi::FileSystemURL& url);
diff --git a/content/browser/child_process_security_policy_unittest.cc b/content/browser/child_process_security_policy_unittest.cc
index 9f574c5..2e68b18 100644
--- a/content/browser/child_process_security_policy_unittest.cc
+++ b/content/browser/child_process_security_policy_unittest.cc
@@ -448,40 +448,6 @@ TEST_F(ChildProcessSecurityPolicyTest, FilePermissionGrantingAndRevoking) {
p->Remove(kRendererID);
}
-TEST_F(ChildProcessSecurityPolicyTest, CanReadDirectories) {
- ChildProcessSecurityPolicyImpl* p =
- ChildProcessSecurityPolicyImpl::GetInstance();
-
- p->Add(kRendererID);
-
- EXPECT_FALSE(p->CanReadDirectory(kRendererID,
- base::FilePath(TEST_PATH("/etc/"))));
- p->GrantReadDirectory(kRendererID,
- base::FilePath(TEST_PATH("/etc/")));
- EXPECT_TRUE(p->CanReadDirectory(kRendererID,
- base::FilePath(TEST_PATH("/etc/"))));
- EXPECT_TRUE(p->CanReadFile(kRendererID,
- base::FilePath(TEST_PATH("/etc/passwd"))));
-
- p->Remove(kRendererID);
- p->Add(kRendererID);
-
- EXPECT_FALSE(p->CanReadDirectory(kRendererID,
- base::FilePath(TEST_PATH("/etc/"))));
- EXPECT_FALSE(p->CanReadFile(kRendererID,
- base::FilePath(TEST_PATH("/etc/passwd"))));
-
- // Just granting read permission as a file doesn't imply reading as a
- // directory.
- p->GrantReadFile(kRendererID, base::FilePath(TEST_PATH("/etc/")));
- EXPECT_TRUE(p->CanReadFile(kRendererID,
- base::FilePath(TEST_PATH("/etc/passwd"))));
- EXPECT_FALSE(p->CanReadDirectory(kRendererID,
- base::FilePath(TEST_PATH("/etc/"))));
-
- p->Remove(kRendererID);
-}
-
TEST_F(ChildProcessSecurityPolicyTest, FilePermissions) {
base::FilePath granted_file = base::FilePath(TEST_PATH("/home/joe"));
base::FilePath sibling_file = base::FilePath(TEST_PATH("/home/bob"));
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 11888c6..689ceed 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -627,12 +627,8 @@ void RenderViewHostImpl::DragTargetDragEnter(
// directories, but dragging a file would cause the read/write access to be
// overwritten with read-only access, making them impossible to delete or
// rename until the renderer was killed.
- if (!policy->CanReadFile(renderer_id, path)) {
+ if (!policy->CanReadFile(renderer_id, path))
policy->GrantReadFile(renderer_id, path);
- // Allow dragged directories to be enumerated by the child process.
- // Note that we can't tell a file from a directory at this point.
- policy->GrantReadDirectory(renderer_id, path);
- }
}
fileapi::IsolatedContext* isolated_context =
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index a3aa086..b2d98cf 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -2452,7 +2452,7 @@ void WebContentsImpl::OnEnumerateDirectory(int request_id,
ChildProcessSecurityPolicyImpl* policy =
ChildProcessSecurityPolicyImpl::GetInstance();
- if (policy->CanReadDirectory(GetRenderProcessHost()->GetID(), path))
+ if (policy->CanReadFile(GetRenderProcessHost()->GetID(), path))
delegate_->EnumerateDirectory(this, request_id, path);
}
diff --git a/webkit/browser/fileapi/file_system_operation_impl.cc b/webkit/browser/fileapi/file_system_operation_impl.cc
index 3a62679..3b4dbaf 100644
--- a/webkit/browser/fileapi/file_system_operation_impl.cc
+++ b/webkit/browser/fileapi/file_system_operation_impl.cc
@@ -204,9 +204,8 @@ void FileSystemOperationImpl::OpenFile(const FileSystemURL& url,
DCHECK(SetPendingOperationType(kOperationOpenFile));
peer_handle_ = peer_handle;
- if (file_flags & (
- (base::PLATFORM_FILE_ENUMERATE | base::PLATFORM_FILE_TEMPORARY |
- base::PLATFORM_FILE_HIDDEN))) {
+ if (file_flags &
+ (base::PLATFORM_FILE_TEMPORARY | base::PLATFORM_FILE_HIDDEN)) {
callback.Run(base::PLATFORM_FILE_ERROR_FAILED,
base::kInvalidPlatformFileValue,
base::Closure(),