Changeset 140486 in webkit
- Timestamp:
- Jan 22, 2013, 4:35:53 PM (14 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 2 added
- 14 edited
-
ChangeLog (modified) (1 diff)
-
NetworkProcess/NetworkProcess.cpp (modified) (1 diff)
-
NetworkProcess/NetworkProcess.h (modified) (1 diff)
-
NetworkProcess/mac/NetworkProcessMac.mm (modified) (3 diffs)
-
PluginProcess/PluginProcess.h (modified) (1 diff)
-
PluginProcess/mac/PluginProcessMac.mm (modified) (1 diff)
-
Shared/ChildProcess.cpp (modified) (1 diff)
-
Shared/ChildProcess.h (modified) (3 diffs)
-
Shared/SandboxInitializationParameters.h (added)
-
Shared/mac/ChildProcessMac.mm (modified) (2 diffs)
-
Shared/mac/SandboxInitialiationParametersMac.mm (added)
-
SharedWorkerProcess/mac/SharedWorkerProcessMac.mm (modified) (2 diffs)
-
WebKit2.xcodeproj/project.pbxproj (modified) (6 diffs)
-
WebProcess/WebProcess.cpp (modified) (1 diff)
-
WebProcess/WebProcess.h (modified) (1 diff)
-
WebProcess/mac/WebProcessMac.mm (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r140469 r140486 1 2013-01-22 Alexey Proskuryakov <ap@apple.com> 2 3 Move sandbox initialization to ChildProcess 4 https://bugs.webkit.org/show_bug.cgi?id=107486 5 6 Reviewed by Sam Weinig. 7 8 * NetworkProcess/NetworkProcess.h: 9 * NetworkProcess/NetworkProcess.cpp: 10 (WebKit::NetworkProcess::initializeSandbox): Removed. We no longer need this function 11 to be implemented in each process type. 12 13 * NetworkProcess/mac/NetworkProcessMac.mm: 14 (WebKit::initializeSandbox): Removed a custom (and incomplete) implementation. 15 (WebKit::NetworkProcess::processUpdateSandboxInitializationParameters): Clear 16 sandbox profile path in parameters, telling ChildProcess to not enter a sandbox. 17 18 * PluginProcess/PluginProcess.h: 19 * PluginProcess/mac/PluginProcessMac.mm: 20 Added FIXMEs, saying that we should switch to ChildProcess implementation. 21 22 * Shared/ChildProcess.cpp: Dummy implementations for other platforms. 23 24 * Shared/ChildProcess.h: Added processUpdateSandboxInitializationParameters, which 25 child processes will override to change sandbox initialization parameters. 26 27 * Shared/SandboxInitializationParameters.h: Added. 28 * Shared/mac/SandboxInitialiationParametersMac.mm: Added. 29 Abstracts out sandbox parameter vector for coding safety. Encapsulates other 30 things that subclasses will want to do differently. 31 32 * Shared/mac/ChildProcessMac.mm: (WebKit::ChildProcess::initializeSandbox): 33 Added a shared implementation, based largely on WebProcess version. 34 35 * SharedWorkerProcess/mac/SharedWorkerProcessMac.mm: Removed custom sandboxing code. 36 37 * WebKit2.xcodeproj/project.pbxproj: Added SandboxInitializationParameters files. 38 39 * WebProcess/WebProcess.cpp: 40 * WebProcess/WebProcess.h: 41 Updated dummy implementations to match ChildProcess. 42 43 * WebProcess/mac/WebProcessMac.mm: 44 (WebKit): Moved sandboxing code to ChildProcess. 45 (WebKit::WebProcess::processUpdateSandboxInitializationParameters): Override 46 profile path, because default one doesn't work for WebProcessService. 47 1 48 2013-01-22 Joseph Pecoraro <pecoraro@apple.com> 2 49 -
trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp
r139066 r140486 217 217 } 218 218 219 void NetworkProcess:: initializeSandbox(const ChildProcessInitializationParameters&)219 void NetworkProcess::processUpdateSandboxInitializationParameters(const ChildProcessInitializationParameters&, SandboxInitializationParameters&) 220 220 { 221 221 } -
trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h
r139066 r140486 79 79 // ChildProcess 80 80 virtual void initializeProcessName(const ChildProcessInitializationParameters&) OVERRIDE; 81 virtual void initializeSandbox(const ChildProcessInitializationParameters&) OVERRIDE;82 81 virtual void initializeConnection(CoreIPC::Connection*) OVERRIDE; 83 82 virtual bool shouldTerminate() OVERRIDE; 83 virtual void processUpdateSandboxInitializationParameters(const ChildProcessInitializationParameters&, SandboxInitializationParameters&) OVERRIDE; 84 84 85 85 // CoreIPC::Connection::Client -
trunk/Source/WebKit2/NetworkProcess/mac/NetworkProcessMac.mm
r139241 r140486 32 32 #import "PlatformCertificateInfo.h" 33 33 #import "SandboxExtension.h" 34 #import "SandboxInitializationParameters.h" 34 35 #import "StringUtilities.h" 35 36 #import <WebCore/FileSystem.h> … … 62 63 NSString *applicationName = [NSString stringWithFormat:WEB_UI_STRING("%@ Networking", "visible name of the network process. The argument is the application name."), (NSString *)parameters.uiProcessName]; 63 64 WKSetVisibleApplicationName((CFStringRef)applicationName); 64 }65 }66 67 void NetworkProcess::initializeSandbox(const ChildProcessInitializationParameters& parameters)68 {69 [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[NSBundle mainBundle] bundlePath]];70 71 #if DEBUG_BYPASS_SANDBOX72 WTFLogAlways("Bypassing network process sandbox.\n");73 return;74 #endif75 76 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 108077 // Use private temporary and cache directories.78 String systemDirectorySuffix = "com.apple.WebKit.NetworkProcess+" + parameters.clientIdentifier;79 setenv("DIRHELPER_USER_DIR_SUFFIX", fileSystemRepresentation(systemDirectorySuffix).data(), 0);80 char temporaryDirectory[PATH_MAX];81 if (!confstr(_CS_DARWIN_USER_TEMP_DIR, temporaryDirectory, sizeof(temporaryDirectory))) {82 WTFLogAlways("NetworkProcess: couldn't retrieve private temporary directory path: %d\n", errno);83 exit(EX_NOPERM);84 }85 setenv("TMPDIR", temporaryDirectory, 1);86 #endif87 88 // FIXME (NetworkProcess): <rdar://problem/12772605> Actually initialize the sandbox.89 90 // This will override LSFileQuarantineEnabled from Info.plist unless sandbox quarantine is globally disabled.91 OSStatus error = WKEnableSandboxStyleFileQuarantine();92 if (error) {93 WTFLogAlways("NetworkProcess: Couldn't enable sandbox style file quarantine: %ld\n", (long)error);94 exit(EX_NOPERM);95 65 } 96 66 } … … 209 179 } 210 180 181 // FIXME: Remove when the process has a profile. 182 void NetworkProcess::processUpdateSandboxInitializationParameters(const ChildProcessInitializationParameters&, SandboxInitializationParameters& parameters) 183 { 184 parameters.setSandboxProfilePath(String()); 185 } 186 211 187 } // namespace WebKit 212 188 -
trunk/Source/WebKit2/PluginProcess/PluginProcess.h
r139076 r140486 77 77 virtual bool shouldTerminate() OVERRIDE; 78 78 79 // FIXME: PluginProcess should switch to common code for sandbox initialization. 80 virtual void initializeSandbox(const ChildProcessInitializationParameters&) OVERRIDE { } 81 79 82 void platformInitializeProcess(const ChildProcessInitializationParameters&); 80 83 -
trunk/Source/WebKit2/PluginProcess/mac/PluginProcessMac.mm
r140274 r140486 353 353 WKSetVisibleApplicationName((CFStringRef)applicationName); 354 354 355 // FIXME: Use ChildProcess::initializeSandbox. 355 356 WebKit::initializeSandbox(m_pluginPath, parameters.sandboxProfileDirectoryPath); 356 357 -
trunk/Source/WebKit2/Shared/ChildProcess.cpp
r140351 r140486 87 87 } 88 88 89 #if !PLATFORM(MAC) 89 90 void ChildProcess::initializeSandbox(const ChildProcessInitializationParameters&) 91 { 92 } 93 #endif 94 95 void ChildProcess::processUpdateSandboxInitializationParameters(const ChildProcessInitializationParameters&, SandboxInitializationParameters&) 90 96 { 91 97 } -
trunk/Source/WebKit2/Shared/ChildProcess.h
r139257 r140486 35 35 36 36 namespace WebKit { 37 38 class SandboxInitializationParameters; 37 39 38 40 struct ChildProcessInitializationParameters { … … 78 80 virtual void initializeProcess(const ChildProcessInitializationParameters&); 79 81 virtual void initializeProcessName(const ChildProcessInitializationParameters&); 80 virtual void initializeSandbox(const ChildProcessInitializationParameters&);81 82 virtual void initializeConnection(CoreIPC::Connection*); 82 83 … … 88 89 89 90 void platformInitialize(); 91 // FIXME: This function is virtual only because PluginProcess needs to bypass it. It should switch to common code. 92 virtual void initializeSandbox(const ChildProcessInitializationParameters&); 93 virtual void processUpdateSandboxInitializationParameters(const ChildProcessInitializationParameters&, SandboxInitializationParameters&); 90 94 91 95 // The timeout, in seconds, before this process will be terminated if termination -
trunk/Source/WebKit2/Shared/mac/ChildProcessMac.mm
r139888 r140486 27 27 #import "ChildProcess.h" 28 28 29 #import "SandboxInitializationParameters.h" 29 30 #import "WebKitSystemInterface.h" 31 #import <WebCore/FileSystem.h> 30 32 #import <mach/task.h> 33 #import <pwd.h> 34 #import <stdlib.h> 35 #import <sysexits.h> 36 37 // We have to #undef __APPLE_API_PRIVATE to prevent sandbox.h from looking for a header file that does not exist (<rdar://problem/9679211>). 38 #undef __APPLE_API_PRIVATE 39 #import <sandbox.h> 40 41 #define SANDBOX_NAMED_EXTERNAL 0x0003 42 extern "C" int sandbox_init_with_parameters(const char *profile, uint64_t flags, const char *const parameters[], char **errorbuf); 43 44 using namespace WebCore; 31 45 32 46 namespace WebKit { … … 65 79 } 66 80 81 void ChildProcess::initializeSandbox(const ChildProcessInitializationParameters& parameters) 82 { 83 [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[NSBundle mainBundle] bundlePath]]; 84 85 SandboxInitializationParameters sandboxParameters; 86 87 NSBundle *webkit2Bundle = [NSBundle bundleForClass:NSClassFromString(@"WKView")]; 88 NSString *defaultProfilePath = [webkit2Bundle pathForResource:[[NSBundle mainBundle] bundleIdentifier] ofType:@"sb"]; 89 90 sandboxParameters.setSandboxProfilePath(defaultProfilePath); 91 92 String defaultSystemDirectorySuffix = [[NSBundle mainBundle] bundleIdentifier] + parameters.clientIdentifier; 93 sandboxParameters.setSystemDirectorySuffix(defaultSystemDirectorySuffix); 94 95 sandboxParameters.addPathParameter("WEBKIT2_FRAMEWORK_DIR", [[webkit2Bundle bundlePath] stringByDeletingLastPathComponent]); 96 sandboxParameters.addConfDirectoryParameter("DARWIN_USER_TEMP_DIR", _CS_DARWIN_USER_TEMP_DIR); 97 sandboxParameters.addConfDirectoryParameter("DARWIN_USER_CACHE_DIR", _CS_DARWIN_USER_CACHE_DIR); 98 99 char buffer[4096]; 100 int bufferSize = sizeof(buffer); 101 struct passwd pwd; 102 struct passwd* result = 0; 103 if (getpwuid_r(getuid(), &pwd, buffer, bufferSize, &result) || !result) { 104 WTFLogAlways("%s: Couldn't find home directory\n", getprogname()); 105 exit(EX_NOPERM); 106 } 107 108 sandboxParameters.addPathParameter("HOME_DIR", pwd.pw_dir); 109 110 processUpdateSandboxInitializationParameters(parameters, sandboxParameters); 111 112 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1080 113 // Use private temporary and cache directories. 114 setenv("DIRHELPER_USER_DIR_SUFFIX", fileSystemRepresentation(sandboxParameters.systemDirectorySuffix()).data(), 0); 115 char temporaryDirectory[PATH_MAX]; 116 if (!confstr(_CS_DARWIN_USER_TEMP_DIR, temporaryDirectory, sizeof(temporaryDirectory))) { 117 WTFLogAlways("%s: couldn't retrieve private temporary directory path: %d\n", getprogname(), errno); 118 exit(EX_NOPERM); 119 } 120 setenv("TMPDIR", temporaryDirectory, 1); 121 #endif 122 123 if (!sandboxParameters.sandboxProfilePath().isEmpty()) { 124 CString profilePath = fileSystemRepresentation(sandboxParameters.sandboxProfilePath()); 125 char* errorBuf; 126 if (sandbox_init_with_parameters(profilePath.data(), SANDBOX_NAMED_EXTERNAL, sandboxParameters.namedParameterArray(), &errorBuf)) { 127 WTFLogAlways("%s: Couldn't initialize sandbox profile [%s], error '%s'\n", getprogname(), profilePath.data(), errorBuf); 128 for (size_t i = 0, count = sandboxParameters.count(); i != count; ++i) 129 WTFLogAlways("%s=%s\n", sandboxParameters.name(i), sandboxParameters.value(i)); 130 exit(EX_NOPERM); 131 } 132 } else if (!sandboxParameters.sandboxProfile().isEmpty()) { 133 char* errorBuf; 134 if (sandbox_init_with_parameters(sandboxParameters.sandboxProfile().utf8().data(), 0, sandboxParameters.namedParameterArray(), &errorBuf)) { 135 WTFLogAlways("%s: Couldn't initialize sandbox profile, error '%s'\n", getprogname(), errorBuf); 136 for (size_t i = 0, count = sandboxParameters.count(); i != count; ++i) 137 WTFLogAlways("%s=%s\n", sandboxParameters.name(i), sandboxParameters.value(i)); 138 exit(EX_NOPERM); 139 } 140 } 141 142 // This will override LSFileQuarantineEnabled from Info.plist unless sandbox quarantine is globally disabled. 143 OSStatus error = WKEnableSandboxStyleFileQuarantine(); 144 if (error) { 145 WTFLogAlways("%s: Couldn't enable sandbox style file quarantine: %ld\n", getprogname(), (long)error); 146 exit(EX_NOPERM); 147 } 67 148 } 149 150 } -
trunk/Source/WebKit2/SharedWorkerProcess/mac/SharedWorkerProcessMac.mm
r138868 r140486 47 47 namespace WebKit { 48 48 49 static void initializeSandbox()50 {51 NSBundle *webkit2Bundle = [NSBundle bundleForClass:NSClassFromString(@"WKView")];52 const char* profilePath = [[webkit2Bundle pathForResource:@"com.apple.WebKit.SharedWorkerProcess" ofType:@"sb"] fileSystemRepresentation];53 54 char* errorBuf;55 if (sandbox_init_with_parameters(profilePath, SANDBOX_NAMED_EXTERNAL, 0, &errorBuf)) {56 WTFLogAlways("SharedWorkerProcess: couldn't initialize sandbox profile [%s] error '%s'\n", profilePath, errorBuf);57 exit(EX_NOPERM);58 }59 }60 61 49 void SharedWorkerProcess::platformInitializeSharedWorkerProcess(const SharedWorkerProcessCreationParameters& parameters) 62 50 { … … 66 54 67 55 WKSetVisibleApplicationName((CFStringRef)applicationName); 68 69 WebKit::initializeSandbox();70 56 } 71 57 -
trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
r140285 r140486 1054 1054 E1CC1B9012D7EADF00625838 /* PrintInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = E1CC1B8E12D7EADF00625838 /* PrintInfo.h */; }; 1055 1055 E1CC1B9112D7EADF00625838 /* PrintInfoMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = E1CC1B8F12D7EADF00625838 /* PrintInfoMac.mm */; }; 1056 E1E552C416AE065F004ED653 /* SandboxInitialiationParametersMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = E1E552C216AE065E004ED653 /* SandboxInitialiationParametersMac.mm */; }; 1057 E1E552C516AE065F004ED653 /* SandboxInitializationParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = E1E552C316AE065E004ED653 /* SandboxInitializationParameters.h */; }; 1056 1058 E1EDFDA61628868E0039ECDA /* MainMacProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A6FA31011E3921E00DB1371 /* MainMacProcess.cpp */; }; 1057 1059 E1EDFDA7162886960039ECDA /* SharedWorkerProcessMainMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = E1EDFD9B16287D0B0039ECDA /* SharedWorkerProcessMainMac.mm */; }; … … 2375 2377 E1CC1B8E12D7EADF00625838 /* PrintInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrintInfo.h; sourceTree = "<group>"; }; 2376 2378 E1CC1B8F12D7EADF00625838 /* PrintInfoMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PrintInfoMac.mm; sourceTree = "<group>"; }; 2379 E1E552C216AE065E004ED653 /* SandboxInitialiationParametersMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SandboxInitialiationParametersMac.mm; sourceTree = "<group>"; }; 2380 E1E552C316AE065E004ED653 /* SandboxInitializationParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SandboxInitializationParameters.h; sourceTree = "<group>"; }; 2377 2381 E1EDFD9816287BD10039ECDA /* SharedWorkerProcessMain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedWorkerProcessMain.h; sourceTree = "<group>"; }; 2378 2382 E1EDFD9B16287D0B0039ECDA /* SharedWorkerProcessMainMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SharedWorkerProcessMainMac.mm; sourceTree = "<group>"; }; … … 2834 2838 BC2D021612AC41CB00E732A3 /* SameDocumentNavigationType.h */, 2835 2839 1AAB4A8C1296F0A20023952F /* SandboxExtension.h */, 2840 E1E552C316AE065E004ED653 /* SandboxInitializationParameters.h */, 2836 2841 33152973130D0CB200ED2483 /* SecurityOriginData.cpp */, 2837 2842 33152974130D0CB200ED2483 /* SecurityOriginData.h */, … … 3851 3856 1AF1AC691651759E00C17D7F /* RemoteLayerTreeTransaction.mm */, 3852 3857 1AAB4AA91296F1540023952F /* SandboxExtensionMac.mm */, 3858 E1E552C216AE065E004ED653 /* SandboxInitialiationParametersMac.mm */, 3853 3859 51D1304F1382EAC000351EDD /* SecItemRequestData.cpp */, 3854 3860 51D130501382EAC000351EDD /* SecItemRequestData.h */, … … 5052 5058 51815BA016A622210054501F /* SyncNetworkResourceLoader.h in Headers */, 5053 5059 519B4FF516A9EA970066874D /* SchedulableLoader.h in Headers */, 5060 E1E552C516AE065F004ED653 /* SandboxInitializationParameters.h in Headers */, 5054 5061 ); 5055 5062 runOnlyForDeploymentPostprocessing = 0; … … 6030 6037 51815B9F16A622210054501F /* SyncNetworkResourceLoader.cpp in Sources */, 6031 6038 519B4FF416A9EA970066874D /* SchedulableLoader.cpp in Sources */, 6039 E1E552C416AE065F004ED653 /* SandboxInitialiationParametersMac.mm in Sources */, 6032 6040 ); 6033 6041 runOnlyForDeploymentPostprocessing = 0; -
trunk/Source/WebKit2/WebProcess/WebProcess.cpp
r140081 r140486 1080 1080 } 1081 1081 1082 void WebProcess:: initializeSandbox(const ChildProcessInitializationParameters&)1082 void WebProcess::processUpdateSandboxInitializationParameters(const ChildProcessInitializationParameters&, SandboxInitializationParameters&) 1083 1083 { 1084 1084 } -
trunk/Source/WebKit2/WebProcess/WebProcess.h
r139023 r140486 267 267 virtual void initializeProcess(const ChildProcessInitializationParameters&) OVERRIDE; 268 268 virtual void initializeProcessName(const ChildProcessInitializationParameters&) OVERRIDE; 269 virtual void initializeSandbox(const ChildProcessInitializationParameters&) OVERRIDE;270 269 virtual void initializeConnection(CoreIPC::Connection*) OVERRIDE; 271 270 virtual bool shouldTerminate() OVERRIDE; 272 271 virtual void terminate() OVERRIDE; 272 virtual void processUpdateSandboxInitializationParameters(const ChildProcessInitializationParameters&, SandboxInitializationParameters&) OVERRIDE; 273 273 274 274 void platformInitializeProcess(const ChildProcessInitializationParameters&); 275 276 275 277 276 // CoreIPC::Connection::Client -
trunk/Source/WebKit2/WebProcess/mac/WebProcessMac.mm
r140230 r140486 29 29 #import "CustomProtocolManager.h" 30 30 #import "SandboxExtension.h" 31 #import "SandboxInitializationParameters.h" 31 32 #import "WKFullKeyboardAccessWatcher.h" 32 33 #import "WebInspector.h" … … 52 53 #endif 53 54 54 #if ENABLE(WEB_PROCESS_SANDBOX)55 #import <pwd.h>56 #import <stdlib.h>57 #import <sysexits.h>58 59 // We have to #undef __APPLE_API_PRIVATE to prevent sandbox.h from looking for a header file that does not exist (<rdar://problem/9679211>).60 #undef __APPLE_API_PRIVATE61 #import <sandbox.h>62 63 #define SANDBOX_NAMED_EXTERNAL 0x000364 extern "C" int sandbox_init_with_parameters(const char *profile, uint64_t flags, const char *const parameters[], char **errorbuf);65 66 // Define this to 1 to bypass the sandbox for debugging purposes.67 #define DEBUG_BYPASS_SANDBOX 068 69 #endif70 71 55 using namespace WebCore; 72 56 using namespace std; … … 155 139 } 156 140 157 #if ENABLE(WEB_PROCESS_SANDBOX)158 static void appendSandboxParameterPathInternal(Vector<const char*>& vector, const char* name, const char* path)159 {160 char normalizedPath[PATH_MAX];161 if (!realpath(path, normalizedPath))162 normalizedPath[0] = '\0';163 164 vector.append(name);165 vector.append(fastStrDup(normalizedPath));166 }167 168 static void appendReadwriteConfDirectory(Vector<const char*>& vector, const char* name, int confID)169 {170 char path[PATH_MAX];171 if (confstr(confID, path, PATH_MAX) <= 0)172 path[0] = '\0';173 174 appendSandboxParameterPathInternal(vector, name, path);175 }176 177 static void appendReadonlySandboxDirectory(Vector<const char*>& vector, const char* name, NSString *path)178 {179 appendSandboxParameterPathInternal(vector, name, [path length] ? [(NSString *)path fileSystemRepresentation] : "");180 }181 182 static void appendReadwriteSandboxDirectory(Vector<const char*>& vector, const char* name, const char* path)183 {184 appendSandboxParameterPathInternal(vector, name, path);185 }186 187 #endif188 189 void WebProcess::initializeSandbox(const ChildProcessInitializationParameters& parameters)190 {191 [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[NSBundle mainBundle] bundlePath]];192 193 #if ENABLE(WEB_PROCESS_SANDBOX)194 195 #if DEBUG_BYPASS_SANDBOX196 WTFLogAlways("Bypassing web process sandbox.\n");197 return;198 #endif199 200 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1080201 // Use private temporary and cache directories.202 String systemDirectorySuffix = "com.apple.WebProcess+" + parameters.clientIdentifier;203 setenv("DIRHELPER_USER_DIR_SUFFIX", fileSystemRepresentation(systemDirectorySuffix).data(), 0);204 char temporaryDirectory[PATH_MAX];205 if (!confstr(_CS_DARWIN_USER_TEMP_DIR, temporaryDirectory, sizeof(temporaryDirectory))) {206 WTFLogAlways("WebProcess: couldn't retrieve private temporary directory path: %d\n", errno);207 exit(EX_NOPERM);208 }209 setenv("TMPDIR", temporaryDirectory, 1);210 #endif211 212 NSBundle *webkit2Bundle = [NSBundle bundleForClass:NSClassFromString(@"WKView")];213 214 Vector<const char*> sandboxParameters;215 216 // These are read-only.217 appendReadonlySandboxDirectory(sandboxParameters, "WEBKIT2_FRAMEWORK_DIR", [[webkit2Bundle bundlePath] stringByDeletingLastPathComponent]);218 219 // These are read-write getconf paths.220 appendReadwriteConfDirectory(sandboxParameters, "DARWIN_USER_TEMP_DIR", _CS_DARWIN_USER_TEMP_DIR);221 appendReadwriteConfDirectory(sandboxParameters, "DARWIN_USER_CACHE_DIR", _CS_DARWIN_USER_CACHE_DIR);222 223 char buffer[4096];224 int bufferSize = sizeof(buffer);225 struct passwd pwd;226 struct passwd* result = 0;227 if (getpwuid_r(getuid(), &pwd, buffer, bufferSize, &result) || !result) {228 WTFLogAlways("WebProcess: Couldn't find home directory\n");229 exit(EX_NOPERM);230 }231 232 // These are read-write paths.233 appendReadwriteSandboxDirectory(sandboxParameters, "HOME_DIR", pwd.pw_dir);234 235 sandboxParameters.append(static_cast<const char*>(0));236 237 const char* profilePath = [[webkit2Bundle pathForResource:@"com.apple.WebProcess" ofType:@"sb"] fileSystemRepresentation];238 239 char* errorBuf;240 if (sandbox_init_with_parameters(profilePath, SANDBOX_NAMED_EXTERNAL, sandboxParameters.data(), &errorBuf)) {241 WTFLogAlways("WebProcess: Couldn't initialize sandbox profile [%s] error '%s'\n", profilePath, errorBuf);242 for (size_t i = 0; sandboxParameters[i]; i += 2)243 WTFLogAlways("%s=%s\n", sandboxParameters[i], sandboxParameters[i + 1]);244 exit(EX_NOPERM);245 }246 247 for (size_t i = 0; sandboxParameters[i]; i += 2)248 fastFree(const_cast<char*>(sandboxParameters[i + 1]));249 250 // This will override LSFileQuarantineEnabled from Info.plist unless sandbox quarantine is globally disabled.251 OSStatus error = WKEnableSandboxStyleFileQuarantine();252 if (error) {253 WTFLogAlways("WebProcess: Couldn't enable sandbox style file quarantine: %ld\n", (long)error);254 exit(EX_NOPERM);255 }256 #endif257 }258 259 141 static id NSApplicationAccessibilityFocusedUIElement(NSApplication*, SEL) 260 142 { … … 322 204 } 323 205 206 void WebProcess::processUpdateSandboxInitializationParameters(const ChildProcessInitializationParameters&, SandboxInitializationParameters& parameters) 207 { 208 // Need to overide the default, because service has a different bundle ID. 209 NSBundle *webkit2Bundle = [NSBundle bundleForClass:NSClassFromString(@"WKView")]; 210 parameters.setSandboxProfilePath([webkit2Bundle pathForResource:@"com.apple.WebProcess" ofType:@"sb"]); 211 } 212 324 213 } // namespace WebKit
Note:
See TracChangeset
for help on using the changeset viewer.