瀏覽代碼

Exand the access control example

Expand the example a bit by showing how to have the server check for a username/password.
Frank Meerkoetter 5 年之前
父節點
當前提交
c035e48ac3
共有 2 個文件被更改,包括 12 次插入1 次删除
  1. 1 1
      examples/access_control/client_access_control.c
  2. 11 0
      examples/access_control/server_access_control.c

+ 1 - 1
examples/access_control/client_access_control.c

@@ -15,7 +15,7 @@ int main(void) {
     UA_Client *client = UA_Client_new();
     UA_ClientConfig_setDefault(UA_Client_getConfig(client));
 
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
+    UA_StatusCode retval = UA_Client_connect_username(client, "opc.tcp://localhost:4840", "paula", "paula123");
     if(retval != UA_STATUSCODE_GOOD) {
         UA_Client_delete(client);
         return EXIT_FAILURE;

+ 11 - 0
examples/access_control/server_access_control.c

@@ -4,6 +4,7 @@
 #include <ua_server.h>
 #include <ua_config_default.h>
 #include <ua_plugin_access_control.h>
+#include <ua_accesscontrol_default.h>
 #include <ua_log_stdout.h>
 
 #include <signal.h>
@@ -47,11 +48,21 @@ static void stopHandler(int sign) {
     running = false;
 }
 
+static UA_UsernamePasswordLogin logins[2] = {
+    {UA_STRING_STATIC("peter"), UA_STRING_STATIC("peter123")},
+    {UA_STRING_STATIC("paula"), UA_STRING_STATIC("paula123")}
+};
+
 int main(void) {
     signal(SIGINT, stopHandler);
     signal(SIGTERM, stopHandler);
 
     UA_ServerConfig *config = UA_ServerConfig_new_default();
+    // disable anonymous logins, enable two user/password logins
+    config->accessControl.deleteMembers(&config->accessControl);
+    if (UA_AccessControl_default(&config->accessControl, false, 2, logins) != UA_STATUSCODE_GOOD) {
+        return EXIT_FAILURE;
+    }
 
     // Set accessControl functions for nodeManagement
     config->accessControl.allowAddNode = allowAddNode;