From 4f8ced1919f5d74277505980851d66c7172185a5 Mon Sep 17 00:00:00 2001 From: Jongmin Choi Date: Thu, 20 Oct 2016 11:03:41 +0900 Subject: [PATCH] Cloud ACE update - APIs added to update Cloud ACE using aclid and acid - aceid input removed from device side update API Patch #1: initial upload Patch #2: update ACE fix Patch #4: Issue fixed related to update ACE and individual ACE update. Also Acl modification Patch #5: Rebased to latest 1.2-rel Patch #7: isValidACE method added and other issue fix Patch #8-9: delete logic fix, getAclACE added, unnecessary code deleted Change-Id: I8b15fe4556536b4af4d597564ccab4cf66c55e44 Signed-off-by: Jongmin Choi Signed-off-by: Sunil Kumar K R Signed-off-by: Jongmin Choi Signed-off-by: Sunil Kumar K R Signed-off-by: Jongmin Choi Reviewed-on: https://gerrit.iotivity.org/gerrit/13049 Tested-by: jenkins-iotivity Reviewed-by: Randeep Singh (cherry picked from commit 1a2e71f9c470c7cc17157f83deb4488ee83050a4) Reviewed-on: https://gerrit.iotivity.org/gerrit/15279 --- .../provisioning/sample/cloud/cloudWrapper.c | 1 - .../provisioning/sample/cloud/cloudWrapper.h | 10 +++++++++ .../csdk/security/provisioning/src/cloud/aclid.c | 25 +++++++++++----------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/resource/csdk/security/provisioning/sample/cloud/cloudWrapper.c b/resource/csdk/security/provisioning/sample/cloud/cloudWrapper.c index cb151b8..f044be7 100644 --- a/resource/csdk/security/provisioning/sample/cloud/cloudWrapper.c +++ b/resource/csdk/security/provisioning/sample/cloud/cloudWrapper.c @@ -449,7 +449,6 @@ OCStackResult OCWrapperAclIndividualUpdateAce(const OCDevAddr *endPoint, OCCloud int stype = 0; int permission = 0; - readString(aceid, sizeof(aceid), "ace id", ACE_ID_EXAMPLE); do { readString(subjectuuid, sizeof(subjectuuid), "subjectuuid", SUBJECT_ID_EXAMPLE); diff --git a/resource/csdk/security/provisioning/sample/cloud/cloudWrapper.h b/resource/csdk/security/provisioning/sample/cloud/cloudWrapper.h index 62ba04b..1df22cb 100644 --- a/resource/csdk/security/provisioning/sample/cloud/cloudWrapper.h +++ b/resource/csdk/security/provisioning/sample/cloud/cloudWrapper.h @@ -95,6 +95,16 @@ OCStackResult OCWrapperAclIndividualGetInfo(const OCDevAddr *endPoint, OCCloudRe OCStackResult OCWrapperAclIndividualUpdateAce(const OCDevAddr *endPoint, OCCloudResponseCB callback); /** + * ACL individual update. Replaces an existing ACE with a new one + * + * @param[in] endPoint cloud host and port + * @param[in] callback result callback + * @return OCStackResult application result + */ + +OCStackResult OCWrapperAclIndividualUpdate(const OCDevAddr *endPoint, OCCloudResponseCB callback); + +/** * ACL individual delete * * @param[in] endPoint cloud host and port diff --git a/resource/csdk/security/provisioning/src/cloud/aclid.c b/resource/csdk/security/provisioning/src/cloud/aclid.c index 57ccef0..e2424db 100644 --- a/resource/csdk/security/provisioning/src/cloud/aclid.c +++ b/resource/csdk/security/provisioning/src/cloud/aclid.c @@ -290,7 +290,6 @@ OCStackResult OCCloudAclIndividualUpdateAce(void* ctx, OIC_LOG(ERROR, TAG, "Can't convert subjectuuid to string"); } - OCRepPayloadSetPropString(payload, OC_RSRVD_ACE_ID, ace->aceId); OCRepPayloadSetPropString(payload, OC_RSRVD_SUBJECT_UUID, (const char *)uuid); OCRepPayloadSetPropInt(payload, OC_RSRVD_SUBJECT_TYPE, ace->stype); OCRepPayloadSetPropInt(payload, OC_RSRVD_PERMISSION_MASK, ace->permission); @@ -371,7 +370,7 @@ no_memory: OCStackResult OCCloudAclIndividualUpdate(void* ctx, const char *aclId, const char *aceId, - const cloudAce_t *ace, + const cloudAce_t *aces, const OCDevAddr *endPoint, OCCloudResponseCB callback) { @@ -385,10 +384,11 @@ OCStackResult OCCloudAclIndividualUpdate(void* ctx, VERIFY_NON_NULL_RET(endPoint, TAG, "NULL endpoint", OC_STACK_INVALID_PARAM); VERIFY_NON_NULL_RET(aclId, TAG, "NULL input param", OC_STACK_INVALID_PARAM); - VERIFY_NON_NULL_RET(ace, TAG, "NULL input param", OC_STACK_INVALID_PARAM); + VERIFY_NON_NULL_RET(aces, TAG, "NULL input param", OC_STACK_INVALID_PARAM); - snprintf(uri, MAX_URI_LENGTH, "%s%s:%d%s/%s", DEFAULT_PREFIX, - endPoint->addr, endPoint->port, OC_RSRVD_ACL_ID_URL, aclId); + snprintf(uri, MAX_URI_LENGTH, "%s%s:%d%s/%s?%s=%s", DEFAULT_PREFIX, + endPoint->addr, endPoint->port, OC_RSRVD_ACL_ID_URL, aclId, + OC_RSRVD_ACE_ID, aceId); OCRepPayload *payload = OCRepPayloadCreate(); if (!payload) @@ -407,9 +407,9 @@ OCStackResult OCCloudAclIndividualUpdate(void* ctx, } i = 0; - cloudAce_t *tempAce = NULL; + cloudAce_t *ace = NULL; - LL_FOREACH((cloudAce_t*)ace, tempAce) + LL_FOREACH((cloudAce_t*)aces, ace) { OCRepPayload *payload = OCRepPayloadCreate(); if (!payload) @@ -420,22 +420,21 @@ OCStackResult OCCloudAclIndividualUpdate(void* ctx, helperPayload[i++] = payload; char *uuid = NULL; - if (OC_STACK_OK != ConvertUuidToStr(&tempAce->subjectuuid, &uuid)) + if (OC_STACK_OK != ConvertUuidToStr(&ace->subjectuuid, &uuid)) { OIC_LOG(ERROR, TAG, "Can't convert subjectuuid to string"); } - OCRepPayloadSetPropString(payload, OC_RSRVD_ACE_ID, tempAce->aceId); OCRepPayloadSetPropString(payload, OC_RSRVD_SUBJECT_UUID, (const char *)uuid); - OCRepPayloadSetPropInt(payload, OC_RSRVD_SUBJECT_TYPE, tempAce->stype); - OCRepPayloadSetPropInt(payload, OC_RSRVD_PERMISSION_MASK, tempAce->permission); + OCRepPayloadSetPropInt(payload, OC_RSRVD_SUBJECT_TYPE, ace->stype); + OCRepPayloadSetPropInt(payload, OC_RSRVD_PERMISSION_MASK, ace->permission); OICFree(uuid); int reslist_count = 0; //code below duplicates LL_COUNT, implemented in newer version of utlist.h { - OicSecRsrc_t *res = tempAce->resources; + OicSecRsrc_t *res = ace->resources; while (res) { res = res->next; @@ -452,7 +451,7 @@ OCStackResult OCCloudAclIndividualUpdate(void* ctx, j = 0; OicSecRsrc_t *res = NULL; - LL_FOREACH(tempAce->resources, res) + LL_FOREACH(ace->resources, res) { OCRepPayload *payload = OCRepPayloadCreate(); if (!payload) -- 2.7.4