OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "sandbox/src/policy_engine_params.h" | |
6 #include "sandbox/src/policy_engine_processor.h" | |
7 #include "testing/gtest/include/gtest/gtest.h" | |
8 | |
9 #define POLPARAMS_BEGIN(x) sandbox::ParameterSet x[] = { | |
10 #define POLPARAM(p) sandbox::ParamPickerMake(p), | |
11 #define POLPARAMS_END } | |
12 | |
13 namespace sandbox { | |
14 | |
15 bool SetupNtdllImports(); | |
16 | |
17 TEST(PolicyEngineTest, Rules1) { | |
18 SetupNtdllImports(); | |
19 | |
20 // Construct two policy rules that say: | |
21 // | |
22 // #1 | |
23 // If the path is c:\\documents and settings\\* AND | |
24 // If the creation mode is 'open existing' AND | |
25 // If the security descriptor is null THEN | |
26 // Ask the broker. | |
27 // | |
28 // #2 | |
29 // If the security descriptor is null AND | |
30 // If the path ends with *.txt AND | |
31 // If the creation mode is not 'create new' THEN | |
32 // return Access Denied. | |
33 | |
34 enum FileCreateArgs { | |
35 FileNameArg, | |
36 CreationDispositionArg, | |
37 FlagsAndAttributesArg, | |
38 SecurityAttributes | |
39 }; | |
40 | |
41 const size_t policy_sz = 1024; | |
42 PolicyBuffer* policy = reinterpret_cast<PolicyBuffer*>(new char[policy_sz]); | |
43 OpcodeFactory opcode_maker(policy, policy_sz - 0x40); | |
44 | |
45 // Add rule set #1 | |
46 opcode_maker.MakeOpWStringMatch(FileNameArg, | |
47 L"c:\\documents and settings\\", | |
48 0, CASE_INSENSITIVE, kPolNone); | |
49 opcode_maker.MakeOpNumberMatch(CreationDispositionArg, OPEN_EXISTING, | |
50 kPolNone); | |
51 opcode_maker.MakeOpVoidPtrMatch(SecurityAttributes, (void*)NULL, | |
52 kPolNone); | |
53 opcode_maker.MakeOpAction(ASK_BROKER, kPolNone); | |
54 | |
55 // Add rule set #2 | |
56 opcode_maker.MakeOpWStringMatch(FileNameArg, L".TXT", | |
57 kSeekToEnd, CASE_INSENSITIVE, kPolNone); | |
58 opcode_maker.MakeOpNumberMatch(CreationDispositionArg, CREATE_NEW, | |
59 kPolNegateEval); | |
60 opcode_maker.MakeOpAction(FAKE_ACCESS_DENIED, kPolNone); | |
61 policy->opcode_count = 7; | |
62 | |
63 wchar_t* filename = L"c:\\Documents and Settings\\Microsoft\\BLAH.txt"; | |
64 unsigned long creation_mode = OPEN_EXISTING; | |
65 unsigned long flags = FILE_ATTRIBUTE_NORMAL; | |
66 void* security_descriptor = NULL; | |
67 | |
68 POLPARAMS_BEGIN(eval_params) | |
69 POLPARAM(filename) | |
70 POLPARAM(creation_mode) | |
71 POLPARAM(flags) | |
72 POLPARAM(security_descriptor) | |
73 POLPARAMS_END; | |
74 | |
75 PolicyResult pr; | |
76 PolicyProcessor pol_ev(policy); | |
77 | |
78 // Test should match the first rule set. | |
79 pr = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); | |
80 EXPECT_EQ(POLICY_MATCH, pr); | |
81 EXPECT_EQ(ASK_BROKER, pol_ev.GetAction()); | |
82 | |
83 // Test should still match the first rule set. | |
84 pr = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); | |
85 EXPECT_EQ(POLICY_MATCH, pr); | |
86 EXPECT_EQ(ASK_BROKER, pol_ev.GetAction()); | |
87 | |
88 // Changing creation_mode such that evaluation should not match any rule. | |
89 creation_mode = CREATE_NEW; | |
90 pr = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); | |
91 EXPECT_EQ(NO_POLICY_MATCH, pr); | |
92 | |
93 // Changing creation_mode such that evaluation should match rule #2. | |
94 creation_mode = OPEN_ALWAYS; | |
95 pr = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); | |
96 EXPECT_EQ(POLICY_MATCH, pr); | |
97 EXPECT_EQ(FAKE_ACCESS_DENIED, pol_ev.GetAction()); | |
98 | |
99 delete [] reinterpret_cast<char*>(policy); | |
100 } | |
101 | |
102 } // namespace sandbox | |
OLD | NEW |