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

Side by Side Diff: chrome/common/sandbox_mac.mm

Issue 341033: Sandbox Worker process on the Mac. (Closed)
Patch Set: Fix latest round of comments Created 11 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « chrome/common/sandbox_mac.h ('k') | chrome/renderer/renderer_main_platform_delegate_mac.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/common/sandbox_mac.h" 5 #include "chrome/common/sandbox_mac.h"
6 6
7 #include "base/debug_util.h" 7 #include "base/debug_util.h"
8 8
9 #import <Cocoa/Cocoa.h> 9 #import <Cocoa/Cocoa.h>
10 extern "C" { 10 extern "C" {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 NSData* data = [NSData dataWithBytes:png_header 77 NSData* data = [NSData dataWithBytes:png_header
78 length:arraysize(png_header)]; 78 length:arraysize(png_header)];
79 scoped_cftyperef<CGImageSourceRef> img( 79 scoped_cftyperef<CGImageSourceRef> img(
80 CGImageSourceCreateWithData((CFDataRef)data, 80 CGImageSourceCreateWithData((CFDataRef)data,
81 NULL)); 81 NULL));
82 CGImageSourceGetStatus(img); 82 CGImageSourceGetStatus(img);
83 } 83 }
84 } 84 }
85 85
86 // Turns on the OS X sandbox for this process. 86 // Turns on the OS X sandbox for this process.
87 bool EnableSandbox() { 87 bool EnableSandbox(SandboxProcessType sandbox_type,
88 // For the renderer, we give it a custom sandbox to lock things down as 88 const FilePath& allowed_dir) {
89 // tightly as possible, while still enabling drawing. 89 // Sanity - currently only SANDBOX_TYPE_UTILITY supports a directory being
90 // passed in.
91 if (sandbox_type != SANDBOX_TYPE_UTILITY) {
92 DCHECK(allowed_dir.empty())
93 << "Only SANDBOX_TYPE_UTILITY allows a custom directory parameter.";
94 } else {
95 DCHECK(!allowed_dir.empty())
96 << "SANDBOX_TYPE_UTILITY "
97 << "needs a custom directory parameter, but an empty one was provided.";
98 }
99
100 // We use a custom sandbox definition file to lock things down as
101 // tightly as possible.
102 // TODO(jeremy): Look at using include syntax to unify common parts of sandbox
103 // definition files.
104 NSString* sandbox_config_filename = nil;
105 switch (sandbox_type) {
106 case SANDBOX_TYPE_RENDERER:
107 sandbox_config_filename = @"renderer";
108 break;
109 case SANDBOX_TYPE_WORKER:
110 sandbox_config_filename = @"worker";
111 break;
112 case SANDBOX_TYPE_UTILITY:
113 sandbox_config_filename = @"utility";
114 break;
115 default:
116 NOTREACHED();
117 return false;
118 }
119
90 NSString* sandbox_profile_path = 120 NSString* sandbox_profile_path =
91 [mac_util::MainAppBundle() pathForResource:@"renderer" ofType:@"sb"]; 121 [mac_util::MainAppBundle() pathForResource:sandbox_config_filename
122 ofType:@"sb"];
92 NSString* sandbox_data = [NSString 123 NSString* sandbox_data = [NSString
93 stringWithContentsOfFile:sandbox_profile_path 124 stringWithContentsOfFile:sandbox_profile_path
94 encoding:NSUTF8StringEncoding 125 encoding:NSUTF8StringEncoding
95 error:nil]; 126 error:nil];
96 127
97 if (!sandbox_data) { 128 if (!sandbox_data) {
98 LOG(ERROR) << "Failed to find the sandbox profile on disk"; 129 LOG(ERROR) << "Failed to find the sandbox profile on disk";
99 return false; 130 return false;
100 } 131 }
101 132
102 // Enable verbose logging if enabled on the command line. 133 // Enable verbose logging if enabled on the command line.
103 // (see renderer.sb for details). 134 // (see renderer.sb for details).
104 const CommandLine *command_line = CommandLine::ForCurrentProcess(); 135 const CommandLine *command_line = CommandLine::ForCurrentProcess();
105 if (command_line->HasSwitch(switches::kEnableSandboxLogging)) { 136 if (command_line->HasSwitch(switches::kEnableSandboxLogging)) {
106 sandbox_data = [sandbox_data 137 sandbox_data = [sandbox_data
107 stringByReplacingOccurrencesOfString:@";ENABLE_LOGGING" 138 stringByReplacingOccurrencesOfString:@";ENABLE_LOGGING"
108 withString:@""]; 139 withString:@""];
109 } 140 }
110 141
142 if (!allowed_dir.empty()) {
143 NSString* allowed_dir_ns = base::SysUTF8ToNSString(allowed_dir.value());
144 sandbox_data = [sandbox_data
145 stringByReplacingOccurrencesOfString:@"DIR_TO_ALLOW_ACCESS"
146 withString:allowed_dir_ns];
147 }
148
111 int32 major_version, minor_version, bugfix_version; 149 int32 major_version, minor_version, bugfix_version;
112 base::SysInfo::OperatingSystemVersionNumbers(&major_version, 150 base::SysInfo::OperatingSystemVersionNumbers(&major_version,
113 &minor_version, &bugfix_version); 151 &minor_version, &bugfix_version);
114 152
115 if (major_version > 10 || (major_version == 10 && minor_version >= 6)) { 153 if (major_version > 10 || (major_version == 10 && minor_version >= 6)) {
116 // 10.6-only Sandbox rules. 154 // 10.6-only Sandbox rules.
117 sandbox_data = [sandbox_data 155 sandbox_data = [sandbox_data
118 stringByReplacingOccurrencesOfString:@";10.6_ONLY" 156 stringByReplacingOccurrencesOfString:@";10.6_ONLY"
119 withString:@""]; 157 withString:@""];
120 // Splice the path of the user's home directory into the sandbox profile 158 // Splice the path of the user's home directory into the sandbox profile
(...skipping 15 matching lines...) Expand all
136 int error = sandbox_init([sandbox_data UTF8String], 0, &error_buff); 174 int error = sandbox_init([sandbox_data UTF8String], 0, &error_buff);
137 bool success = (error == 0 && error_buff == NULL); 175 bool success = (error == 0 && error_buff == NULL);
138 if (error == -1) { 176 if (error == -1) {
139 LOG(ERROR) << "Failed to Initialize Sandbox: " << error_buff; 177 LOG(ERROR) << "Failed to Initialize Sandbox: " << error_buff;
140 } 178 }
141 sandbox_free_error(error_buff); 179 sandbox_free_error(error_buff);
142 return success; 180 return success;
143 } 181 }
144 182
145 } // namespace sandbox 183 } // namespace sandbox
OLDNEW
« no previous file with comments | « chrome/common/sandbox_mac.h ('k') | chrome/renderer/renderer_main_platform_delegate_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698