From: Adrian Szyndela Date: Fri, 25 Oct 2019 11:35:59 +0000 (+0200) Subject: refactoring: move local functions to an anonymous namespace X-Git-Tag: accepted/tizen/unified/20191101.042158~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F95%2F216495%2F1;p=platform%2Fcore%2Fsystem%2Flibdbuspolicy.git refactoring: move local functions to an anonymous namespace Change-Id: I9d9cf07877d59df88305e8847c3156a73e82efd8 --- diff --git a/src/internal/storage_backend_serialized.cpp b/src/internal/storage_backend_serialized.cpp index 4859951..cf37c6b 100644 --- a/src/internal/storage_backend_serialized.cpp +++ b/src/internal/storage_backend_serialized.cpp @@ -43,6 +43,85 @@ typedef boost::tokenizer> tokenizer; template struct type_helper; +namespace { + +inline boost::string_ref s(const flatbuffers::String *str) { + return boost::string_ref(str->c_str(), str->size()); +} + +template +bool match(const T &match, const I *i) { + return match.match(makeMessageType(i->type()), + s(i->interface()), + s(i->path()), + s(i->member()), + s(i->name()), + i->is_name_prefix(), + makeDecision(i->decision()->decision())); +} + +template <> bool match(const ldp_xml_parser::MatchItemAccess &match, const FB::ItemAccess *item) { + return match.match(makeBusAccessType(item->type()), item->uid(), item->gid()); +} + +template ::policy_type> +ldp_xml_parser::DecisionItem getDecisionItem(const T &item, const P *policy) { + const auto *v = policy->items(); + for (auto it = v->rbegin(); it != v->rend(); ++it) { + if (match(item, *it)) + return makeDecisionItem((*it)->decision()); + } + return ldp_xml_parser::Decision::ANY; +} + +const DecisionItem *getDecisionItemFromTree(const FB::PolicyOwnNode *node, + tokenizer &tokens, + tokenizer::iterator &iterator) { + if (iterator == tokens.end()) { + if (node->decision_item()->decision() != Decision_ANY) + return node->decision_item(); + else + return node->prefix_decision_item(); + } + + auto child = node->children()->LookupByKey(iterator->c_str()); + if (nullptr == child) + return node->prefix_decision_item(); + + ++iterator; + const DecisionItem *child_decision = getDecisionItemFromTree(child, tokens, iterator); + if (child_decision->decision() == Decision_ANY) + return node->prefix_decision_item(); + + return child_decision; +} + +template <> ldp_xml_parser::DecisionItem getDecisionItem(const ldp_xml_parser::MatchItemOwn &item, + const PolicyOwn *policy) { + if (item.getName().length() == 0) + return ldp_xml_parser::Decision::DENY; + + boost::char_separator separator("."); + tokenizer tokens(item.getName(), separator); + + auto node = policy->tree(); + if (nullptr == node) + return ldp_xml_parser::Decision::ANY; + + auto iterator = tokens.begin(); + + return makeDecisionItem(getDecisionItemFromTree(node, tokens, iterator)); +} + +template ::policy_type> +ldp_xml_parser::DecisionItem getDecisionItemMaybeNull(const T &item, const P *policyPair) { + if (nullptr == policyPair) + return ldp_xml_parser::Decision::ANY; + return getDecisionItem(item, policyPair->policy()); +} + +} // anonymous namespace + class StorageBackendSerialized::StorageBackendSerializedImpl { int fd{-1}; uint8_t *mem{static_cast(MAP_FAILED)}; @@ -82,21 +161,6 @@ public: const M *getPolicySet(); }; -inline boost::string_ref s(const flatbuffers::String *str) { - return boost::string_ref(str->c_str(), str->size()); -} - -template -bool match(const T &match, const I *i) { - return match.match(makeMessageType(i->type()), - s(i->interface()), - s(i->path()), - s(i->member()), - s(i->name()), - i->is_name_prefix(), - makeDecision(i->decision()->decision())); -} - ldp_xml_parser::DecisionItem StorageBackendSerialized::StorageBackendSerializedImpl::getDecisionFromSendIndex(const MatchItemSend &item, const MapIndex &index, const SendPrefixIndex &prefixIndex) { ldp_xml_parser::DecisionItem decision(ldp_xml_parser::Decision::ANY); @@ -333,66 +397,6 @@ void StorageBackendSerialized::printContent(const bool xml_format) const { pimpl->printContent(xml_format); } -template <> bool match(const ldp_xml_parser::MatchItemAccess &match, const FB::ItemAccess *item) { - return match.match(makeBusAccessType(item->type()), item->uid(), item->gid()); -} - -template ::policy_type> -ldp_xml_parser::DecisionItem getDecisionItem(const T &item, const P *policy) { - const auto *v = policy->items(); - for (auto it = v->rbegin(); it != v->rend(); ++it) { - if (match(item, *it)) - return makeDecisionItem((*it)->decision()); - } - return ldp_xml_parser::Decision::ANY; -} - -const DecisionItem *getDecisionItemFromTree(const FB::PolicyOwnNode *node, - tokenizer &tokens, - tokenizer::iterator &iterator) { - if (iterator == tokens.end()) { - if (node->decision_item()->decision() != Decision_ANY) - return node->decision_item(); - else - return node->prefix_decision_item(); - } - - auto child = node->children()->LookupByKey(iterator->c_str()); - if (nullptr == child) - return node->prefix_decision_item(); - - ++iterator; - const DecisionItem *child_decision = getDecisionItemFromTree(child, tokens, iterator); - if (child_decision->decision() == Decision_ANY) - return node->prefix_decision_item(); - - return child_decision; -} - -template <> ldp_xml_parser::DecisionItem getDecisionItem(const ldp_xml_parser::MatchItemOwn &item, - const PolicyOwn *policy) { - if (item.getName().length() == 0) - return ldp_xml_parser::Decision::DENY; - - boost::char_separator separator("."); - tokenizer tokens(item.getName(), separator); - - auto node = policy->tree(); - if (nullptr == node) - return ldp_xml_parser::Decision::ANY; - - auto iterator = tokens.begin(); - - return makeDecisionItem(getDecisionItemFromTree(node, tokens, iterator)); -} - -template ::policy_type> -ldp_xml_parser::DecisionItem getDecisionItemMaybeNull(const T &item, const P *policyPair) { - if (nullptr == policyPair) - return ldp_xml_parser::Decision::ANY; - return getDecisionItem(item, policyPair->policy()); -} - template ldp_xml_parser::DecisionItem StorageBackendSerialized::getDecisionItemContextMandatory(const T &item) const { return getDecisionItem(item, pimpl->getPolicySet()->context_mandatory());