[IOT-3007] Delete for /acl and /cred 59/24359/3
authorNathan Heldt-Sheller <nathan.heldt-sheller@intel.com>
Thu, 8 Mar 2018 21:23:39 +0000 (13:23 -0800)
committerAleksey Volkov <a.volkov@samsung.com>
Mon, 12 Mar 2018 09:00:52 +0000 (09:00 +0000)
Delete should be disallowed in RESET and RFNOP, just like Update is.

This is documented in CR 1805; see JIRA 3007 for details.

Change-Id: Ice108d3efa696b14e23e0e184784f0c17eacc524
Signed-off-by: Nathan Heldt-Sheller <nathan.heldt-sheller@intel.com>
resource/csdk/security/src/aclresource.c
resource/csdk/security/src/credresource.c

index 65ea366..ac9b77e 100644 (file)
@@ -3113,6 +3113,17 @@ static OCEntityHandlerResult HandleACLDeleteRequest(const OCEntityHandlerRequest
 
     VERIFY_NOT_NULL(TAG, ehRequest->query, ERROR);
 
+    OicSecDostype_t dos;
+    VERIFY_SUCCESS(TAG, OC_STACK_OK == GetDos(&dos), ERROR);
+    ehRet = OC_EH_OK;
+    if ((DOS_RESET == dos.state) ||
+        (DOS_RFNOP == dos.state))
+    {
+        OIC_LOG_V(WARNING, TAG, "%s /acl resource is read-only in RESET and RFNOP.", __func__);
+        ehRet = OC_EH_NOT_ACCEPTABLE;
+        goto exit;
+    }
+
     if (GetAceIdsFromQueryString(ehRequest->query, &aceIdList))
     {
         if (OC_STACK_RESOURCE_DELETED == RemoveAceByAceIds(aceIdList))
index eb6c9aa..48bae8f 100644 (file)
@@ -2340,15 +2340,12 @@ static OCEntityHandlerResult HandlePostRequest(OCEntityHandlerRequest* ehRequest
     OCEntityHandlerResult ret = OC_EH_INTERNAL_SERVER_ERROR;
     OIC_LOG(DEBUG, TAG, "HandleCREDPostRequest IN");
 
-    OicSecDostype_t dos;
-    // Get binary representation of cbor
     OicSecCred_t *cred = NULL;
     OicUuid_t     *rownerId = NULL;
     uint8_t *payload = (((OCSecurityPayload*)ehRequest->payload)->securityData);
     size_t size = (((OCSecurityPayload*)ehRequest->payload)->payloadSize);
 
-    OCStackResult res = OC_STACK_OK;
-
+    OicSecDostype_t dos;
     VERIFY_SUCCESS(TAG, OC_STACK_OK == GetDos(&dos), ERROR);
     if ((DOS_RESET == dos.state) ||
         (DOS_RFNOP == dos.state))
@@ -2358,7 +2355,8 @@ static OCEntityHandlerResult HandlePostRequest(OCEntityHandlerRequest* ehRequest
         goto exit;
     }
 
-    res = CBORPayloadToCred(payload, size, &cred, &rownerId);
+    OCStackResult res = CBORPayloadToCred(payload, size, &cred, &rownerId);
+
 #ifdef MULTIPLE_OWNER
     if (IsSubOwner(cred->eownerID) && !IsNilUuid(cred->eownerID))
     {
@@ -2463,6 +2461,16 @@ static OCEntityHandlerResult HandleDeleteRequest(const OCEntityHandlerRequest *e
         return ehRet;
     }
 
+    OicSecDostype_t dos;
+    VERIFY_SUCCESS(TAG, OC_STACK_OK == GetDos(&dos), ERROR);
+    if ((DOS_RESET == dos.state) ||
+        (DOS_RFNOP == dos.state))
+    {
+        OIC_LOG_V(WARNING, TAG, "%s /cred resource is read-only in RESET and RFNOP.", __func__);
+        ehRet = OC_EH_NOT_ACCEPTABLE;
+        goto exit;
+    }
+
     if (GetCredIdsFromQueryString(ehRequest->query, &credIdList))
     {
         if (OC_STACK_RESOURCE_DELETED == RemoveCredentialByCredIds(credIdList))
@@ -2485,7 +2493,7 @@ static OCEntityHandlerResult HandleDeleteRequest(const OCEntityHandlerRequest *e
             ehRet = OC_EH_RESOURCE_DELETED;
         }
     }
-
+exit:
     //Send response to request originator
     ehRet = ((SendSRMResponse(ehRequest, ehRet, NULL, 0)) == OC_STACK_OK) ?
                    OC_EH_OK : OC_EH_ERROR;
@@ -3720,7 +3728,7 @@ void GetPrimaryCertKey(ByteArray_t * key)
     OIC_LOG_V(DEBUG, TAG, "In %s", __func__);
 
     VERIFY_NOT_NULL(TAG, key, ERROR);
-    
+
     key->len = 0;
     OicSecCred_t * temp = NULL;