Просмотр исходного кода

don't use the accesslevel attribute for variabletype nodes

Julius Pfrommer лет назад: 7
Родитель
Сommit
517a5ae8f5
1 измененных файлов с 8 добавлено и 5 удалено
  1. 8 5
      src/server/ua_services_attribute.c

+ 8 - 5
src/server/ua_services_attribute.c

@@ -231,11 +231,14 @@ Operation_Read(UA_Server *server, UA_Session *session,
         break;
     case UA_ATTRIBUTEID_VALUE: {
         CHECK_NODECLASS(UA_NODECLASS_VARIABLE | UA_NODECLASS_VARIABLETYPE);
-        UA_Byte userAccessLevel = getUserAccessLevel(server, session,
-                                                     (const UA_VariableNode*)node);
-        if(!(userAccessLevel & (UA_ACCESSLEVELMASK_READ))) {
-            retval = UA_STATUSCODE_BADUSERACCESSDENIED;
-            break;
+        /* VariableTypes don't have the AccessLevel concept. Always allow reading the value. */
+        if(node->nodeClass == UA_NODECLASS_VARIABLE) {
+            UA_Byte userAccessLevel = getUserAccessLevel(server, session,
+                                                         (const UA_VariableNode*)node);
+            if(!(userAccessLevel & (UA_ACCESSLEVELMASK_READ))) {
+                retval = UA_STATUSCODE_BADUSERACCESSDENIED;
+                break;
+            }
         }
         retval = readValueAttributeComplete(server, session, (const UA_VariableNode*)node,
                                             op_timestampsToReturn, &id->indexRange, v);