4 * Copyright (c) 2019-2020 Samsung Electronics Co., Ltd
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is furnished
11 * to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25 #include "serialization_backend.hpp"
26 #include <boost/tokenizer.hpp>
27 #include <sys/types.h>
29 namespace ldp_serialized {
31 class StorageBackendSerialized
34 StorageBackendSerialized();
35 ~StorageBackendSerialized();
37 bool init(const char *filename, bool verify = false);
38 bool initFromData(const uint8_t *serialized_data, size_t length, bool verify = false);
41 void printContent(bool xml_format = false) const;
43 // Supported template parameters are:
44 // MatchItemOwn, MatchItemSend, MatchItemReceive
45 // and - only for Contexts - MatchItemAccess
46 template <typename MatchItem>
47 ldp_xml_parser::DecisionItem getDecisionItemContextMandatory(const MatchItem &item) const;
48 template <typename MatchItem>
49 ldp_xml_parser::DecisionItem getDecisionItemContextDefault(const MatchItem &item) const;
50 template <typename MatchItem>
51 ldp_xml_parser::DecisionItem getDecisionItemUser(uid_t uid, const MatchItem &item) const;
52 template <typename MatchItem>
53 ldp_xml_parser::DecisionItem getDecisionItemGroup(gid_t gid, const MatchItem &item) const;
55 // This works with MatchItem set to MatchItemOwn, MatchItemSend or MatchItemReceive
56 // This is needed for filtering mapGroups. Check NaivePolicyChecker.
57 template <typename MatchItem>
58 bool existsPolicyForGroup(gid_t gid) const;
61 typedef typename ldp_serialization::SerializationBackend::Storage Backend;
64 // Set max size of serialized file to prevent mmap with unexpected memory size.
66 static const size_t MAX_SFILE_SIZE{1024 * 1024};
75 template <typename MatchItem>
76 auto getPolicySet() const;
78 template <typename T, typename P>
79 ldp_xml_parser::DecisionItem getDecisionItem(const T &item, const P &policy, ldp_serialization::ItemsType) const;
81 template <typename T, typename P>
82 ldp_xml_parser::DecisionItem getDecisionItem(const T &item, const P &policy, ldp_serialization::TreeType) const;
84 template <typename T, typename P>
85 ldp_xml_parser::DecisionItem getDecisionItem(const T &item, const P &policy) const;
88 ldp_xml_parser::DecisionItem getDecisionItem(const ldp_xml_parser::MatchItemSend &item, const P &policy) const;
90 template <typename MatchItem, typename Map>
91 ldp_xml_parser::DecisionItem getDecisionItem(const MatchItem &item, const Map &map, id_t id) const;
93 typedef boost::tokenizer<boost::char_separator<char>> tokenizer;
95 template <typename OwnNode>
96 auto getDecisionItemFromTree(const OwnNode &node,
97 const tokenizer::iterator &tokens,
98 tokenizer::iterator &iterator) const;
100 template <typename T, typename I>
101 bool match(const T &match, const I &item) const;
103 template <typename I>
104 bool match(const ldp_xml_parser::MatchItemAccess &match, const I &item) const;
106 template <typename DI>
107 ldp_xml_parser::DecisionItem makeDecisionItem(const DI &item) const;
109 template <typename String>
110 boost::string_ref toStringRef(const String &str) const;