}
return &(it->second);
}
+
+ const std::map<uid_t, P> &getPoliciesUser() const { return user; }
+ const std::map<uid_t, P> &getPoliciesGroup() const { return group; }
};
/****************** NoUserAndGroupContext ************************/
}
}
+ const P &getRefPolicyContextMandatory() const { return contextMandatory; }
+ const P &getRefPolicyContextDefault() const { return contextDefault; }
+
const P *getPolicyContextMandatory() const {
tslog::log("---policy_type = CONTEXT = MANDATORY\n");
return &contextMandatory;
typedef decltype(field)::policy_type policy_type; \
typedef decltype(field) policy_set_type; \
}; \
+ template <> struct NaivePolicyDb::NaivePolicyDbImpl::MatchPolicy<typename decltype(NaivePolicyDb::NaivePolicyDbImpl::field)::policy_type> { \
+ typedef decltype(field) policy_set_type; \
+ }; \
template <> \
auto NaivePolicyDb::NaivePolicyDbImpl::getPolicySet<T>() const -> decltype((field)) { \
return field; \
template <> \
auto NaivePolicyDb::NaivePolicyDbImpl::getPolicySet<T>() -> decltype((field)) { \
return field; \
+ } \
+ template <> \
+ auto NaivePolicyDb::NaivePolicyDbImpl::getPolicySet<typename decltype(NaivePolicyDb::NaivePolicyDbImpl::field)::policy_type>() -> decltype((field)) { \
+ return field; \
}
DEF_GET_POLICY_SET(MatchItemOwn, m_own_set)
pimpl = std::unique_ptr<NaivePolicyDbImpl>{new NaivePolicyDbImpl};
}
-NaivePolicyDb::NaivePolicyDb() : pimpl{new NaivePolicyDbImpl} { }
+template <typename T>
+const T &NaivePolicyDb::getPolicyContextMandatory() const {
+ return pimpl->getPolicySet<T>().getRefPolicyContextMandatory();
+}
+
+template <typename T>
+const T &NaivePolicyDb::getPolicyContextDefault() const {
+ return pimpl->getPolicySet<T>().getRefPolicyContextDefault();
+}
+
+template <typename T>
+const std::map<uid_t, T> &NaivePolicyDb::getPoliciesUser() const {
+ return pimpl->getPolicySet<T>().getPoliciesUser();
+}
+
+template <typename T>
+const std::map<gid_t, T> &NaivePolicyDb::getPoliciesGroup() const {
+ return pimpl->getPolicySet<T>().getPoliciesGroup();
+}
+
+NaivePolicyDb::NaivePolicyDb() : pimpl{new NaivePolicyDbImpl} {
+}
NaivePolicyDb::~NaivePolicyDb() = default;
T_INSTANTIATION3(ItemReceive)
T_INSTANTIATION3(ItemAccess)
+#define T_INSTANTIATION4(T) \
+ template const T &NaivePolicyDb::getPolicyContextMandatory() const; \
+ template const T &NaivePolicyDb::getPolicyContextDefault() const;
+
+T_INSTANTIATION4(PolicyOwn)
+T_INSTANTIATION4(PolicySend)
+T_INSTANTIATION4(PolicyReceive)
+T_INSTANTIATION4(PolicyAccess)
+
+#define T_INSTANTIATION5(T) \
+ template const std::map<uid_t, T> &NaivePolicyDb::getPoliciesGroup() const; \
+ template const std::map<gid_t, T> &NaivePolicyDb::getPoliciesUser() const;
+
+T_INSTANTIATION5(PolicyOwn)
+T_INSTANTIATION5(PolicySend)
+T_INSTANTIATION5(PolicyReceive)
+
#undef T_INSTANTIATION
#undef T_INSTANTIATION2
#undef T_INSTANTIATION3
+#undef T_INSTANTIATION4
+#undef T_INSTANTIATION5
} // namespace ldp_xml_parser
#include <memory>
#include <vector>
+#include <map>
+#include <sys/types.h>
#include "policy.hpp"
/**
T &item);
void clear();
+
+ // The getPolicy*() methods are intended for Serializers to get
+ // access to policy structures.
+ // Supported template parameters are: PolicyOwn, PolicySend, PolicyReceive
+ // and for PolicyAccess only getPolicyContext*()
+ template <typename T>
+ const T &getPolicyContextMandatory() const;
+ template <typename T>
+ const T &getPolicyContextDefault() const;
+ template <typename T>
+ const std::map<uid_t, T> &getPoliciesUser() const;
+ template <typename T>
+ const std::map<gid_t, T> &getPoliciesGroup() const;
};
}
#endif