Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <memory> | 5 #include <memory> |
| 6 #include <string> | 6 #include <string> |
| 7 | 7 |
| 8 #include "base/memory/scoped_ptr.h" | |
| 8 #include "base/strings/string16.h" | 9 #include "base/strings/string16.h" |
| 9 #include "base/strings/sys_string_conversions.h" | 10 #include "base/strings/sys_string_conversions.h" |
| 10 #include "base/win/scoped_handle.h" | 11 #include "base/win/scoped_handle.h" |
| 11 #include "base/win/scoped_process_information.h" | 12 #include "base/win/scoped_process_information.h" |
| 12 #include "base/win/windows_version.h" | 13 #include "base/win/windows_version.h" |
| 13 #include "sandbox/win/src/sandbox.h" | 14 #include "sandbox/win/src/sandbox.h" |
| 14 #include "sandbox/win/src/sandbox_factory.h" | 15 #include "sandbox/win/src/sandbox_factory.h" |
| 15 #include "sandbox/win/src/sandbox_policy.h" | 16 #include "sandbox/win/src/sandbox_policy.h" |
| 16 #include "sandbox/win/tests/common/controller.h" | 17 #include "sandbox/win/tests/common/controller.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 19 |
| 19 namespace { | 20 namespace { |
| 20 | 21 |
| 21 // While the shell API provides better calls than this home brew function | |
| 22 // we use GetSystemWindowsDirectoryW which does not query the registry so | |
| 23 // it is safe to use after revert. | |
| 24 base::string16 MakeFullPathToSystem32(const wchar_t* name) { | |
| 25 wchar_t windows_path[MAX_PATH] = {0}; | |
| 26 ::GetSystemWindowsDirectoryW(windows_path, MAX_PATH); | |
| 27 base::string16 full_path(windows_path); | |
| 28 if (full_path.empty()) { | |
| 29 return full_path; | |
| 30 } | |
| 31 full_path += L"\\system32\\"; | |
| 32 full_path += name; | |
| 33 return full_path; | |
| 34 } | |
| 35 | |
| 36 // Creates a process with the |exe| and |command| parameter using the | 22 // Creates a process with the |exe| and |command| parameter using the |
| 37 // unicode and ascii version of the api. | 23 // unicode and ascii version of the api. |
| 38 sandbox::SboxTestResult CreateProcessHelper(const base::string16& exe, | 24 sandbox::SboxTestResult CreateProcessHelper(const base::string16& exe, |
| 39 const base::string16& command) { | 25 const base::string16& command) { |
| 40 base::win::ScopedProcessInformation pi; | 26 base::win::ScopedProcessInformation pi; |
| 41 STARTUPINFOW si = {sizeof(si)}; | 27 STARTUPINFOW si = {sizeof(si)}; |
| 42 | 28 const wchar_t* exe_name = NULL; |
| 43 const wchar_t *exe_name = NULL; | |
| 44 if (!exe.empty()) | 29 if (!exe.empty()) |
| 45 exe_name = exe.c_str(); | 30 exe_name = exe.c_str(); |
| 46 | 31 |
| 47 base::string16 writable_command = command; | 32 scoped_ptr<wchar_t, base::FreeDeleter> writable_command( |
| 33 _wcsdup(command.c_str())); | |
| 48 | 34 |
| 49 // Create the process with the unicode version of the API. | 35 // Create the process with the unicode version of the API. |
| 50 sandbox::SboxTestResult ret1 = sandbox::SBOX_TEST_FAILED; | 36 sandbox::SboxTestResult ret1 = sandbox::SBOX_TEST_FAILED; |
| 51 PROCESS_INFORMATION temp_process_info = {}; | 37 PROCESS_INFORMATION temp_process_info = {}; |
| 52 if (::CreateProcessW(exe_name, | 38 if (::CreateProcessW(exe_name, |
| 53 command.empty() ? NULL : &writable_command[0], | 39 command.empty() ? NULL : writable_command.get(), |
| 54 NULL, | 40 NULL, |
| 55 NULL, | 41 NULL, |
| 56 FALSE, | 42 FALSE, |
| 57 0, | 43 0, |
| 58 NULL, | 44 NULL, |
| 59 NULL, | 45 NULL, |
| 60 &si, | 46 &si, |
| 61 &temp_process_info)) { | 47 &temp_process_info)) { |
| 62 pi.Set(temp_process_info); | 48 pi.Set(temp_process_info); |
| 63 ret1 = sandbox::SBOX_TEST_SUCCEEDED; | 49 ret1 = sandbox::SBOX_TEST_SUCCEEDED; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 107 | 93 |
| 108 namespace sandbox { | 94 namespace sandbox { |
| 109 | 95 |
| 110 SBOX_TESTS_COMMAND int Process_RunApp1(int argc, wchar_t **argv) { | 96 SBOX_TESTS_COMMAND int Process_RunApp1(int argc, wchar_t **argv) { |
| 111 if (argc != 1) { | 97 if (argc != 1) { |
| 112 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 98 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 113 } | 99 } |
| 114 if ((NULL == argv) || (NULL == argv[0])) { | 100 if ((NULL == argv) || (NULL == argv[0])) { |
| 115 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 101 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 116 } | 102 } |
| 117 base::string16 path = MakeFullPathToSystem32(argv[0]); | 103 base::string16 path = MakePathToSys(argv[0], false); |
| 118 | 104 |
| 119 // TEST 1: Try with the path in the app_name. | 105 // TEST 1: Try with the path in the app_name. |
| 120 return CreateProcessHelper(path, base::string16()); | 106 return CreateProcessHelper(path, base::string16()); |
| 121 } | 107 } |
| 122 | 108 |
| 123 SBOX_TESTS_COMMAND int Process_RunApp2(int argc, wchar_t **argv) { | 109 SBOX_TESTS_COMMAND int Process_RunApp2(int argc, wchar_t **argv) { |
| 124 if (argc != 1) { | 110 if (argc != 1) { |
| 125 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 111 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 126 } | 112 } |
| 127 if ((NULL == argv) || (NULL == argv[0])) { | 113 if ((NULL == argv) || (NULL == argv[0])) { |
| 128 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 114 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 129 } | 115 } |
| 130 base::string16 path = MakeFullPathToSystem32(argv[0]); | 116 base::string16 path = MakePathToSys(argv[0], false); |
| 131 | 117 |
| 132 // TEST 2: Try with the path in the cmd_line. | 118 // TEST 2: Try with the path in the cmd_line. |
| 133 base::string16 cmd_line = L"\""; | 119 base::string16 cmd_line = L"\""; |
| 134 cmd_line += path; | 120 cmd_line += path; |
| 135 cmd_line += L"\""; | 121 cmd_line += L"\""; |
| 136 return CreateProcessHelper(base::string16(), cmd_line); | 122 return CreateProcessHelper(base::string16(), cmd_line); |
| 137 } | 123 } |
| 138 | 124 |
| 139 SBOX_TESTS_COMMAND int Process_RunApp3(int argc, wchar_t **argv) { | 125 SBOX_TESTS_COMMAND int Process_RunApp3(int argc, wchar_t **argv) { |
| 140 if (argc != 1) { | 126 if (argc != 1) { |
| 141 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 127 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 142 } | 128 } |
| 143 if ((NULL == argv) || (NULL == argv[0])) { | 129 if ((NULL == argv) || (NULL == argv[0])) { |
| 144 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 130 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 145 } | 131 } |
| 146 | |
| 147 // TEST 3: Try file name in the cmd_line. | 132 // TEST 3: Try file name in the cmd_line. |
| 148 return CreateProcessHelper(base::string16(), argv[0]); | 133 return CreateProcessHelper(base::string16(), argv[0]); |
| 149 } | 134 } |
| 150 | 135 |
| 151 SBOX_TESTS_COMMAND int Process_RunApp4(int argc, wchar_t **argv) { | 136 SBOX_TESTS_COMMAND int Process_RunApp4(int argc, wchar_t **argv) { |
| 152 if (argc != 1) { | 137 if (argc != 1) { |
| 153 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 138 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 154 } | 139 } |
| 155 if ((NULL == argv) || (NULL == argv[0])) { | 140 if ((NULL == argv) || (NULL == argv[0])) { |
| 156 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 141 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 157 } | 142 } |
| 158 | 143 |
| 159 // TEST 4: Try file name in the app_name and current directory sets correctly. | 144 // TEST 4: Try file name in the app_name and current directory sets correctly. |
| 160 base::string16 system32 = MakeFullPathToSystem32(L""); | 145 base::string16 system32 = MakePathToSys(L"", false); |
| 161 wchar_t current_directory[MAX_PATH + 1]; | 146 wchar_t current_directory[MAX_PATH + 1]; |
| 162 DWORD ret = ::GetCurrentDirectory(MAX_PATH, current_directory); | 147 DWORD ret = ::GetCurrentDirectory(MAX_PATH, current_directory); |
| 163 if (!ret) | 148 if (!ret) |
| 164 return SBOX_TEST_FIRST_ERROR; | 149 return SBOX_TEST_FIRST_ERROR; |
| 165 if (ret >= MAX_PATH) | 150 if (ret >= MAX_PATH) |
| 166 return SBOX_TEST_FAILED; | 151 return SBOX_TEST_FAILED; |
| 167 | 152 |
| 168 current_directory[ret] = L'\\'; | 153 current_directory[ret] = L'\\'; |
| 169 current_directory[ret+1] = L'\0'; | 154 current_directory[ret+1] = L'\0'; |
| 170 if (!::SetCurrentDirectory(system32.c_str())) { | 155 if (!::SetCurrentDirectory(system32.c_str())) { |
| 171 return SBOX_TEST_SECOND_ERROR; | 156 return SBOX_TEST_SECOND_ERROR; |
| 172 } | 157 } |
| 173 | 158 |
| 174 const int result4 = CreateProcessHelper(argv[0], base::string16()); | 159 const int result4 = CreateProcessHelper(argv[0], base::string16()); |
| 175 return ::SetCurrentDirectory(current_directory) ? result4 : SBOX_TEST_FAILED; | 160 return ::SetCurrentDirectory(current_directory) ? result4 : SBOX_TEST_FAILED; |
| 176 } | 161 } |
| 177 | 162 |
| 178 SBOX_TESTS_COMMAND int Process_RunApp5(int argc, wchar_t **argv) { | 163 SBOX_TESTS_COMMAND int Process_RunApp5(int argc, wchar_t **argv) { |
| 179 if (argc != 1) { | 164 if (argc != 1) { |
| 180 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 165 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 181 } | 166 } |
| 182 if ((NULL == argv) || (NULL == argv[0])) { | 167 if ((NULL == argv) || (NULL == argv[0])) { |
| 183 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 168 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 184 } | 169 } |
| 185 base::string16 path = MakeFullPathToSystem32(argv[0]); | 170 base::string16 path = MakePathToSys(argv[0], false); |
| 186 | 171 |
| 187 // TEST 5: Try with the path in the cmd_line and arguments. | 172 // TEST 5: Try with the path in the cmd_line and arguments. |
| 188 base::string16 cmd_line = L"\""; | 173 base::string16 cmd_line = L"\""; |
| 189 cmd_line += path; | 174 cmd_line += path; |
| 190 cmd_line += L"\" /I"; | 175 cmd_line += L"\" /I"; |
| 191 return CreateProcessHelper(base::string16(), cmd_line); | 176 return CreateProcessHelper(base::string16(), cmd_line); |
| 192 } | 177 } |
| 193 | 178 |
| 194 SBOX_TESTS_COMMAND int Process_RunApp6(int argc, wchar_t **argv) { | 179 SBOX_TESTS_COMMAND int Process_RunApp6(int argc, wchar_t **argv) { |
| 195 if (argc != 1) { | 180 if (argc != 1) { |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 206 } | 191 } |
| 207 | 192 |
| 208 // Creates a process and checks if it's possible to get a handle to it's token. | 193 // Creates a process and checks if it's possible to get a handle to it's token. |
| 209 SBOX_TESTS_COMMAND int Process_GetChildProcessToken(int argc, wchar_t **argv) { | 194 SBOX_TESTS_COMMAND int Process_GetChildProcessToken(int argc, wchar_t **argv) { |
| 210 if (argc != 1) | 195 if (argc != 1) |
| 211 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 196 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 212 | 197 |
| 213 if ((NULL == argv) || (NULL == argv[0])) | 198 if ((NULL == argv) || (NULL == argv[0])) |
| 214 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 199 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 215 | 200 |
| 216 base::string16 path = MakeFullPathToSystem32(argv[0]); | 201 base::string16 path = MakePathToSys(argv[0], false); |
| 217 | 202 |
| 218 STARTUPINFOW si = {sizeof(si)}; | 203 STARTUPINFOW si = {sizeof(si)}; |
| 219 | 204 |
| 220 PROCESS_INFORMATION temp_process_info = {}; | 205 PROCESS_INFORMATION temp_process_info = {}; |
| 221 if (!::CreateProcessW(path.c_str(), NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, | 206 if (!::CreateProcessW(path.c_str(), NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, |
| 222 NULL, NULL, &si, &temp_process_info)) { | 207 NULL, NULL, &si, &temp_process_info)) { |
| 223 return SBOX_TEST_FAILED; | 208 return SBOX_TEST_FAILED; |
| 224 } | 209 } |
| 225 base::win::ScopedProcessInformation pi(temp_process_info); | 210 base::win::ScopedProcessInformation pi(temp_process_info); |
| 226 | 211 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 274 runner.GetPolicy()->SetTokenLevel(USER_INTERACTIVE, USER_INTERACTIVE); | 259 runner.GetPolicy()->SetTokenLevel(USER_INTERACTIVE, USER_INTERACTIVE); |
| 275 | 260 |
| 276 EXPECT_EQ(SBOX_ALL_OK, | 261 EXPECT_EQ(SBOX_ALL_OK, |
| 277 runner.GetPolicy()->AddRule(TargetPolicy::SUBSYS_PROCESS, | 262 runner.GetPolicy()->AddRule(TargetPolicy::SUBSYS_PROCESS, |
| 278 TargetPolicy::PROCESS_ALL_EXEC, | 263 TargetPolicy::PROCESS_ALL_EXEC, |
| 279 L"this is not important")); | 264 L"this is not important")); |
| 280 } | 265 } |
| 281 | 266 |
| 282 TEST(ProcessPolicyTest, CreateProcessAW) { | 267 TEST(ProcessPolicyTest, CreateProcessAW) { |
| 283 TestRunner runner; | 268 TestRunner runner; |
| 284 base::string16 exe_path = MakeFullPathToSystem32(L"findstr.exe"); | 269 base::string16 maybe_virtual_exe_path = MakePathToSys(L"findstr.exe", false); |
| 285 base::string16 system32 = MakeFullPathToSystem32(L""); | 270 base::string16 non_virtual_exe_path = MakePathToSys32(L"findstr.exe", false); |
| 286 ASSERT_TRUE(!exe_path.empty()); | 271 ASSERT_TRUE(!maybe_virtual_exe_path.empty()); |
| 272 | |
| 287 EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_PROCESS, | 273 EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_PROCESS, |
| 288 TargetPolicy::PROCESS_MIN_EXEC, | 274 TargetPolicy::PROCESS_MIN_EXEC, |
| 289 exe_path.c_str())); | 275 maybe_virtual_exe_path.c_str())); |
| 276 | |
| 277 if (non_virtual_exe_path != maybe_virtual_exe_path) { | |
| 278 EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_PROCESS, | |
| 279 TargetPolicy::PROCESS_MIN_EXEC, | |
| 280 non_virtual_exe_path.c_str())); | |
| 281 } | |
| 290 | 282 |
|
cpu_(ooo_6.6-7.5)
2016/01/25 22:34:05
nice
| |
| 291 // Need to add directory rules for the directories that we use in | 283 // Need to add directory rules for the directories that we use in |
| 292 // SetCurrentDirectory. | 284 // SetCurrentDirectory. |
| 293 EXPECT_TRUE(runner.AddFsRule(TargetPolicy::FILES_ALLOW_DIR_ANY, | 285 EXPECT_TRUE(runner.AddRuleSys32(TargetPolicy::FILES_ALLOW_DIR_ANY, L"")); |
| 294 system32.c_str())); | |
| 295 | 286 |
| 296 wchar_t current_directory[MAX_PATH]; | 287 wchar_t current_directory[MAX_PATH]; |
| 297 DWORD ret = ::GetCurrentDirectory(MAX_PATH, current_directory); | 288 DWORD ret = ::GetCurrentDirectory(MAX_PATH, current_directory); |
| 298 ASSERT_TRUE(0 != ret && ret < MAX_PATH); | 289 ASSERT_TRUE(0 != ret && ret < MAX_PATH); |
| 299 | 290 |
| 300 wcscat_s(current_directory, MAX_PATH, L"\\"); | 291 wcscat_s(current_directory, MAX_PATH, L"\\"); |
| 301 EXPECT_TRUE(runner.AddFsRule(TargetPolicy::FILES_ALLOW_DIR_ANY, | 292 EXPECT_TRUE(runner.AddFsRule(TargetPolicy::FILES_ALLOW_DIR_ANY, |
| 302 current_directory)); | 293 current_directory)); |
| 303 | 294 |
| 304 EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"Process_RunApp1 calc.exe")); | 295 EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"Process_RunApp1 calc.exe")); |
| 305 EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"Process_RunApp2 calc.exe")); | 296 EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"Process_RunApp2 calc.exe")); |
| 306 EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"Process_RunApp3 calc.exe")); | 297 EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"Process_RunApp3 calc.exe")); |
| 298 EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"Process_RunApp4 calc.exe")); | |
| 307 EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"Process_RunApp5 calc.exe")); | 299 EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"Process_RunApp5 calc.exe")); |
| 308 EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"Process_RunApp6 calc.exe")); | 300 EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"Process_RunApp6 calc.exe")); |
| 309 | 301 |
| 310 EXPECT_EQ(SBOX_TEST_SUCCEEDED, | 302 EXPECT_EQ(SBOX_TEST_SUCCEEDED, |
| 311 runner.RunTest(L"Process_RunApp1 findstr.exe")); | 303 runner.RunTest(L"Process_RunApp1 findstr.exe")); |
| 312 EXPECT_EQ(SBOX_TEST_SUCCEEDED, | 304 EXPECT_EQ(SBOX_TEST_SUCCEEDED, |
| 313 runner.RunTest(L"Process_RunApp2 findstr.exe")); | 305 runner.RunTest(L"Process_RunApp2 findstr.exe")); |
| 314 EXPECT_EQ(SBOX_TEST_SUCCEEDED, | 306 EXPECT_EQ(SBOX_TEST_SUCCEEDED, |
| 315 runner.RunTest(L"Process_RunApp3 findstr.exe")); | 307 runner.RunTest(L"Process_RunApp3 findstr.exe")); |
| 316 EXPECT_EQ(SBOX_TEST_SUCCEEDED, | 308 EXPECT_EQ(SBOX_TEST_SUCCEEDED, |
| 309 runner.RunTest(L"Process_RunApp4 findstr.exe")); | |
| 310 EXPECT_EQ(SBOX_TEST_SUCCEEDED, | |
| 317 runner.RunTest(L"Process_RunApp5 findstr.exe")); | 311 runner.RunTest(L"Process_RunApp5 findstr.exe")); |
| 318 EXPECT_EQ(SBOX_TEST_SUCCEEDED, | 312 EXPECT_EQ(SBOX_TEST_SUCCEEDED, |
| 319 runner.RunTest(L"Process_RunApp6 findstr.exe")); | 313 runner.RunTest(L"Process_RunApp6 findstr.exe")); |
| 320 | |
| 321 #if !defined(_WIN64) | |
| 322 if (base::win::OSInfo::GetInstance()->version() >= base::win::VERSION_VISTA && | |
| 323 base::win::OSInfo::GetInstance()->architecture() != | |
| 324 base::win::OSInfo::X86_ARCHITECTURE) { // http://crbug.com/580800 | |
| 325 // WinXP results are not reliable. | |
| 326 EXPECT_EQ(SBOX_TEST_SECOND_ERROR, | |
| 327 runner.RunTest(L"Process_RunApp4 calc.exe")); | |
| 328 EXPECT_EQ(SBOX_TEST_SECOND_ERROR, | |
| 329 runner.RunTest(L"Process_RunApp4 findstr.exe")); | |
| 330 } | |
| 331 #endif | |
| 332 } | 314 } |
| 333 | 315 |
| 334 TEST(ProcessPolicyTest, OpenToken) { | 316 TEST(ProcessPolicyTest, OpenToken) { |
| 335 TestRunner runner; | 317 TestRunner runner; |
| 336 EXPECT_EQ(SBOX_TEST_SUCCEEDED, runner.RunTest(L"Process_OpenToken")); | 318 EXPECT_EQ(SBOX_TEST_SUCCEEDED, runner.RunTest(L"Process_OpenToken")); |
| 337 } | 319 } |
| 338 | 320 |
| 339 TEST(ProcessPolicyTest, TestGetProcessTokenMinAccess) { | 321 TEST(ProcessPolicyTest, TestGetProcessTokenMinAccess) { |
| 340 TestRunner runner; | 322 TestRunner runner; |
| 341 base::string16 exe_path = MakeFullPathToSystem32(L"findstr.exe"); | 323 base::string16 exe_path = MakePathToSys(L"findstr.exe", false); |
| 342 ASSERT_TRUE(!exe_path.empty()); | 324 ASSERT_TRUE(!exe_path.empty()); |
| 343 EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_PROCESS, | 325 EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_PROCESS, |
| 344 TargetPolicy::PROCESS_MIN_EXEC, | 326 TargetPolicy::PROCESS_MIN_EXEC, |
| 345 exe_path.c_str())); | 327 exe_path.c_str())); |
| 346 | 328 |
| 347 EXPECT_EQ(SBOX_TEST_DENIED, | 329 EXPECT_EQ(SBOX_TEST_DENIED, |
| 348 runner.RunTest(L"Process_GetChildProcessToken findstr.exe")); | 330 runner.RunTest(L"Process_GetChildProcessToken findstr.exe")); |
| 349 } | 331 } |
| 350 | 332 |
| 351 TEST(ProcessPolicyTest, TestGetProcessTokenMaxAccess) { | 333 TEST(ProcessPolicyTest, TestGetProcessTokenMaxAccess) { |
| 352 TestRunner runner(JOB_UNPROTECTED, USER_INTERACTIVE, USER_INTERACTIVE); | 334 TestRunner runner(JOB_UNPROTECTED, USER_INTERACTIVE, USER_INTERACTIVE); |
| 353 base::string16 exe_path = MakeFullPathToSystem32(L"findstr.exe"); | 335 base::string16 exe_path = MakePathToSys(L"findstr.exe", false); |
| 354 ASSERT_TRUE(!exe_path.empty()); | 336 ASSERT_TRUE(!exe_path.empty()); |
| 355 EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_PROCESS, | 337 EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_PROCESS, |
| 356 TargetPolicy::PROCESS_ALL_EXEC, | 338 TargetPolicy::PROCESS_ALL_EXEC, |
| 357 exe_path.c_str())); | 339 exe_path.c_str())); |
| 358 | 340 |
| 359 EXPECT_EQ(SBOX_TEST_SUCCEEDED, | 341 EXPECT_EQ(SBOX_TEST_SUCCEEDED, |
| 360 runner.RunTest(L"Process_GetChildProcessToken findstr.exe")); | 342 runner.RunTest(L"Process_GetChildProcessToken findstr.exe")); |
| 361 } | 343 } |
| 362 | 344 |
| 363 TEST(ProcessPolicyTest, TestGetProcessTokenMinAccessNoJob) { | 345 TEST(ProcessPolicyTest, TestGetProcessTokenMinAccessNoJob) { |
| 364 TestRunner runner(JOB_NONE, USER_RESTRICTED_SAME_ACCESS, USER_LOCKDOWN); | 346 TestRunner runner(JOB_NONE, USER_RESTRICTED_SAME_ACCESS, USER_LOCKDOWN); |
| 365 base::string16 exe_path = MakeFullPathToSystem32(L"findstr.exe"); | 347 base::string16 exe_path = MakePathToSys(L"findstr.exe", false); |
| 366 ASSERT_TRUE(!exe_path.empty()); | 348 ASSERT_TRUE(!exe_path.empty()); |
| 367 EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_PROCESS, | 349 EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_PROCESS, |
| 368 TargetPolicy::PROCESS_MIN_EXEC, | 350 TargetPolicy::PROCESS_MIN_EXEC, |
| 369 exe_path.c_str())); | 351 exe_path.c_str())); |
| 370 | 352 |
| 371 EXPECT_EQ(SBOX_TEST_DENIED, | 353 EXPECT_EQ(SBOX_TEST_DENIED, |
| 372 runner.RunTest(L"Process_GetChildProcessToken findstr.exe")); | 354 runner.RunTest(L"Process_GetChildProcessToken findstr.exe")); |
| 373 } | 355 } |
| 374 | 356 |
| 375 TEST(ProcessPolicyTest, TestGetProcessTokenMaxAccessNoJob) { | 357 TEST(ProcessPolicyTest, TestGetProcessTokenMaxAccessNoJob) { |
| 376 TestRunner runner(JOB_NONE, USER_INTERACTIVE, USER_INTERACTIVE); | 358 TestRunner runner(JOB_NONE, USER_INTERACTIVE, USER_INTERACTIVE); |
| 377 base::string16 exe_path = MakeFullPathToSystem32(L"findstr.exe"); | 359 base::string16 exe_path = MakePathToSys(L"findstr.exe", false); |
| 378 ASSERT_TRUE(!exe_path.empty()); | 360 ASSERT_TRUE(!exe_path.empty()); |
| 379 EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_PROCESS, | 361 EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_PROCESS, |
| 380 TargetPolicy::PROCESS_ALL_EXEC, | 362 TargetPolicy::PROCESS_ALL_EXEC, |
| 381 exe_path.c_str())); | 363 exe_path.c_str())); |
| 382 | 364 |
| 383 EXPECT_EQ(SBOX_TEST_SUCCEEDED, | 365 EXPECT_EQ(SBOX_TEST_SUCCEEDED, |
| 384 runner.RunTest(L"Process_GetChildProcessToken findstr.exe")); | 366 runner.RunTest(L"Process_GetChildProcessToken findstr.exe")); |
| 385 } | 367 } |
| 386 | 368 |
| 387 } // namespace sandbox | 369 } // namespace sandbox |
| OLD | NEW |