Browse Source

Make AdminSession part of the server struct (was global var)

Julius Pfrommer 5 years ago
parent
commit
c5c5aaa7d7

+ 9 - 0
src/server/ua_server.c

@@ -202,6 +202,9 @@ void UA_Server_delete(UA_Server *server) {
 
 #endif
 
+    /* Clean up the Admin Session */
+    UA_Session_deleteMembersCleanup(&server->adminSession, server);
+
 #ifdef UA_ENABLE_MULTITHREADING
     /* Process new delayed callbacks from the cleanup */
     UA_Server_cleanupDispatchQueue(server);
@@ -278,6 +281,12 @@ UA_Server_new(const UA_ServerConfig *config) {
     SIMPLEQ_INIT(&server->dispatchQueue);
 #endif
 
+    /* Initialize the adminSession */
+    UA_Session_init(&server->adminSession);
+    server->adminSession.sessionId.identifierType = UA_NODEIDTYPE_GUID;
+    server->adminSession.sessionId.identifier.guid.data1 = 1;
+    server->adminSession.validTill = UA_INT64_MAX;
+
     /* Create Namespaces 0 and 1 */
     server->namespaces = (UA_String *)UA_Array_new(2, &UA_TYPES[UA_TYPES_STRING]);
     server->namespaces[0] = UA_STRING_ALLOC("http://opcfoundation.org/UA/");

+ 3 - 0
src/server/ua_server_internal.h

@@ -114,6 +114,9 @@ struct UA_Server {
     /* Security */
     UA_SecureChannelManager secureChannelManager;
     UA_SessionManager sessionManager;
+    UA_Session adminSession; /* Local access to the services (for startup and
+                              * maintenance) uses this Session with all possible
+                              * access rights (Session Id: 1) */
 
 #ifdef UA_ENABLE_DISCOVERY
     /* Discovery */

+ 2 - 2
src/server/ua_server_ns0.c

@@ -27,7 +27,7 @@ addNode_raw(UA_Server *server, UA_NodeClass nodeClass,
     item.nodeAttributes.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
     item.nodeAttributes.content.decoded.data = attributes;
     item.nodeAttributes.content.decoded.type = attributesType;
-    return AddNode_raw(server, &adminSession, NULL, &item, NULL);
+    return AddNode_raw(server, &server->adminSession, NULL, &item, NULL);
 }
 
 static UA_StatusCode
@@ -39,7 +39,7 @@ addNode_finish(UA_Server *server, UA_UInt32 nodeId,
     UA_StatusCode retval = UA_Server_addReference(server, sourceId, refTypeId, targetId, UA_FALSE);
     if (retval != UA_STATUSCODE_GOOD)
         return retval;
-    return AddNode_finish(server, &adminSession, &sourceId);
+    return AddNode_finish(server, &server->adminSession, &sourceId);
 }
 
 static UA_StatusCode

+ 6 - 6
src/server/ua_services_attribute.c

@@ -29,7 +29,7 @@
 static UA_UInt32
 getUserWriteMask(UA_Server *server, const UA_Session *session,
                  const UA_Node *node) {
-    if(session == &adminSession)
+    if(session == &server->adminSession)
         return 0xFFFFFFFF; /* the local admin user has all rights */
     return node->writeMask &
         server->config.accessControl.getUserRightsMask(server, &server->config.accessControl,
@@ -40,7 +40,7 @@ getUserWriteMask(UA_Server *server, const UA_Session *session,
 static UA_Byte
 getAccessLevel(UA_Server *server, const UA_Session *session,
                const UA_VariableNode *node) {
-    if(session == &adminSession)
+    if(session == &server->adminSession)
         return 0xFF; /* the local admin user has all rights */
     return node->accessLevel;
 }
@@ -48,7 +48,7 @@ getAccessLevel(UA_Server *server, const UA_Session *session,
 static UA_Byte
 getUserAccessLevel(UA_Server *server, const UA_Session *session,
                    const UA_VariableNode *node) {
-    if(session == &adminSession)
+    if(session == &server->adminSession)
         return 0xFF; /* the local admin user has all rights */
     return node->accessLevel &
         server->config.accessControl.getUserAccessLevel(server, &server->config.accessControl,
@@ -59,7 +59,7 @@ getUserAccessLevel(UA_Server *server, const UA_Session *session,
 static UA_Boolean
 getUserExecutable(UA_Server *server, const UA_Session *session,
                   const UA_MethodNode *node) {
-    if(session == &adminSession)
+    if(session == &server->adminSession)
         return true; /* the local admin user has all rights */
     return node->executable &
         server->config.accessControl.getUserExecutable(server, &server->config.accessControl,
@@ -480,7 +480,7 @@ UA_Server_readWithSession(UA_Server *server, UA_Session *session,
 UA_DataValue
 UA_Server_read(UA_Server *server, const UA_ReadValueId *item,
                UA_TimestampsToReturn timestamps) {
-    return UA_Server_readWithSession(server, &adminSession, item, timestamps);
+    return UA_Server_readWithSession(server, &server->adminSession, item, timestamps);
 }
 
 /* Used in inline functions exposing the Read service with more syntactic sugar
@@ -1391,7 +1391,7 @@ UA_Server_writeWithSession(UA_Server *server, UA_Session *session,
 
 UA_StatusCode
 UA_Server_write(UA_Server *server, const UA_WriteValue *value) {
-    return UA_Server_editNode(server, &adminSession, &value->nodeId,
+    return UA_Server_editNode(server, &server->adminSession, &value->nodeId,
                               (UA_EditNodeCallback)copyAttributeIntoNode,
                               /* casting away const qualifier because callback uses const anyway */
                               (UA_WriteValue *)(uintptr_t)value);

+ 2 - 2
src/server/ua_services_call.c

@@ -164,7 +164,7 @@ callWithMethodAndObject(UA_Server *server, UA_Session *session,
 
     /* Verify access rights */
     UA_Boolean executable = method->executable;
-    if(session != &adminSession)
+    if(session != &server->adminSession)
         executable = executable &&
             server->config.accessControl.getUserExecutableOnObject(server, 
                            &server->config.accessControl, &session->sessionId,
@@ -283,7 +283,7 @@ UA_CallMethodResult UA_EXPORT
 UA_Server_call(UA_Server *server, const UA_CallMethodRequest *request) {
     UA_CallMethodResult result;
     UA_CallMethodResult_init(&result);
-    Operation_CallMethod(server, &adminSession, NULL, request, &result);
+    Operation_CallMethod(server, &server->adminSession, NULL, request, &result);
     return result;
 }
 

+ 22 - 22
src/server/ua_services_nodemanagement.c

@@ -54,7 +54,7 @@ UA_StatusCode
 UA_Server_setNodeContext(UA_Server *server, UA_NodeId nodeId,
                          void *nodeContext) {
     UA_StatusCode retval =
-        UA_Server_editNode(server, &adminSession, &nodeId,
+        UA_Server_editNode(server, &server->adminSession, &nodeId,
                            (UA_EditNodeCallback)editNodeContext, nodeContext);
     return retval;
 }
@@ -631,7 +631,7 @@ static UA_StatusCode callConstructors(UA_Server *server, UA_Session *session,
 
     /* Set the context *and* mark the node as constructed */
     if(retval == UA_STATUSCODE_GOOD)
-        retval = UA_Server_editNode(server, &adminSession, &node->nodeId,
+        retval = UA_Server_editNode(server, &server->adminSession, &node->nodeId,
                                     (UA_EditNodeCallback)editNodeContext,
                                     context);
 
@@ -871,7 +871,7 @@ UA_StatusCode
 AddNode_raw(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 &&
+    if(session != &server->adminSession && server->config.accessControl.allowAddNode &&
        !server->config.accessControl.allowAddNode(server, &server->config.accessControl,
                                                   &session->sessionId, session->sessionHandle, item)) {
         return UA_STATUSCODE_BADUSERACCESSDENIED;
@@ -1100,7 +1100,7 @@ __UA_Server_addNode(UA_Server *server, const UA_NodeClass nodeClass,
     /* Call the normal addnodes service */
     UA_AddNodesResult result;
     UA_AddNodesResult_init(&result);
-    Operation_addNode(server, &adminSession, nodeContext, &item, &result);
+    Operation_addNode(server, &server->adminSession, nodeContext, &item, &result);
     if(outNewNodeId)
         *outNewNodeId = result.addedNodeId;
     else
@@ -1126,13 +1126,13 @@ UA_Server_addNode_begin(UA_Server *server, const UA_NodeClass nodeClass,
     item.nodeAttributes.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
     item.nodeAttributes.content.decoded.type = attributeType;
     item.nodeAttributes.content.decoded.data = (void*)(uintptr_t)attr;
-    return Operation_addNode_begin(server, &adminSession, nodeContext, &item,
+    return Operation_addNode_begin(server, &server->adminSession, nodeContext, &item,
                                    &parentNodeId, &referenceTypeId, outNewNodeId);
 }
 
 UA_StatusCode
 UA_Server_addNode_finish(UA_Server *server, const UA_NodeId nodeId) {
-    return AddNode_finish(server, &adminSession, &nodeId);
+    return AddNode_finish(server, &server->adminSession, &nodeId);
 }
 
 /****************/
@@ -1253,7 +1253,7 @@ static void
 deleteNodeOperation(UA_Server *server, UA_Session *session, void *context,
                     const UA_DeleteNodesItem *item, UA_StatusCode *result) {
     /* Do not check access for server */
-    if(session != &adminSession && server->config.accessControl.allowDeleteNode &&
+    if(session != &server->adminSession && server->config.accessControl.allowDeleteNode &&
        !server->config.accessControl.allowDeleteNode(server, &server->config.accessControl,
                                                      &session->sessionId, session->sessionHandle, item)) {
         *result = UA_STATUSCODE_BADUSERACCESSDENIED;
@@ -1308,7 +1308,7 @@ UA_Server_deleteNode(UA_Server *server, const UA_NodeId nodeId,
     item.deleteTargetReferences = deleteReferences;
     item.nodeId = nodeId;
     UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    deleteNodeOperation(server, &adminSession, NULL, &item, &retval);
+    deleteNodeOperation(server, &server->adminSession, NULL, &item, &retval);
     return retval;
 }
 
@@ -1332,7 +1332,7 @@ static void
 Operation_addReference(UA_Server *server, UA_Session *session, void *context,
                        const UA_AddReferencesItem *item, UA_StatusCode *retval) {
     /* Do not check access for server */
-    if(session != &adminSession && server->config.accessControl.allowAddReference &&
+    if(session != &server->adminSession && server->config.accessControl.allowAddReference &&
        !server->config.accessControl.allowAddReference(server, &server->config.accessControl,
                                                        &session->sessionId, session->sessionHandle, item)) {
         *retval = UA_STATUSCODE_BADUSERACCESSDENIED;
@@ -1422,7 +1422,7 @@ UA_Server_addReference(UA_Server *server, const UA_NodeId sourceId,
     item.targetNodeId = targetId;
 
     UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    Operation_addReference(server, &adminSession, NULL, &item, &retval);
+    Operation_addReference(server, &server->adminSession, NULL, &item, &retval);
     return retval;
 }
 
@@ -1434,7 +1434,7 @@ static void
 Operation_deleteReference(UA_Server *server, UA_Session *session, void *context,
                           const UA_DeleteReferencesItem *item, UA_StatusCode *retval) {
     /* Do not check access for server */
-    if(session != &adminSession && server->config.accessControl.allowDeleteReference &&
+    if(session != &server->adminSession && server->config.accessControl.allowDeleteReference &&
        !server->config.accessControl.allowDeleteReference(server, &server->config.accessControl,
                                                           &session->sessionId, session->sessionHandle, item)) {
         *retval = UA_STATUSCODE_BADUSERACCESSDENIED;
@@ -1495,7 +1495,7 @@ UA_Server_deleteReference(UA_Server *server, const UA_NodeId sourceNodeId,
     item.deleteBidirectional = deleteBidirectional;
 
     UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    Operation_deleteReference(server, &adminSession, NULL, &item, &retval);
+    Operation_deleteReference(server, &server->adminSession, NULL, &item, &retval);
     return retval;
 }
 
@@ -1516,7 +1516,7 @@ UA_StatusCode
 UA_Server_setVariableNode_valueCallback(UA_Server *server,
                                         const UA_NodeId nodeId,
                                         const UA_ValueCallback callback) {
-    return UA_Server_editNode(server, &adminSession, &nodeId,
+    return UA_Server_editNode(server, &server->adminSession, &nodeId,
                               (UA_EditNodeCallback)setValueCallback,
                               /* cast away const because callback uses const anyway */
                               (UA_ValueCallback *)(uintptr_t) &callback);
@@ -1551,7 +1551,7 @@ UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_NodeId requested
     }
 
     /* Create the node and add it to the nodestore */
-    UA_StatusCode retval = AddNode_raw(server, &adminSession, nodeContext, &item, outNewNodeId);
+    UA_StatusCode retval = AddNode_raw(server, &server->adminSession, nodeContext, &item, outNewNodeId);
     if(retval != UA_STATUSCODE_GOOD)
         goto cleanup;
 
@@ -1561,13 +1561,13 @@ UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_NodeId requested
         goto cleanup;
 
     /* Typecheck and add references to parent and type definition */
-    retval = AddNode_addRefs(server, &adminSession, outNewNodeId, &parentNodeId,
+    retval = AddNode_addRefs(server, &server->adminSession, outNewNodeId, &parentNodeId,
                              &referenceTypeId, &typeDefinition);
     if(retval != UA_STATUSCODE_GOOD)
         goto cleanup;
 
     /* Call the constructors */
-    retval = AddNode_finish(server, &adminSession, outNewNodeId);
+    retval = AddNode_finish(server, &server->adminSession, outNewNodeId);
 
  cleanup:
     if(outNewNodeId == &newNodeId)
@@ -1591,7 +1591,7 @@ setDataSource(UA_Server *server, UA_Session *session,
 UA_StatusCode
 UA_Server_setVariableNode_dataSource(UA_Server *server, const UA_NodeId nodeId,
                                      const UA_DataSource dataSource) {
-    return UA_Server_editNode(server, &adminSession, &nodeId,
+    return UA_Server_editNode(server, &server->adminSession, &nodeId,
                               (UA_EditNodeCallback)setDataSource,
                             /* casting away const because callback casts it back anyway */
                               (UA_DataSource *) (uintptr_t)&dataSource);
@@ -1628,7 +1628,7 @@ UA_Server_addMethodNodeEx_finish(UA_Server *server, const UA_NodeId nodeId,
     UA_BrowseResult br;
     UA_BrowseResult_init(&br);
     UA_UInt32 maxrefs = 0;
-    Operation_Browse(server, &adminSession, &maxrefs, &bd, &br);
+    Operation_Browse(server, &server->adminSession, &maxrefs, &bd, &br);
 
     UA_StatusCode retval = br.statusCode;
     if(retval != UA_STATUSCODE_GOOD) {
@@ -1689,7 +1689,7 @@ UA_Server_addMethodNodeEx_finish(UA_Server *server, const UA_NodeId nodeId,
     retval |= UA_Server_setMethodNode_callback(server, nodeId, method);
 
     /* Call finish to add the parent reference */
-    retval |= AddNode_finish(server, &adminSession, &nodeId);
+    retval |= AddNode_finish(server, &server->adminSession, &nodeId);
 
     if(retval != UA_STATUSCODE_GOOD) {
         UA_Server_deleteNode(server, nodeId, true);
@@ -1745,7 +1745,7 @@ UA_Server_addMethodNodeEx(UA_Server *server, const UA_NodeId requestedNewNodeId,
         outNewNodeId = &newId;
     }
 
-    UA_StatusCode retval = Operation_addNode_begin(server, &adminSession, nodeContext,
+    UA_StatusCode retval = Operation_addNode_begin(server, &server->adminSession, nodeContext,
                                                    &item, &parentNodeId, &referenceTypeId, outNewNodeId);
     if(retval != UA_STATUSCODE_GOOD)
         return retval;
@@ -1777,7 +1777,7 @@ UA_StatusCode
 UA_Server_setMethodNode_callback(UA_Server *server,
                                  const UA_NodeId methodNodeId,
                                  UA_MethodCallback methodCallback) {
-    return UA_Server_editNode(server, &adminSession, &methodNodeId,
+    return UA_Server_editNode(server, &server->adminSession, &methodNodeId,
                               (UA_EditNodeCallback)editMethodCallback,
                               (void*)(uintptr_t)methodCallback);
 }
@@ -1809,7 +1809,7 @@ setNodeTypeLifecycle(UA_Server *server, UA_Session *session,
 UA_StatusCode
 UA_Server_setNodeTypeLifecycle(UA_Server *server, UA_NodeId nodeId,
                                UA_NodeTypeLifecycle lifecycle) {
-    return UA_Server_editNode(server, &adminSession, &nodeId,
+    return UA_Server_editNode(server, &server->adminSession, &nodeId,
                               (UA_EditNodeCallback)setNodeTypeLifecycle,
                               &lifecycle);
 }

+ 1 - 1
src/server/ua_services_subscription.c

@@ -412,7 +412,7 @@ UA_Server_createDataChangeMonitoredItem(UA_Server *server,
 
     UA_MonitoredItemCreateResult result;
     UA_MonitoredItemCreateResult_init(&result);
-    Operation_CreateMonitoredItem(server, &adminSession, &cmc, &item, &result);
+    Operation_CreateMonitoredItem(server, &server->adminSession, &cmc, &item, &result);
     return result;
 }
 

+ 4 - 4
src/server/ua_services_view.c

@@ -347,7 +347,7 @@ UA_BrowseResult
 UA_Server_browse(UA_Server *server, UA_UInt32 maxrefs, const UA_BrowseDescription *descr) {
     UA_BrowseResult result;
     UA_BrowseResult_init(&result);
-    Operation_Browse(server, &adminSession, &maxrefs, descr, &result);
+    Operation_Browse(server, &server->adminSession, &maxrefs, descr, &result);
     return result;
 }
 
@@ -406,7 +406,7 @@ UA_Server_browseNext(UA_Server *server, UA_Boolean releaseContinuationPoint,
                      const UA_ByteString *continuationPoint) {
     UA_BrowseResult result;
     UA_BrowseResult_init(&result);
-    Operation_BrowseNext(server, &adminSession, &releaseContinuationPoint,
+    Operation_BrowseNext(server, &server->adminSession, &releaseContinuationPoint,
                          continuationPoint, &result);
     return result;
 }
@@ -719,7 +719,7 @@ UA_Server_translateBrowsePathToNodeIds(UA_Server *server,
     UA_BrowsePathResult result;
     UA_BrowsePathResult_init(&result);
     UA_UInt32 nodeClassMask = 0; /* All node classes */
-    Operation_TranslateBrowsePathToNodeIds(server, &adminSession, &nodeClassMask,
+    Operation_TranslateBrowsePathToNodeIds(server, &server->adminSession, &nodeClassMask,
                                            browsePath, &result);
     return result;
 }
@@ -767,7 +767,7 @@ UA_Server_browseSimplifiedBrowsePath(UA_Server *server, const UA_NodeId origin,
     UA_BrowsePathResult bpr;
     UA_BrowsePathResult_init(&bpr);
     UA_UInt32 nodeClassMask = UA_NODECLASS_OBJECT | UA_NODECLASS_VARIABLE;
-    Operation_TranslateBrowsePathToNodeIds(server, &adminSession, &nodeClassMask, &bp, &bpr);
+    Operation_TranslateBrowsePathToNodeIds(server, &server->adminSession, &nodeClassMask, &bp, &bpr);
     return bpr;
 }
 

+ 0 - 30
src/server/ua_session.c

@@ -14,36 +14,6 @@
 
 #define UA_SESSION_NONCELENTH 32
 
-UA_Session adminSession = {
-    {{NULL, NULL}, /* .pointers */
-     {0,UA_NODEIDTYPE_NUMERIC,{1}}, /* .authenticationToken */
-     NULL,}, /* .channel */
-    {{0, NULL},{0, NULL},
-     {{0, NULL},{0, NULL}},
-     UA_APPLICATIONTYPE_CLIENT,
-     {0, NULL},{0, NULL},
-     0, NULL}, /* .clientDescription */
-    {sizeof("Administrator Session")-1, (UA_Byte*)"Administrator Session"}, /* .sessionName */
-    false, /* .activated */
-    NULL, /* .sessionHandle */
-    {0,UA_NODEIDTYPE_NUMERIC,{1}}, /* .sessionId */
-    UA_UINT32_MAX, /* .maxRequestMessageSize */
-    UA_UINT32_MAX, /* .maxResponseMessageSize */
-    (UA_Double)UA_INT64_MAX, /* .timeout */
-    UA_INT64_MAX, /* .validTill */
-    {0, NULL},
-    UA_MAXCONTINUATIONPOINTS, /* .availableContinuationPoints */
-    {NULL}, /* .continuationPoints */
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    0, /* .lastSubscriptionId */
-    0, /* .lastSeenSubscriptionId */
-    {NULL}, /* .serverSubscriptions */
-    {NULL, NULL}, /* .responseQueue */
-    0, /* numSubscriptions */
-    0  /* numPublishReq */
-#endif
-};
-
 void UA_Session_init(UA_Session *session) {
     memset(session, 0, sizeof(UA_Session));
     session->availableContinuationPoints = UA_MAXCONTINUATIONPOINTS;

+ 0 - 4
src/server/ua_session.h

@@ -63,10 +63,6 @@ typedef struct {
 #endif
 } UA_Session;
 
-/* Local access to the services (for startup and maintenance) uses this Session
- * with all possible access rights (Session Id: 1) */
-extern UA_Session adminSession;
-
 /**
  * Session Lifecycle
  * ----------------- */

+ 2 - 2
src/server/ua_subscription_datachange.c

@@ -294,7 +294,7 @@ updateNeededForFilteredValue(const UA_Variant *value, const UA_Variant *oldValue
 static UA_Boolean
 detectValueChangeWithFilter(UA_Server *server, UA_MonitoredItem *mon, UA_DataValue *value,
                             UA_ByteString *encoding) {
-    UA_Session *session = &adminSession;
+    UA_Session *session = &server->adminSession;
     UA_UInt32 subscriptionId = 0;
     UA_Subscription *sub = mon->subscription;
     if(sub) {
@@ -484,7 +484,7 @@ sampleCallbackWithValue(UA_Server *server, UA_MonitoredItem *monitoredItem,
 
 void
 UA_MonitoredItem_sampleCallback(UA_Server *server, UA_MonitoredItem *monitoredItem) {
-    UA_Session *session = &adminSession;
+    UA_Session *session = &server->adminSession;
     UA_UInt32 subscriptionId = 0;
     UA_Subscription *sub = monitoredItem->subscription;
     if(sub) {

+ 2 - 1
tests/server/check_server_readspeed.c

@@ -9,6 +9,7 @@
 #include <check.h>
 
 #include "ua_server.h"
+#include "ua_server_internal.h"
 #include "ua_config_default.h"
 #include "server/ua_services.h"
 #include "ua_types_encoding_binary.h"
@@ -97,7 +98,7 @@ START_TEST(readSpeed) {
         retval |= UA_decodeBinary(&request_msg, &offset, &rq, &UA_TYPES[UA_TYPES_READREQUEST], 0, NULL);
 
         UA_MessageContext_begin(&mc, &testChannel, 0, UA_MESSAGETYPE_MSG);
-        retval |= Service_Read(server, &adminSession, &mc, &rq, &rh);
+        retval |= Service_Read(server, &server->adminSession, &mc, &rq, &rh);
         UA_MessageContext_finish(&mc);
 
         UA_ReadRequest_deleteMembers(&rq);

+ 33 - 33
tests/server/check_services_subscriptions.c

@@ -40,7 +40,7 @@ START_TEST(Server_createSubscription) {
     UA_CreateSubscriptionResponse response;
     UA_CreateSubscriptionResponse_init(&response);
 
-    Service_CreateSubscription(server, &adminSession, &request, &response);
+    Service_CreateSubscription(server, &server->adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     subscriptionId = response.subscriptionId;
 
@@ -62,7 +62,7 @@ START_TEST(Server_modifySubscription) {
     UA_ModifySubscriptionResponse response;
     UA_ModifySubscriptionResponse_init(&response);
 
-    Service_ModifySubscription(server, &adminSession, &request, &response);
+    Service_ModifySubscription(server, &server->adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
 
     UA_ModifySubscriptionResponse_deleteMembers(&response);
@@ -79,7 +79,7 @@ START_TEST(Server_setPublishingMode) {
     UA_SetPublishingModeResponse response;
     UA_SetPublishingModeResponse_init(&response);
 
-    Service_SetPublishingMode(server, &adminSession, &request, &response);
+    Service_SetPublishingMode(server, &server->adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(response.resultsSize, 1);
     ck_assert_uint_eq(response.results[0], UA_STATUSCODE_GOOD);
@@ -97,7 +97,7 @@ START_TEST(Server_republish) {
     UA_RepublishResponse response;
     UA_RepublishResponse_init(&response);
 
-    Service_Republish(server, &adminSession, &request, &response);
+    Service_Republish(server, &server->adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_BADMESSAGENOTAVAILABLE);
 
     UA_RepublishResponse_deleteMembers(&response);
@@ -114,7 +114,7 @@ START_TEST(Server_republish_invalid) {
     UA_RepublishResponse response;
     UA_RepublishResponse_init(&response);
 
-    Service_Republish(server, &adminSession, &request, &response);
+    Service_Republish(server, &server->adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID);
 
     UA_RepublishResponse_deleteMembers(&response);
@@ -131,7 +131,7 @@ START_TEST(Server_deleteSubscription) {
     UA_DeleteSubscriptionsResponse del_response;
     UA_DeleteSubscriptionsResponse_init(&del_response);
 
-    Service_DeleteSubscriptions(server, &adminSession, &del_request, &del_response);
+    Service_DeleteSubscriptions(server, &server->adminSession, &del_request, &del_response);
     ck_assert_uint_eq(del_response.resultsSize, 1);
     ck_assert_uint_eq(del_response.results[0], UA_STATUSCODE_GOOD);
 
@@ -147,7 +147,7 @@ START_TEST(Server_publishCallback) {
     UA_CreateSubscriptionRequest_init(&request);
     request.publishingEnabled = true;
     UA_CreateSubscriptionResponse_init(&response);
-    Service_CreateSubscription(server, &adminSession, &request, &response);
+    Service_CreateSubscription(server, &server->adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     UA_UInt32 subscriptionId1 = response.subscriptionId;
     UA_CreateSubscriptionResponse_deleteMembers(&response);
@@ -156,7 +156,7 @@ START_TEST(Server_publishCallback) {
     UA_CreateSubscriptionRequest_init(&request);
     request.publishingEnabled = true;
     UA_CreateSubscriptionResponse_init(&response);
-    Service_CreateSubscription(server, &adminSession, &request, &response);
+    Service_CreateSubscription(server, &server->adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     UA_UInt32 subscriptionId2 = response.subscriptionId;
     UA_Double publishingInterval = response.revisedPublishingInterval;
@@ -165,7 +165,7 @@ START_TEST(Server_publishCallback) {
 
     /* Keepalive is set to max initially */
     UA_Subscription *sub;
-    LIST_FOREACH(sub, &adminSession.serverSubscriptions, listEntry)
+    LIST_FOREACH(sub, &server->adminSession.serverSubscriptions, listEntry)
         ck_assert_uint_eq(sub->currentKeepAliveCount, sub->maxKeepAliveCount);
 
     /* Sleep until the publishing interval times out */
@@ -173,7 +173,7 @@ START_TEST(Server_publishCallback) {
     UA_Server_run_iterate(server, false);
     UA_realSleep(100);
 
-    LIST_FOREACH(sub, &adminSession.serverSubscriptions, listEntry) {
+    LIST_FOREACH(sub, &server->adminSession.serverSubscriptions, listEntry) {
         if ((sub->subscriptionId == subscriptionId1) || (sub->subscriptionId == subscriptionId2))
             ck_assert_uint_eq(sub->currentKeepAliveCount, sub->maxKeepAliveCount+1);
     }
@@ -188,7 +188,7 @@ START_TEST(Server_publishCallback) {
     UA_DeleteSubscriptionsResponse del_response;
     UA_DeleteSubscriptionsResponse_init(&del_response);
 
-    Service_DeleteSubscriptions(server, &adminSession, &del_request, &del_response);
+    Service_DeleteSubscriptions(server, &server->adminSession, &del_request, &del_response);
     ck_assert_uint_eq(del_response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(del_response.resultsSize, 2);
     ck_assert_uint_eq(del_response.results[0], UA_STATUSCODE_GOOD);
@@ -221,7 +221,7 @@ START_TEST(Server_createMonitoredItems) {
     UA_CreateMonitoredItemsResponse response;
     UA_CreateMonitoredItemsResponse_init(&response);
 
-    Service_CreateMonitoredItems(server, &adminSession, &request, &response);
+    Service_CreateMonitoredItems(server, &server->adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(response.resultsSize, 1);
     ck_assert_uint_eq(response.results[0].statusCode, UA_STATUSCODE_GOOD);
@@ -256,7 +256,7 @@ START_TEST(Server_modifyMonitoredItems) {
     UA_ModifyMonitoredItemsResponse response;
     UA_ModifyMonitoredItemsResponse_init(&response);
 
-    Service_ModifyMonitoredItems(server, &adminSession, &request, &response);
+    Service_ModifyMonitoredItems(server, &server->adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(response.resultsSize, 1);
     ck_assert_uint_eq(response.results[0].statusCode, UA_STATUSCODE_GOOD);
@@ -274,7 +274,7 @@ START_TEST(Server_overflow) {
     UA_CreateSubscriptionRequest_init(&createSubscriptionRequest);
     createSubscriptionRequest.publishingEnabled = true;
     UA_CreateSubscriptionResponse_init(&createSubscriptionResponse);
-    Service_CreateSubscription(server, &adminSession, &createSubscriptionRequest, &createSubscriptionResponse);
+    Service_CreateSubscription(server, &server->adminSession, &createSubscriptionRequest, &createSubscriptionResponse);
     ck_assert_uint_eq(createSubscriptionResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     UA_UInt32 localSubscriptionId = createSubscriptionResponse.subscriptionId;
     UA_Double publishingInterval = createSubscriptionResponse.revisedPublishingInterval;
@@ -306,7 +306,7 @@ START_TEST(Server_overflow) {
     UA_CreateMonitoredItemsResponse createMonitoredItemsResponse;
     UA_CreateMonitoredItemsResponse_init(&createMonitoredItemsResponse);
 
-    Service_CreateMonitoredItems(server, &adminSession, &createMonitoredItemsRequest, &createMonitoredItemsResponse);
+    Service_CreateMonitoredItems(server, &server->adminSession, &createMonitoredItemsRequest, &createMonitoredItemsResponse);
     ck_assert_uint_eq(createMonitoredItemsResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(createMonitoredItemsResponse.resultsSize, 1);
     ck_assert_uint_eq(createMonitoredItemsResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
@@ -319,7 +319,7 @@ START_TEST(Server_overflow) {
 
     UA_MonitoredItem *mon = NULL;
     UA_Subscription *sub;
-    LIST_FOREACH(sub, &adminSession.serverSubscriptions, listEntry) {
+    LIST_FOREACH(sub, &server->adminSession.serverSubscriptions, listEntry) {
         if(sub->subscriptionId == localSubscriptionId)
             mon = UA_Subscription_getMonitoredItem(sub, localMonitoredItemId);
     }
@@ -376,7 +376,7 @@ START_TEST(Server_overflow) {
     UA_ModifyMonitoredItemsResponse modifyMonitoredItemsResponse;
     UA_ModifyMonitoredItemsResponse_init(&modifyMonitoredItemsResponse);
 
-    Service_ModifyMonitoredItems(server, &adminSession, &modifyMonitoredItemsRequest,
+    Service_ModifyMonitoredItems(server, &server->adminSession, &modifyMonitoredItemsRequest,
                                  &modifyMonitoredItemsResponse);
     ck_assert_uint_eq(modifyMonitoredItemsResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(modifyMonitoredItemsResponse.resultsSize, 1);
@@ -406,7 +406,7 @@ START_TEST(Server_overflow) {
 
     UA_ModifyMonitoredItemsResponse_init(&modifyMonitoredItemsResponse);
 
-    Service_ModifyMonitoredItems(server, &adminSession, &modifyMonitoredItemsRequest,
+    Service_ModifyMonitoredItems(server, &server->adminSession, &modifyMonitoredItemsRequest,
                                  &modifyMonitoredItemsResponse);
     ck_assert_uint_eq(modifyMonitoredItemsResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(modifyMonitoredItemsResponse.resultsSize, 1);
@@ -435,7 +435,7 @@ START_TEST(Server_overflow) {
 
     UA_ModifyMonitoredItemsResponse_init(&modifyMonitoredItemsResponse);
 
-    Service_ModifyMonitoredItems(server, &adminSession, &modifyMonitoredItemsRequest,
+    Service_ModifyMonitoredItems(server, &server->adminSession, &modifyMonitoredItemsRequest,
                                  &modifyMonitoredItemsResponse);
     ck_assert_uint_eq(modifyMonitoredItemsResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(modifyMonitoredItemsResponse.resultsSize, 1);
@@ -460,7 +460,7 @@ START_TEST(Server_overflow) {
     UA_DeleteSubscriptionsResponse deleteSubscriptionsResponse;
     UA_DeleteSubscriptionsResponse_init(&deleteSubscriptionsResponse);
 
-    Service_DeleteSubscriptions(server, &adminSession, &deleteSubscriptionsRequest,
+    Service_DeleteSubscriptions(server, &server->adminSession, &deleteSubscriptionsRequest,
                                 &deleteSubscriptionsResponse);
     ck_assert_uint_eq(deleteSubscriptionsResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(deleteSubscriptionsResponse.resultsSize, 1);
@@ -482,7 +482,7 @@ START_TEST(Server_setMonitoringMode) {
     UA_SetMonitoringModeResponse response;
     UA_SetMonitoringModeResponse_init(&response);
 
-    Service_SetMonitoringMode(server, &adminSession, &request, &response);
+    Service_SetMonitoringMode(server, &server->adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(response.resultsSize, 1);
     ck_assert_uint_eq(response.results[0], UA_STATUSCODE_GOOD);
@@ -501,7 +501,7 @@ START_TEST(Server_deleteMonitoredItems) {
     UA_DeleteMonitoredItemsResponse response;
     UA_DeleteMonitoredItemsResponse_init(&response);
 
-    Service_DeleteMonitoredItems(server, &adminSession, &request, &response);
+    Service_DeleteMonitoredItems(server, &server->adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(response.resultsSize, 1);
     ck_assert_uint_eq(response.results[0], UA_STATUSCODE_GOOD);
@@ -520,7 +520,7 @@ START_TEST(Server_lifeTimeCount) {
     request.requestedLifetimeCount = 3;
     request.requestedMaxKeepAliveCount = 1;
     UA_CreateSubscriptionResponse_init(&response);
-    Service_CreateSubscription(server, &adminSession, &request, &response);
+    Service_CreateSubscription(server, &server->adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(response.revisedMaxKeepAliveCount, 1);
     ck_assert_uint_eq(response.revisedLifetimeCount, 3);
@@ -532,7 +532,7 @@ START_TEST(Server_lifeTimeCount) {
     request.requestedLifetimeCount = 4;
     request.requestedMaxKeepAliveCount = 2;
     UA_CreateSubscriptionResponse_init(&response);
-    Service_CreateSubscription(server, &adminSession, &request, &response);
+    Service_CreateSubscription(server, &server->adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(response.revisedMaxKeepAliveCount, 2);
     /* revisedLifetimeCount is revised to 3*MaxKeepAliveCount == 3 */
@@ -565,7 +565,7 @@ START_TEST(Server_lifeTimeCount) {
 
     UA_CreateMonitoredItemsResponse mresponse;
     UA_CreateMonitoredItemsResponse_init(&mresponse);
-    Service_CreateMonitoredItems(server, &adminSession, &mrequest, &mresponse);
+    Service_CreateMonitoredItems(server, &server->adminSession, &mrequest, &mresponse);
     ck_assert_uint_eq(mresponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(mresponse.resultsSize, 1);
     ck_assert_uint_eq(mresponse.results[0].statusCode, UA_STATUSCODE_GOOD);
@@ -577,7 +577,7 @@ START_TEST(Server_lifeTimeCount) {
     UA_Server_run_iterate(server, false);
     UA_UInt32 count = 0;
     UA_Subscription *sub;
-    LIST_FOREACH(sub, &adminSession.serverSubscriptions, listEntry) {
+    LIST_FOREACH(sub, &server->adminSession.serverSubscriptions, listEntry) {
         ck_assert_uint_eq(sub->currentLifetimeCount, 0);
         count++;
     }
@@ -587,7 +587,7 @@ START_TEST(Server_lifeTimeCount) {
     UA_Server_run_iterate(server, false);
 
     count = 0;
-    LIST_FOREACH(sub, &adminSession.serverSubscriptions, listEntry) {
+    LIST_FOREACH(sub, &server->adminSession.serverSubscriptions, listEntry) {
         ck_assert_uint_eq(sub->currentLifetimeCount, 1);
         count++;
     }
@@ -598,7 +598,7 @@ START_TEST(Server_lifeTimeCount) {
     UA_Server_run_iterate(server, false);
 
     count = 0;
-    LIST_FOREACH(sub, &adminSession.serverSubscriptions, listEntry) {
+    LIST_FOREACH(sub, &server->adminSession.serverSubscriptions, listEntry) {
         ck_assert_uint_eq(sub->currentLifetimeCount, 2);
         count++;
     }
@@ -609,7 +609,7 @@ START_TEST(Server_lifeTimeCount) {
     UA_Server_run_iterate(server, false);
 
     count = 0;
-    LIST_FOREACH(sub, &adminSession.serverSubscriptions, listEntry) {
+    LIST_FOREACH(sub, &server->adminSession.serverSubscriptions, listEntry) {
         ck_assert_uint_eq(sub->currentLifetimeCount, 3);
         count++;
     }
@@ -620,7 +620,7 @@ START_TEST(Server_lifeTimeCount) {
     UA_Server_run_iterate(server, false);
 
     count = 0;
-    LIST_FOREACH(sub, &adminSession.serverSubscriptions, listEntry) {
+    LIST_FOREACH(sub, &server->adminSession.serverSubscriptions, listEntry) {
         ck_assert_uint_eq(sub->currentLifetimeCount, 4);
         count++;
     }
@@ -631,7 +631,7 @@ START_TEST(Server_lifeTimeCount) {
     UA_Server_run_iterate(server, false);
 
     count = 0;
-    LIST_FOREACH(sub, &adminSession.serverSubscriptions, listEntry) {
+    LIST_FOREACH(sub, &server->adminSession.serverSubscriptions, listEntry) {
         ck_assert_uint_eq(sub->currentLifetimeCount, 5);
         count++;
     }
@@ -642,7 +642,7 @@ START_TEST(Server_lifeTimeCount) {
     UA_Server_run_iterate(server, false);
 
     count = 0;
-    LIST_FOREACH(sub, &adminSession.serverSubscriptions, listEntry) {
+    LIST_FOREACH(sub, &server->adminSession.serverSubscriptions, listEntry) {
         ck_assert_uint_eq(sub->currentLifetimeCount, 6);
         count++;
     }
@@ -654,7 +654,7 @@ START_TEST(Server_lifeTimeCount) {
     UA_Server_run_iterate(server, false);
 
     count = 0;
-    LIST_FOREACH(sub, &adminSession.serverSubscriptions, listEntry) {
+    LIST_FOREACH(sub, &server->adminSession.serverSubscriptions, listEntry) {
         count++;
     }
     ck_assert_uint_eq(count, 0);

+ 1 - 1
tests/server/check_subscription_events.c

@@ -138,7 +138,7 @@ static void removeSubscription(void) {
     UA_DeleteSubscriptionsResponse deleteSubscriptionsResponse;
     UA_DeleteSubscriptionsResponse_init(&deleteSubscriptionsResponse);
 
-    Service_DeleteSubscriptions(server, &adminSession, &deleteSubscriptionsRequest,
+    Service_DeleteSubscriptions(server, &server->adminSession, &deleteSubscriptionsRequest,
                                 &deleteSubscriptionsResponse);
     UA_DeleteSubscriptionsResponse_deleteMembers(&deleteSubscriptionsResponse);
 }