From 3ebcba1f31bf9d3b24ae9d5bea284427ff28fcb5 Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Mon, 15 Sep 2014 19:16:17 +0200 Subject: [PATCH] Add adminCheck() method prototype in admin Logic Implement external API using newly added method. Change-Id: If086d8e33caaec87da5cbb2c25e6dd4163c01048 --- src/admin/api/ApiInterface.h | 4 ++++ src/admin/api/admin-api.cpp | 30 +++++++++++++++++++++++++++--- src/admin/logic/Logic.cpp | 6 ++++++ src/admin/logic/Logic.h | 2 ++ 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/admin/api/ApiInterface.h b/src/admin/api/ApiInterface.h index eb2b17b..fa858a6 100644 --- a/src/admin/api/ApiInterface.h +++ b/src/admin/api/ApiInterface.h @@ -46,6 +46,10 @@ public: virtual int insertOrUpdateBucket(const PolicyBucketId &bucket, const PolicyResult &policyResult) noexcept = 0; virtual int removeBucket(const PolicyBucketId &bucket) noexcept = 0; + + virtual int adminCheck(const PolicyBucketId &startBucket, bool recursive, + const PolicyKey &key, PolicyResult &result) noexcept = 0; + }; } // namespace Cynara diff --git a/src/admin/api/admin-api.cpp b/src/admin/api/admin-api.cpp index 00cae0b..ce1c7b7 100644 --- a/src/admin/api/admin-api.cpp +++ b/src/admin/api/admin-api.cpp @@ -22,7 +22,9 @@ #include #include +#include #include +#include #include #include @@ -175,7 +177,7 @@ int cynara_admin_set_bucket(struct cynara_admin *p_cynara_admin, const char *buc CYNARA_API int cynara_admin_check(struct cynara_admin *p_cynara_admin, - const char *start_bucket, const int recursive UNUSED, + const char *start_bucket, const int recursive, const char *client, const char *user, const char *privilege, int *result, char **result_extra) { if (!p_cynara_admin || !p_cynara_admin->impl) @@ -187,6 +189,28 @@ int cynara_admin_check(struct cynara_admin *p_cynara_admin, if (!result || !result_extra) return CYNARA_ADMIN_API_INVALID_PARAM; - //just mock-up + Cynara::PolicyResult policyResult; + + try { + int ret = p_cynara_admin->impl->adminCheck(start_bucket, recursive != 0, + Cynara::PolicyKey(client, user, privilege), + policyResult); + if (ret != CYNARA_ADMIN_API_SUCCESS) + return ret; + } catch (const std::bad_alloc &ex) { + return CYNARA_ADMIN_API_OUT_OF_MEMORY; + } catch (const std::length_error &ex) { + return CYNARA_ADMIN_API_INVALID_PARAM; + } + + char *str = nullptr; + if (!policyResult.metadata().empty()) { + str = strdup(policyResult.metadata().c_str()); + if (!str) + return CYNARA_ADMIN_API_OUT_OF_MEMORY; + } + *result = static_cast(policyResult.policyType()); + *result_extra = str; + return CYNARA_ADMIN_API_SUCCESS; -} \ No newline at end of file +} diff --git a/src/admin/logic/Logic.cpp b/src/admin/logic/Logic.cpp index 0934729..93cc43f 100644 --- a/src/admin/logic/Logic.cpp +++ b/src/admin/logic/Logic.cpp @@ -114,4 +114,10 @@ int Logic::removeBucket(const PolicyBucketId &bucket) noexcept { return askCynaraAndInterpreteCodeResponse(bucket); } +int Logic::adminCheck(const PolicyBucketId &startBucket UNUSED, bool recursive UNUSED, + const PolicyKey &key UNUSED, PolicyResult &result UNUSED) noexcept { + //just mock-up + return CYNARA_ADMIN_API_SUCCESS; +} + } // namespace Cynara diff --git a/src/admin/logic/Logic.h b/src/admin/logic/Logic.h index 2d349f3..b31cbec 100644 --- a/src/admin/logic/Logic.h +++ b/src/admin/logic/Logic.h @@ -48,6 +48,8 @@ public: noexcept; virtual int removeBucket(const PolicyBucketId &bucket) noexcept; + virtual int adminCheck(const PolicyBucketId &startBucket, bool recursive, + const PolicyKey &key, PolicyResult &result) noexcept; }; } // namespace Cynara -- 2.7.4