From 98c04dfeda5c81a5f80ed4c9ce8ef713e93b323c Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Fri, 28 Jul 2023 15:55:20 +0100 Subject: [PATCH] - added LISTOBEJCTS access control to server_example_access_control (LIB61850-417) --- .../server_example_access_control.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/examples/server_example_access_control/server_example_access_control.c b/examples/server_example_access_control/server_example_access_control.c index e0b789af..365576e8 100644 --- a/examples/server_example_access_control/server_example_access_control.c +++ b/examples/server_example_access_control/server_example_access_control.c @@ -146,6 +146,20 @@ readAccessHandler(LogicalDevice* ld, LogicalNode* ln, DataObject* dataObject, Fu return DATA_ACCESS_ERROR_SUCCESS; } +static bool +listObjectsAccessHandler(void* parameter, ClientConnection connection, LogicalDevice* ld, LogicalNode* ln, DataObject* dataObject, FunctionalConstraint fc) +{ + printf("list objects access to %s/%s.%s[%s]\n", ld->name, ln->name, dataObject ? dataObject->name : "-", FunctionalConstraint_toString(fc)); + + if (!strcmp(ln->name, "GGIO1")) { + if (dataObject && !strcmp(dataObject->name, "AnIn1")) { + return false; + } + } + + return true; +} + static bool directoryAccessHandler(void* parameter, ClientConnection connection, IedServer_DirectoryCategory category, LogicalDevice* logicalDevice) { @@ -258,6 +272,9 @@ main(int argc, char** argv) IedServer_setDirectoryAccessHandler(iedServer, directoryAccessHandler, NULL); + /* control visibility of data objects in directory (get-name-list) and variable description (get-variable-access-attributes) services */ + IedServer_setListObjectsAccessHandler(iedServer, listObjectsAccessHandler, NULL); + /* MMS server will be instructed to start listening for client connections. */ IedServer_start(iedServer, tcpPort);