OCStackResult GetDoxmDevOwnerId(OicUuid_t *devownerid);
/**
+ * Gets the bool state of "isOwned" property on the doxm resource.
+ *
+ * @param isOwned a pointer to be assigned to isOwned property
+ * @return ::OC_STACK_OK if isOwned is assigned correctly, else ::OC_STACK_ERROR.
+ */
+OCStackResult GetDoxmIsOwned(bool *isOwned);
+
+/**
* Gets the OicUuid_t value for the rowneruuid of the doxm resource.
*
* @param rowneruuid a pointer to be assigned to the rowneruuid property
}
// Before doing any ACL processing, check if request a) coming
- // from DevOwner AND b) the device is not in Ready for Normal Operation
- // state (which in IoTivity is equivalent to isOp == true) AND c)
- // the request is for a SVR resource. If all 3 are met, grant request.
- if (IsRequestFromDevOwner(context) // if from DevOwner
- && (GetPstatIsop() == false) // AND if isOp == false
- && (context->resourceType != NOT_A_SVR_RESOURCE)) // AND if SVR type
+ // from DevOwner AND b) the device is in Ready for OTM or Reset state
+ // (which in IoTivity is equivalent to isOp == false && owned == false)
+ // AND c) the request is for a SVR resource.
+ // If all 3 conditions are met, grant request.
+ bool isDeviceOwned = true; // default to value that will not grant access
+ if (OC_STACK_OK == GetDoxmIsOwned(&isDeviceOwned)) // if runtime error, don't grant
{
- context->retVal = ACCESS_GRANTED;
+ // If we were able to get the value of doxm->isOwned, proceed with
+ // test for implicit access...
+ if (IsRequestFromDevOwner(context) // if from DevOwner
+ && (GetPstatIsop() == false) // AND if pstat->isOp == false
+ && (isDeviceOwned == false) // AND if doxm->isOwned == false
+ && (context->resourceType != NOT_A_SVR_RESOURCE)) // AND if SVR type
+ {
+ context->retVal = ACCESS_GRANTED;
+ }
}
- // Then check if request is for a SVR and coming from rowner
+ // If not granted via DevOwner status,
+ // then check if request is for a SVR and coming from rowner
else if (IsRequestFromResourceOwner(context))
{
context->retVal = ACCESS_GRANTED;