cynara.check(data[0][0], session, data[0][1], data[0][2], CYNARA_API_ACCESS_DENIED);
cynara.check(data[1][0], session, data[1][1], data[1][2], CYNARA_API_ACCESS_DENIED);
}
+
+void checkAllDeny(const std::vector< std::vector<const char *> > &data,
+ const char *session)
+{
+ CynaraTestClient cynara;
+
+ for (auto it = data.begin(); it != data.end(); ++it) {
+ RUNNER_ASSERT_MSG_BT(it->size() == 3, "Wrong test data size");
+ }
+
+ for (auto itClient = data.begin(); itClient != data.end(); ++itClient) {
+ for (auto itUser = data.begin(); itUser != data.end(); ++itUser) {
+ for (auto itPrivilege = data.begin(); itPrivilege != data.end(); ++itPrivilege) {
+ cynara.check(itClient->at(0), session, itUser->at(1), itPrivilege->at(2), CYNARA_API_ACCESS_DENIED);
+ }
+ }
+ }
+}
+
+void checkSingleWildcardData(const std::vector< std::vector<const char *> > &data)
+{
+ RUNNER_ASSERT_MSG_BT(data.size() == 3, "Wrong test data size");
+ for (auto it = data.begin(); it != data.end(); ++it) {
+ RUNNER_ASSERT_MSG_BT(it->size() == 3, "Wrong test data size");
+ }
+}
+
+void checkSingleWildcardAllowRestDeny(const std::vector< std::vector<const char *> > &data,
+ const char *session)
+{
+ CynaraTestClient cynara;
+
+ checkSingleWildcardData(data);
+
+ for (size_t c = 0; c < data.size(); ++c) {
+ for (size_t u = 0; u < data.size(); ++u) {
+ for (size_t p = 0; p < data.size(); ++p) {
+ if ((u == 0 && p == 0)
+ || (c == 1 && p == 1)
+ || (c == 2 && u == 2)) {
+ cynara.check(data[c][0], session, data[u][1], data[p][2], CYNARA_API_SUCCESS);
+ } else {
+ cynara.check(data[c][0], session, data[u][1], data[p][2], CYNARA_API_ACCESS_DENIED);
+ }
+ }
+ }
+ }
+}
+
+void setSingleWildcardPolicies(const char *bucket,
+ const std::vector< std::vector<const char *> > &data,
+ const int result, const char* resultExtra)
+{
+ CynaraTestAdmin admin;
+ CynaraPoliciesContainer cp;
+
+ checkSingleWildcardData(data);
+
+ cp.add(bucket,
+ CYNARA_ADMIN_WILDCARD, data[0][1], data[0][2],
+ result, resultExtra);
+ cp.add(bucket,
+ data[1][0], CYNARA_ADMIN_WILDCARD, data[1][2],
+ result, resultExtra);
+ cp.add(bucket,
+ data[2][0], data[2][1], CYNARA_ADMIN_WILDCARD,
+ result, resultExtra);
+
+ admin.setPolicies(cp);
+}
+
+RUNNER_TEST(tc09_admin_set_policies_wildcard_accesses)
+{
+ const char *bucket = CYNARA_ADMIN_DEFAULT_BUCKET;
+ const char *session = "session09";
+ const char *resultExtra = nullptr;
+
+ const std::vector< std::vector<const char *> > data = {
+ { "client09_a", "user09_a", "privilege09_a" },
+ { "client09_b", "user09_b", "privilege09_b" },
+ { "client09_c", "user09_c", "privilege09_c" }
+ };
+
+ checkAllDeny(data, session);
+
+ setSingleWildcardPolicies(bucket, data, CYNARA_ADMIN_ALLOW, resultExtra);
+
+ checkSingleWildcardAllowRestDeny(data, session);
+
+ setSingleWildcardPolicies(bucket, data, CYNARA_ADMIN_DELETE, resultExtra);
+
+ checkAllDeny(data, session);
+}