Chromium Code Reviews| Index: chrome/common/sandbox_policy.cc | 
| =================================================================== | 
| --- chrome/common/sandbox_policy.cc (revision 70785) | 
| +++ chrome/common/sandbox_policy.cc (working copy) | 
| @@ -325,8 +325,13 @@ | 
| if (0 == ::GetShortPathNameW(plugin_path.value().c_str(), | 
| short_path, arraysize(short_path))) | 
| return false; | 
| + // Here is the kicker, if the user has disabled 8.3 (short path) support | 
| + // on the volume GetShortPathNameW does not fail but simply returns the | 
| + // input path. In this case if the path had any spaces then rundll32 will | 
| 
 
rvargas (doing something else)
2011/01/11 03:46:32
oh, God  ...
 
 | 
| + // incorrectly interpret its parameters. So we quote the path, even though | 
| + // the kb/164787 says you should not. | 
| std::wstring cmd_final = | 
| - base::StringPrintf(L"%ls %ls,BrokerMain browser=chrome", | 
| + base::StringPrintf(L"%ls \"%ls\",BrokerMain browser=chrome", | 
| rundll.value().c_str(), | 
| short_path); | 
| base::ProcessHandle process; | 
| @@ -358,31 +363,33 @@ | 
| } | 
| // Creates a sandbox for the built-in flash plugin running in a restricted | 
| -// environment. This is a work in progress and for the time being do not | 
| -// pay attention to the duplication between this function and the above | 
| -// function. For more information see bug 50796. | 
| +// environment. This policy is in continual flux as flash changes | 
| +// capabilities. For more information see bug 50796. | 
| bool ApplyPolicyForBuiltInFlashPlugin(sandbox::TargetPolicy* policy) { | 
| - // TODO(cpu): Lock down the job level more. | 
| policy->SetJobLevel(sandbox::JOB_UNPROTECTED, 0); | 
| + // Vista and Win7 get a weaker token but have low integrity. | 
| + if (base::win::GetVersion() > base::win::VERSION_XP) { | 
| + policy->SetTokenLevel(sandbox::USER_RESTRICTED_SAME_ACCESS, | 
| + sandbox::USER_INTERACTIVE); | 
| + policy->SetDelayedIntegrityLevel(sandbox::INTEGRITY_LEVEL_LOW); | 
| + } else { | 
| + policy->SetTokenLevel(sandbox::USER_UNPROTECTED, | 
| + sandbox::USER_LIMITED); | 
| - sandbox::TokenLevel initial_token = sandbox::USER_UNPROTECTED; | 
| + if (!AddKeyAndSubkeys(L"HKEY_LOCAL_MACHINE\\SOFTWARE", | 
| + sandbox::TargetPolicy::REG_ALLOW_READONLY, | 
| + policy)) | 
| + return false; | 
| + if (!AddKeyAndSubkeys(L"HKEY_LOCAL_MACHINE\\SYSTEM", | 
| + sandbox::TargetPolicy::REG_ALLOW_READONLY, | 
| + policy)) | 
| + return false; | 
| - if (base::win::GetVersion() > base::win::VERSION_XP) | 
| - initial_token = sandbox::USER_RESTRICTED_SAME_ACCESS; | 
| - | 
| - policy->SetTokenLevel(initial_token, sandbox::USER_LIMITED); | 
| - policy->SetDelayedIntegrityLevel(sandbox::INTEGRITY_LEVEL_LOW); | 
| - | 
| - // TODO(cpu): Proxy registry access and remove these policies. | 
| - if (!AddKeyAndSubkeys(L"HKEY_CURRENT_USER\\SOFTWARE\\ADOBE", | 
| - sandbox::TargetPolicy::REG_ALLOW_ANY, | 
| - policy)) | 
| + if (!AddKeyAndSubkeys(L"HKEY_CURRENT_USER\\SOFTWARE", | 
| + sandbox::TargetPolicy::REG_ALLOW_READONLY, | 
| + policy)) | 
| return false; | 
| - | 
| - if (!AddKeyAndSubkeys(L"HKEY_CURRENT_USER\\SOFTWARE\\MACROMEDIA", | 
| - sandbox::TargetPolicy::REG_ALLOW_ANY, | 
| - policy)) | 
| - return false; | 
| + } | 
| return true; | 
| } |