Bladeren bron

Access control for adding node should also be checked in _begin method

Stefan Profanter 7 jaren geleden
bovenliggende
commit
6ddcc366d4
1 gewijzigde bestanden met toevoegingen van 6 en 7 verwijderingen
  1. 6 7
      src/server/ua_services_nodemanagement.c

+ 6 - 7
src/server/ua_services_nodemanagement.c

@@ -644,6 +644,12 @@ addParentRef(UA_Server *server, UA_Session *session,
 UA_StatusCode
 Operation_addNode_begin(UA_Server *server, UA_Session *session, void *nodeContext,
                         const UA_AddNodesItem *item, UA_NodeId *outNewNodeId) {
+    /* Do not check access for server */
+    if(session != &adminSession && server->config.accessControl.allowAddNode &&
+       !server->config.accessControl.allowAddNode(&session->sessionId, session->sessionHandle, item)) {
+        return UA_STATUSCODE_BADUSERACCESSDENIED;
+    }
+
     /* Check the namespaceindex */
     if(item->requestedNewNodeId.nodeId.namespaceIndex >= server->namespacesSize) {
         UA_LOG_INFO_SESSION(server->config.logger, session,
@@ -944,13 +950,6 @@ Operation_addNode_finish(UA_Server *server, UA_Session *session, const UA_NodeId
 static void
 Operation_addNode(UA_Server *server, UA_Session *session, void *nodeContext,
                   const UA_AddNodesItem *item, UA_AddNodesResult *result) {
-    /* Do not check access for server */
-    if(session != &adminSession && server->config.accessControl.allowAddNode &&
-       !server->config.accessControl.allowAddNode(&session->sessionId, session->sessionHandle, item)) {
-        result->statusCode = UA_STATUSCODE_BADUSERACCESSDENIED;
-        return;
-    }
-
     result->statusCode = Operation_addNode_begin(server, session, nodeContext,
                                                  item, &result->addedNodeId);
     if(result->statusCode != UA_STATUSCODE_GOOD)