Browse Source

Interpret empty UserIdentityToken as anonymous login

Julius Pfrommer 7 years ago
parent
commit
23ced3c832
1 changed files with 12 additions and 2 deletions
  1. 12 2
      plugins/ua_accesscontrol_default.c

+ 12 - 2
plugins/ua_accesscontrol_default.c

@@ -30,12 +30,22 @@ activateSession_default(UA_Server *server, UA_AccessControl *ac,
                         const UA_NodeId *sessionId,
                         const UA_ExtensionObject *userIdentityToken,
                         void **sessionContext) {
+    AccessControlContext *context = (AccessControlContext*)ac->context;
+
+    /* The empty token is interpreted as anonymous */
+    if(userIdentityToken->encoding == UA_EXTENSIONOBJECT_ENCODED_NOBODY) {
+        if(!context->allowAnonymous)
+            return UA_STATUSCODE_BADIDENTITYTOKENINVALID;
+
+        /* No userdata atm */
+        *sessionContext = NULL;
+        return UA_STATUSCODE_GOOD;
+    }
+
     /* Could the token be decoded? */
     if(userIdentityToken->encoding < UA_EXTENSIONOBJECT_DECODED)
         return UA_STATUSCODE_BADIDENTITYTOKENINVALID;
 
-    AccessControlContext *context = (AccessControlContext*)ac->context;
-
     /* Anonymous login */
     if(userIdentityToken->content.decoded.type == &UA_TYPES[UA_TYPES_ANONYMOUSIDENTITYTOKEN]) {
         if(!context->allowAnonymous)