| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "sandbox/win/src/policy_engine_params.h" | 5 #include "sandbox/win/src/policy_engine_params.h" |
| 6 #include "sandbox/win/src/policy_engine_processor.h" | 6 #include "sandbox/win/src/policy_engine_processor.h" |
| 7 #include "sandbox/win/src/policy_low_level.h" | 7 #include "sandbox/win/src/policy_low_level.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 #define POLPARAMS_BEGIN(x) sandbox::ParameterSet x[] = { | 10 #define POLPARAMS_BEGIN(x) sandbox::ParameterSet x[] = { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"z:\\Directory\\domo.txt", | 55 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"z:\\Directory\\domo.txt", |
| 56 CASE_INSENSITIVE)); | 56 CASE_INSENSITIVE)); |
| 57 | 57 |
| 58 PolicyGlobal* policy = MakePolicyMemory(); | 58 PolicyGlobal* policy = MakePolicyMemory(); |
| 59 const uint32 kFakeService = 2; | 59 const uint32 kFakeService = 2; |
| 60 | 60 |
| 61 LowLevelPolicy policyGen(policy); | 61 LowLevelPolicy policyGen(policy); |
| 62 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); | 62 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); |
| 63 EXPECT_TRUE(policyGen.Done()); | 63 EXPECT_TRUE(policyGen.Done()); |
| 64 | 64 |
| 65 wchar_t* filename = L"Z:\\Directory\\domo.txt"; | 65 const wchar_t* filename = L"Z:\\Directory\\domo.txt"; |
| 66 | 66 |
| 67 POLPARAMS_BEGIN(eval_params) | 67 POLPARAMS_BEGIN(eval_params) |
| 68 POLPARAM(filename) // Argument 0 | 68 POLPARAM(filename) // Argument 0 |
| 69 POLPARAMS_END; | 69 POLPARAMS_END; |
| 70 | 70 |
| 71 PolicyResult result; | 71 PolicyResult result; |
| 72 PolicyProcessor pol_ev(policy->entry[kFakeService]); | 72 PolicyProcessor pol_ev(policy->entry[kFakeService]); |
| 73 | 73 |
| 74 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); | 74 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); |
| 75 EXPECT_EQ(POLICY_MATCH, result); | 75 EXPECT_EQ(POLICY_MATCH, result); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 88 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\", | 88 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\", |
| 89 CASE_SENSITIVE)); | 89 CASE_SENSITIVE)); |
| 90 | 90 |
| 91 PolicyGlobal* policy = MakePolicyMemory(); | 91 PolicyGlobal* policy = MakePolicyMemory(); |
| 92 const uint32 kFakeService = 2; | 92 const uint32 kFakeService = 2; |
| 93 LowLevelPolicy policyGen(policy); | 93 LowLevelPolicy policyGen(policy); |
| 94 | 94 |
| 95 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); | 95 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); |
| 96 EXPECT_TRUE(policyGen.Done()); | 96 EXPECT_TRUE(policyGen.Done()); |
| 97 | 97 |
| 98 wchar_t* filename = NULL; | 98 const wchar_t* filename = NULL; |
| 99 POLPARAMS_BEGIN(eval_params) | 99 POLPARAMS_BEGIN(eval_params) |
| 100 POLPARAM(filename) // Argument 0 | 100 POLPARAM(filename) // Argument 0 |
| 101 POLPARAMS_END; | 101 POLPARAMS_END; |
| 102 | 102 |
| 103 PolicyResult result; | 103 PolicyResult result; |
| 104 PolicyProcessor pol_ev(policy->entry[kFakeService]); | 104 PolicyProcessor pol_ev(policy->entry[kFakeService]); |
| 105 | 105 |
| 106 filename = L"c:\\Microsoft\\"; | 106 filename = L"c:\\Microsoft\\"; |
| 107 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); | 107 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); |
| 108 EXPECT_EQ(NO_POLICY_MATCH, result); | 108 EXPECT_EQ(NO_POLICY_MATCH, result); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 126 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\*", | 126 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\*", |
| 127 CASE_SENSITIVE)); | 127 CASE_SENSITIVE)); |
| 128 | 128 |
| 129 PolicyGlobal* policy = MakePolicyMemory(); | 129 PolicyGlobal* policy = MakePolicyMemory(); |
| 130 const uint32 kFakeService = 3; | 130 const uint32 kFakeService = 3; |
| 131 LowLevelPolicy policyGen(policy); | 131 LowLevelPolicy policyGen(policy); |
| 132 | 132 |
| 133 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); | 133 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); |
| 134 EXPECT_TRUE(policyGen.Done()); | 134 EXPECT_TRUE(policyGen.Done()); |
| 135 | 135 |
| 136 wchar_t* filename = NULL; | 136 const wchar_t* filename = NULL; |
| 137 POLPARAMS_BEGIN(eval_params) | 137 POLPARAMS_BEGIN(eval_params) |
| 138 POLPARAM(filename) // Argument 0 | 138 POLPARAM(filename) // Argument 0 |
| 139 POLPARAMS_END; | 139 POLPARAMS_END; |
| 140 | 140 |
| 141 PolicyResult result; | 141 PolicyResult result; |
| 142 PolicyProcessor pol_ev(policy->entry[kFakeService]); | 142 PolicyProcessor pol_ev(policy->entry[kFakeService]); |
| 143 | 143 |
| 144 filename = L"c:\\Microsoft\\domo.txt"; | 144 filename = L"c:\\Microsoft\\domo.txt"; |
| 145 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); | 145 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); |
| 146 EXPECT_EQ(NO_POLICY_MATCH, result); | 146 EXPECT_EQ(NO_POLICY_MATCH, result); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 159 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\*.txt", | 159 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\*.txt", |
| 160 CASE_SENSITIVE)); | 160 CASE_SENSITIVE)); |
| 161 | 161 |
| 162 PolicyGlobal* policy = MakePolicyMemory(); | 162 PolicyGlobal* policy = MakePolicyMemory(); |
| 163 const uint32 kFakeService = 3; | 163 const uint32 kFakeService = 3; |
| 164 LowLevelPolicy policyGen(policy); | 164 LowLevelPolicy policyGen(policy); |
| 165 | 165 |
| 166 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); | 166 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); |
| 167 EXPECT_TRUE(policyGen.Done()); | 167 EXPECT_TRUE(policyGen.Done()); |
| 168 | 168 |
| 169 wchar_t* filename = NULL; | 169 const wchar_t* filename = NULL; |
| 170 POLPARAMS_BEGIN(eval_params) | 170 POLPARAMS_BEGIN(eval_params) |
| 171 POLPARAM(filename) // Argument 0 | 171 POLPARAM(filename) // Argument 0 |
| 172 POLPARAMS_END; | 172 POLPARAMS_END; |
| 173 | 173 |
| 174 PolicyResult result; | 174 PolicyResult result; |
| 175 PolicyProcessor pol_ev(policy->entry[kFakeService]); | 175 PolicyProcessor pol_ev(policy->entry[kFakeService]); |
| 176 | 176 |
| 177 filename = L"c:\\Microsoft\\domo.txt"; | 177 filename = L"c:\\Microsoft\\domo.txt"; |
| 178 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); | 178 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); |
| 179 EXPECT_EQ(NO_POLICY_MATCH, result); | 179 EXPECT_EQ(NO_POLICY_MATCH, result); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 198 CASE_SENSITIVE)); | 198 CASE_SENSITIVE)); |
| 199 EXPECT_TRUE(pr.AddNumberMatch(IF, 1, 24, EQUAL)); | 199 EXPECT_TRUE(pr.AddNumberMatch(IF, 1, 24, EQUAL)); |
| 200 | 200 |
| 201 PolicyGlobal* policy = MakePolicyMemory(); | 201 PolicyGlobal* policy = MakePolicyMemory(); |
| 202 const uint32 kFakeService = 3; | 202 const uint32 kFakeService = 3; |
| 203 LowLevelPolicy policyGen(policy); | 203 LowLevelPolicy policyGen(policy); |
| 204 | 204 |
| 205 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); | 205 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); |
| 206 EXPECT_TRUE(policyGen.Done()); | 206 EXPECT_TRUE(policyGen.Done()); |
| 207 | 207 |
| 208 wchar_t* filename = NULL; | 208 const wchar_t* filename = NULL; |
| 209 unsigned long access = 0; | 209 unsigned long access = 0; |
| 210 POLPARAMS_BEGIN(eval_params) | 210 POLPARAMS_BEGIN(eval_params) |
| 211 POLPARAM(filename) // Argument 0 | 211 POLPARAM(filename) // Argument 0 |
| 212 POLPARAM(access) // Argument 1 | 212 POLPARAM(access) // Argument 1 |
| 213 POLPARAMS_END; | 213 POLPARAMS_END; |
| 214 | 214 |
| 215 PolicyResult result; | 215 PolicyResult result; |
| 216 PolicyProcessor pol_ev(policy->entry[kFakeService]); | 216 PolicyProcessor pol_ev(policy->entry[kFakeService]); |
| 217 | 217 |
| 218 filename = L"c:\\Microsoft\\domo.txt"; | 218 filename = L"c:\\Microsoft\\domo.txt"; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 247 CASE_SENSITIVE)); | 247 CASE_SENSITIVE)); |
| 248 EXPECT_TRUE(pr.AddNumberMatch(IF, 2, 66, EQUAL)); | 248 EXPECT_TRUE(pr.AddNumberMatch(IF, 2, 66, EQUAL)); |
| 249 | 249 |
| 250 PolicyGlobal* policy = MakePolicyMemory(); | 250 PolicyGlobal* policy = MakePolicyMemory(); |
| 251 const uint32 kFakeService = 3; | 251 const uint32 kFakeService = 3; |
| 252 LowLevelPolicy policyGen(policy); | 252 LowLevelPolicy policyGen(policy); |
| 253 | 253 |
| 254 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); | 254 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); |
| 255 EXPECT_TRUE(policyGen.Done()); | 255 EXPECT_TRUE(policyGen.Done()); |
| 256 | 256 |
| 257 wchar_t* filename = NULL; | 257 const wchar_t* filename = NULL; |
| 258 unsigned long access = 0; | 258 unsigned long access = 0; |
| 259 unsigned long sharing = 66; | 259 unsigned long sharing = 66; |
| 260 | 260 |
| 261 POLPARAMS_BEGIN(eval_params) | 261 POLPARAMS_BEGIN(eval_params) |
| 262 POLPARAM(filename) // Argument 0 | 262 POLPARAM(filename) // Argument 0 |
| 263 POLPARAM(access) // Argument 1 | 263 POLPARAM(access) // Argument 1 |
| 264 POLPARAM(sharing) // Argument 2 | 264 POLPARAM(sharing) // Argument 2 |
| 265 POLPARAMS_END; | 265 POLPARAMS_END; |
| 266 | 266 |
| 267 PolicyResult result; | 267 PolicyResult result; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 EXPECT_TRUE(pr.AddNumberMatch(IF, 2, FILE_ATTRIBUTE_NORMAL, EQUAL)); | 321 EXPECT_TRUE(pr.AddNumberMatch(IF, 2, FILE_ATTRIBUTE_NORMAL, EQUAL)); |
| 322 | 322 |
| 323 PolicyGlobal* policy = MakePolicyMemory(); | 323 PolicyGlobal* policy = MakePolicyMemory(); |
| 324 | 324 |
| 325 const uint32 kNtFakeCreateFile = 7; | 325 const uint32 kNtFakeCreateFile = 7; |
| 326 | 326 |
| 327 LowLevelPolicy policyGen(policy); | 327 LowLevelPolicy policyGen(policy); |
| 328 EXPECT_TRUE(policyGen.AddRule(kNtFakeCreateFile, &pr)); | 328 EXPECT_TRUE(policyGen.AddRule(kNtFakeCreateFile, &pr)); |
| 329 EXPECT_TRUE(policyGen.Done()); | 329 EXPECT_TRUE(policyGen.Done()); |
| 330 | 330 |
| 331 wchar_t* filename = L"c:\\Documents and Settings\\Microsoft\\BLAH.txt"; | 331 const wchar_t* filename = L"c:\\Documents and Settings\\Microsoft\\BLAH.txt"; |
| 332 unsigned long creation_mode = OPEN_EXISTING; | 332 unsigned long creation_mode = OPEN_EXISTING; |
| 333 unsigned long flags = FILE_ATTRIBUTE_NORMAL; | 333 unsigned long flags = FILE_ATTRIBUTE_NORMAL; |
| 334 void* security_descriptor = NULL; | 334 void* security_descriptor = NULL; |
| 335 | 335 |
| 336 POLPARAMS_BEGIN(eval_params) | 336 POLPARAMS_BEGIN(eval_params) |
| 337 POLPARAM(filename) // Argument 0 | 337 POLPARAM(filename) // Argument 0 |
| 338 POLPARAM(creation_mode) // Argument 1 | 338 POLPARAM(creation_mode) // Argument 1 |
| 339 POLPARAM(flags) // Argument 2 | 339 POLPARAM(flags) // Argument 2 |
| 340 POLPARAM(security_descriptor) | 340 POLPARAM(security_descriptor) |
| 341 POLPARAMS_END; | 341 POLPARAMS_END; |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 EXPECT_EQ(OP_WSTRING_MATCH, | 477 EXPECT_EQ(OP_WSTRING_MATCH, |
| 478 policy->entry[kNtFakeCreateFile]->opcodes[0].GetID()); | 478 policy->entry[kNtFakeCreateFile]->opcodes[0].GetID()); |
| 479 EXPECT_EQ(OP_ACTION, | 479 EXPECT_EQ(OP_ACTION, |
| 480 policy->entry[kNtFakeCreateFile]->opcodes[tc2-1].GetID()); | 480 policy->entry[kNtFakeCreateFile]->opcodes[tc2-1].GetID()); |
| 481 EXPECT_EQ(OP_WSTRING_MATCH, | 481 EXPECT_EQ(OP_WSTRING_MATCH, |
| 482 policy->entry[kNtFakeOpenFile]->opcodes[0].GetID()); | 482 policy->entry[kNtFakeOpenFile]->opcodes[0].GetID()); |
| 483 EXPECT_EQ(OP_ACTION, policy->entry[kNtFakeOpenFile]->opcodes[tc3-1].GetID()); | 483 EXPECT_EQ(OP_ACTION, policy->entry[kNtFakeOpenFile]->opcodes[tc3-1].GetID()); |
| 484 | 484 |
| 485 // Test the policy evaluation. | 485 // Test the policy evaluation. |
| 486 | 486 |
| 487 wchar_t* filename = L""; | 487 const wchar_t* filename = L""; |
| 488 unsigned long creation_mode = OPEN_EXISTING; | 488 unsigned long creation_mode = OPEN_EXISTING; |
| 489 unsigned long flags = FILE_ATTRIBUTE_NORMAL; | 489 unsigned long flags = FILE_ATTRIBUTE_NORMAL; |
| 490 void* security_descriptor = NULL; | 490 void* security_descriptor = NULL; |
| 491 | 491 |
| 492 POLPARAMS_BEGIN(params) | 492 POLPARAMS_BEGIN(params) |
| 493 POLPARAM(filename) // Argument 0 | 493 POLPARAM(filename) // Argument 0 |
| 494 POLPARAM(creation_mode) // Argument 1 | 494 POLPARAM(creation_mode) // Argument 1 |
| 495 POLPARAM(flags) // Argument 2 | 495 POLPARAM(flags) // Argument 2 |
| 496 POLPARAM(security_descriptor) | 496 POLPARAM(security_descriptor) |
| 497 POLPARAMS_END; | 497 POLPARAMS_END; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 581 PolicyRule pr_copy(pr_orig); | 581 PolicyRule pr_copy(pr_orig); |
| 582 EXPECT_TRUE(pr_orig.AddStringMatch(IF_NOT, 0, L"*.txt", CASE_SENSITIVE)); | 582 EXPECT_TRUE(pr_orig.AddStringMatch(IF_NOT, 0, L"*.txt", CASE_SENSITIVE)); |
| 583 EXPECT_TRUE(pr_copy.AddStringMatch(IF_NOT, 0, L"*.txt", CASE_SENSITIVE)); | 583 EXPECT_TRUE(pr_copy.AddStringMatch(IF_NOT, 0, L"*.txt", CASE_SENSITIVE)); |
| 584 | 584 |
| 585 PolicyGlobal* policy = MakePolicyMemory(); | 585 PolicyGlobal* policy = MakePolicyMemory(); |
| 586 LowLevelPolicy policyGen(policy); | 586 LowLevelPolicy policyGen(policy); |
| 587 EXPECT_TRUE(policyGen.AddRule(1, &pr_orig)); | 587 EXPECT_TRUE(policyGen.AddRule(1, &pr_orig)); |
| 588 EXPECT_TRUE(policyGen.AddRule(2, &pr_copy)); | 588 EXPECT_TRUE(policyGen.AddRule(2, &pr_copy)); |
| 589 EXPECT_TRUE(policyGen.Done()); | 589 EXPECT_TRUE(policyGen.Done()); |
| 590 | 590 |
| 591 wchar_t* name = NULL; | 591 const wchar_t* name = NULL; |
| 592 POLPARAMS_BEGIN(eval_params) | 592 POLPARAMS_BEGIN(eval_params) |
| 593 POLPARAM(name) | 593 POLPARAM(name) |
| 594 POLPARAMS_END; | 594 POLPARAMS_END; |
| 595 | 595 |
| 596 PolicyResult result; | 596 PolicyResult result; |
| 597 PolicyProcessor pol_ev_orig(policy->entry[1]); | 597 PolicyProcessor pol_ev_orig(policy->entry[1]); |
| 598 name = L"domo.txt"; | 598 name = L"domo.txt"; |
| 599 result = pol_ev_orig.Evaluate(kShortEval, eval_params, _countof(eval_params)); | 599 result = pol_ev_orig.Evaluate(kShortEval, eval_params, _countof(eval_params)); |
| 600 EXPECT_EQ(NO_POLICY_MATCH, result); | 600 EXPECT_EQ(NO_POLICY_MATCH, result); |
| 601 | 601 |
| 602 name = L"hello.bmp"; | 602 name = L"hello.bmp"; |
| 603 result = pol_ev_orig.Evaluate(kShortEval, eval_params, _countof(eval_params)); | 603 result = pol_ev_orig.Evaluate(kShortEval, eval_params, _countof(eval_params)); |
| 604 EXPECT_EQ(POLICY_MATCH, result); | 604 EXPECT_EQ(POLICY_MATCH, result); |
| 605 EXPECT_EQ(ASK_BROKER, pol_ev_orig.GetAction()); | 605 EXPECT_EQ(ASK_BROKER, pol_ev_orig.GetAction()); |
| 606 | 606 |
| 607 PolicyProcessor pol_ev_copy(policy->entry[2]); | 607 PolicyProcessor pol_ev_copy(policy->entry[2]); |
| 608 name = L"domo.txt"; | 608 name = L"domo.txt"; |
| 609 result = pol_ev_copy.Evaluate(kShortEval, eval_params, _countof(eval_params)); | 609 result = pol_ev_copy.Evaluate(kShortEval, eval_params, _countof(eval_params)); |
| 610 EXPECT_EQ(NO_POLICY_MATCH, result); | 610 EXPECT_EQ(NO_POLICY_MATCH, result); |
| 611 | 611 |
| 612 name = L"hello.bmp"; | 612 name = L"hello.bmp"; |
| 613 result = pol_ev_copy.Evaluate(kShortEval, eval_params, _countof(eval_params)); | 613 result = pol_ev_copy.Evaluate(kShortEval, eval_params, _countof(eval_params)); |
| 614 EXPECT_EQ(POLICY_MATCH, result); | 614 EXPECT_EQ(POLICY_MATCH, result); |
| 615 EXPECT_EQ(ASK_BROKER, pol_ev_copy.GetAction()); | 615 EXPECT_EQ(ASK_BROKER, pol_ev_copy.GetAction()); |
| 616 } | 616 } |
| 617 } // namespace sandbox | 617 } // namespace sandbox |
| OLD | NEW |