| Index: sandbox/win/src/policy_low_level.h
|
| diff --git a/sandbox/win/src/policy_low_level.h b/sandbox/win/src/policy_low_level.h
|
| deleted file mode 100644
|
| index f77787c7723cfefba0158461aea476b8adc005ef..0000000000000000000000000000000000000000
|
| --- a/sandbox/win/src/policy_low_level.h
|
| +++ /dev/null
|
| @@ -1,193 +0,0 @@
|
| -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef SANDBOX_SRC_POLICY_LOW_LEVEL_H__
|
| -#define SANDBOX_SRC_POLICY_LOW_LEVEL_H__
|
| -
|
| -#include <stddef.h>
|
| -#include <stdint.h>
|
| -
|
| -#include <list>
|
| -
|
| -#include "base/macros.h"
|
| -#include "base/strings/string16.h"
|
| -#include "sandbox/win/src/ipc_tags.h"
|
| -#include "sandbox/win/src/policy_engine_opcodes.h"
|
| -#include "sandbox/win/src/policy_engine_params.h"
|
| -
|
| -// Low level policy classes.
|
| -// Built on top of the PolicyOpcode and OpcodeFatory, the low level policy
|
| -// provides a way to define rules on strings and numbers but it is unaware
|
| -// of Windows specific details or how the Interceptions must be set up.
|
| -// To use these classes you construct one or more rules and add them to the
|
| -// LowLevelPolicy object like this:
|
| -//
|
| -// PolicyRule rule1(ASK_BROKER);
|
| -// rule1.AddStringMatch(IF, 0, L"\\\\/?/?\\c:\\*Microsoft*\\*.exe", true);
|
| -// rule1.AddNumberMatch(IF_NOT, 1, CREATE_ALWAYS, EQUAL);
|
| -// rule1.AddNumberMatch(IF, 2, FILE_ATTRIBUTE_NORMAL, EQUAL);
|
| -//
|
| -// PolicyRule rule2(FAKE_SUCCESS);
|
| -// rule2.AddStringMatch(IF, 0, L"\\\\/?/?\\Pipe\\Chrome.*", false));
|
| -// rule2.AddNumberMatch(IF, 1, OPEN_EXISTING, EQUAL));
|
| -//
|
| -// LowLevelPolicy policyGen(*policy_memory);
|
| -// policyGen.AddRule(kNtCreateFileSvc, &rule1);
|
| -// policyGen.AddRule(kNtCreateFileSvc, &rule2);
|
| -// policyGen.Done();
|
| -//
|
| -// At this point (error checking omitted) the policy_memory can be copied
|
| -// to the target process where it can be evaluated.
|
| -
|
| -namespace sandbox {
|
| -
|
| -// TODO(cpu): Move this constant to crosscall_client.h.
|
| -const size_t kMaxServiceCount = 32;
|
| -static_assert(IPC_LAST_TAG <= kMaxServiceCount,
|
| - "kMaxServiceCount is too low");
|
| -
|
| -// Defines the memory layout of the policy. This memory is filled by
|
| -// LowLevelPolicy object.
|
| -// For example:
|
| -//
|
| -// [Service 0] --points to---\
|
| -// [Service 1] --------------|-----\
|
| -// ...... | |
|
| -// [Service N] | |
|
| -// [data_size] | |
|
| -// [Policy Buffer 0] <-------/ |
|
| -// [opcodes of] |
|
| -// ....... |
|
| -// [Policy Buffer 1] <-------------/
|
| -// [opcodes]
|
| -// .......
|
| -// .......
|
| -// [Policy Buffer N]
|
| -// [opcodes]
|
| -// .......
|
| -// <possibly unused space here>
|
| -// .......
|
| -// [opcode string ]
|
| -// [opcode string ]
|
| -// .......
|
| -// [opcode string ]
|
| -struct PolicyGlobal {
|
| - PolicyBuffer* entry[kMaxServiceCount];
|
| - size_t data_size;
|
| - PolicyBuffer data[1];
|
| -};
|
| -
|
| -class PolicyRule;
|
| -
|
| -// Provides the means to collect rules into a policy store (memory)
|
| -class LowLevelPolicy {
|
| - public:
|
| - // policy_store: must contain allocated memory and the internal
|
| - // size fields set to correct values.
|
| - explicit LowLevelPolicy(PolicyGlobal* policy_store);
|
| -
|
| - // Destroys all the policy rules.
|
| - ~LowLevelPolicy();
|
| -
|
| - // Adds a rule to be generated when Done() is called.
|
| - // service: The id of the service that this rule is associated with,
|
| - // for example the 'Open Thread' service or the "Create File" service.
|
| - // returns false on error.
|
| - bool AddRule(int service, PolicyRule* rule);
|
| -
|
| - // Generates all the rules added with AddRule() into the memory area
|
| - // passed on the constructor. Returns false on error.
|
| - bool Done();
|
| -
|
| - private:
|
| - struct RuleNode {
|
| - const PolicyRule* rule;
|
| - int service;
|
| - };
|
| - std::list<RuleNode> rules_;
|
| - PolicyGlobal* policy_store_;
|
| - DISALLOW_IMPLICIT_CONSTRUCTORS(LowLevelPolicy);
|
| -};
|
| -
|
| -// There are 'if' rules and 'if not' comparisons
|
| -enum RuleType {
|
| - IF = 0,
|
| - IF_NOT = 1,
|
| -};
|
| -
|
| -// Possible comparisons for numbers
|
| -enum RuleOp {
|
| - EQUAL,
|
| - AND,
|
| - RANGE // TODO(cpu): Implement this option.
|
| -};
|
| -
|
| -// Provides the means to collect a set of comparisons into a single
|
| -// rule and its associated action.
|
| -class PolicyRule {
|
| - friend class LowLevelPolicy;
|
| -
|
| - public:
|
| - explicit PolicyRule(EvalResult action);
|
| - PolicyRule(const PolicyRule& other);
|
| - ~PolicyRule();
|
| -
|
| - // Adds a string comparison to the rule.
|
| - // rule_type: possible values are IF and IF_NOT.
|
| - // parameter: the expected index of the argument for this rule. For example
|
| - // in a 'create file' service the file name argument can be at index 0.
|
| - // string: is the desired matching pattern.
|
| - // match_opts: if the pattern matching is case sensitive or not.
|
| - bool AddStringMatch(RuleType rule_type,
|
| - int16_t parameter,
|
| - const wchar_t* string,
|
| - StringMatchOptions match_opts);
|
| -
|
| - // Adds a number match comparison to the rule.
|
| - // rule_type: possible values are IF and IF_NOT.
|
| - // parameter: the expected index of the argument for this rule.
|
| - // number: the value to compare the input to.
|
| - // comparison_op: the comparison kind (equal, logical and, etc).
|
| - bool AddNumberMatch(RuleType rule_type,
|
| - int16_t parameter,
|
| - uint32_t number,
|
| - RuleOp comparison_op);
|
| -
|
| - // Returns the number of opcodes generated so far.
|
| - size_t GetOpcodeCount() const {
|
| - return buffer_->opcode_count;
|
| - }
|
| -
|
| - // Called when there is no more comparisons to add. Internally it generates
|
| - // the last opcode (the action opcode). Returns false if this operation fails.
|
| - bool Done();
|
| -
|
| - private:
|
| - void operator=(const PolicyRule&);
|
| - // Called in a loop from AddStringMatch to generate the required string
|
| - // match opcodes. rule_type, match_opts and parameter are the same as
|
| - // in AddStringMatch.
|
| - bool GenStringOpcode(RuleType rule_type,
|
| - StringMatchOptions match_opts,
|
| - uint16_t parameter,
|
| - int state,
|
| - bool last_call,
|
| - int* skip_count,
|
| - base::string16* fragment);
|
| -
|
| - // Loop over all generated opcodes and copy them to increasing memory
|
| - // addresses from opcode_start and copy the extra data (strings usually) into
|
| - // decreasing addresses from data_start. Extra data is only present in the
|
| - // string evaluation opcodes.
|
| - bool RebindCopy(PolicyOpcode* opcode_start, size_t opcode_size,
|
| - char* data_start, size_t* data_size) const;
|
| - PolicyBuffer* buffer_;
|
| - OpcodeFactory* opcode_factory_;
|
| - EvalResult action_;
|
| - bool done_;
|
| -};
|
| -
|
| -} // namespace sandbox
|
| -
|
| -#endif // SANDBOX_SRC_POLICY_LOW_LEVEL_H__
|
|
|