aboutsummaryrefslogtreecommitdiffstats
path: root/src/server_register.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/server_register.c')
-rw-r--r--src/server_register.c145
1 files changed, 84 insertions, 61 deletions
diff --git a/src/server_register.c b/src/server_register.c
index 60a4998..ae8e959 100644
--- a/src/server_register.c
+++ b/src/server_register.c
@@ -9,6 +9,7 @@
*/
#include "common.h"
+#include "config.h"
#include <open62541/client.h>
#include <open62541/client_config_default.h>
@@ -41,59 +42,73 @@ main (int argc, char **argv)
signal (SIGINT, stopHandler);
signal (SIGTERM, stopHandler);
- if (argc < 13)
+ if (argc != 2)
{
UA_LOG_FATAL (UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
- "Usage: %s\n"
- " <port> <applicationUri>\n"
- " <server-certificate.der> <server-private-key.der>\n"
- " <client-certificate.der> <client-private-key.der>\n"
- " <discovery-server-endpoint>\n"
- " <register-interval-seconds>\n"
- " <security-mode> <security-policy>\n"
- " <server-auth-mode> [<server-user> <server-pass>]\n"
- " <client-auth-mode> [<client-user> <client-pass>]\n"
- " [<trustlist1.der>, ...]\n"
- "\n"
- "Security modes : None, Sign, SignAndEncrypt\n"
- "Security policies: None, Basic256Sha256, "
- "Aes256_Sha256_RsaPss,\n"
- " Aes128_Sha256_RsaOaep, ECC_nistP256\n"
- "Auth modes : anonymous, user",
- argv[0]);
+ "Usage: %s <config-file>", argv[0]);
return EXIT_FAILURE;
}
- UA_UInt16 port = (UA_UInt16)atoi (argv[1]);
- const char *applicationUri = argv[2];
- const char *clientCertPath = argv[5];
- const char *clientKeyPath = argv[6];
- const char *discoveryEndpoint = argv[7];
- int registerInterval = atoi (argv[8]);
+ Config cfg;
+ if (configLoad (argv[1], &cfg) != 0)
+ return EXIT_FAILURE;
+
+ int port = configRequireInt (&cfg, "port", "ServerRegister");
+ const char *applicationUri
+ = configRequire (&cfg, "applicationUri", "ServerRegister");
+ const char *serverCertPath
+ = configRequire (&cfg, "serverCertificate", "ServerRegister");
+ const char *serverKeyPath
+ = configRequire (&cfg, "serverPrivateKey", "ServerRegister");
+ const char *clientCertPath
+ = configRequire (&cfg, "clientCertificate", "ServerRegister");
+ const char *clientKeyPath
+ = configRequire (&cfg, "clientPrivateKey", "ServerRegister");
+ const char *discoveryEndpoint
+ = configRequire (&cfg, "discoveryEndpoint", "ServerRegister");
+ int registerInterval
+ = configRequireInt (&cfg, "registerInterval", "ServerRegister");
+ const char *securityModeStr
+ = configRequire (&cfg, "securityMode", "ServerRegister");
+ const char *securityPolicyStr
+ = configRequire (&cfg, "securityPolicy", "ServerRegister");
+ const char *serverAuthMode
+ = configRequire (&cfg, "serverAuthMode", "ServerRegister");
+ const char *clientAuthMode
+ = configRequire (&cfg, "clientAuthMode", "ServerRegister");
+
+ if (!applicationUri || !serverCertPath || !serverKeyPath || !clientCertPath
+ || !clientKeyPath || !discoveryEndpoint || !securityModeStr
+ || !securityPolicyStr || !serverAuthMode || !clientAuthMode || port < 0
+ || registerInterval < 0)
+ {
+ configFree (&cfg);
+ return EXIT_FAILURE;
+ }
- UA_MessageSecurityMode securityMode = parseSecurityMode (argv[9]);
+ UA_MessageSecurityMode securityMode = parseSecurityMode (securityModeStr);
if (securityMode == UA_MESSAGESECURITYMODE_INVALID)
{
UA_LOG_FATAL (UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
- "Unknown security mode: %s", argv[9]);
+ "Unknown security mode: %s", securityModeStr);
+ configFree (&cfg);
return EXIT_FAILURE;
}
- const char *securityPolicyUri = resolveSecurityPolicyUri (argv[10]);
+ const char *securityPolicyUri = resolveSecurityPolicyUri (securityPolicyStr);
if (!securityPolicyUri)
{
UA_LOG_FATAL (UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
- "Unknown security policy: %s", argv[10]);
+ "Unknown security policy: %s", securityPolicyStr);
+ configFree (&cfg);
return EXIT_FAILURE;
}
/* Parse server-side auth mode (what clients connecting to this server
need). "anonymous" allows unauthenticated sessions; "user" requires
a username/password pair. */
- int idx = 11;
- const char *serverAuthMode = argv[idx++];
UA_Boolean serverAllowAnonymous;
- char *serverUsername = NULL, *serverPassword = NULL;
+ const char *serverUsername = NULL, *serverPassword = NULL;
if (strcmp (serverAuthMode, "anonymous") == 0)
{
@@ -101,16 +116,16 @@ main (int argc, char **argv)
}
else if (strcmp (serverAuthMode, "user") == 0)
{
- if (idx + 2 > argc)
+ serverAllowAnonymous = false;
+ serverUsername
+ = configRequire (&cfg, "serverUsername", "ServerRegister");
+ serverPassword
+ = configRequire (&cfg, "serverPassword", "ServerRegister");
+ if (!serverUsername || !serverPassword)
{
- UA_LOG_FATAL (UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
- "Server auth mode 'user' requires "
- "<username> <password>");
+ configFree (&cfg);
return EXIT_FAILURE;
}
- serverAllowAnonymous = false;
- serverUsername = argv[idx++];
- serverPassword = argv[idx++];
}
else
{
@@ -118,34 +133,28 @@ main (int argc, char **argv)
"Unknown server auth mode: %s "
"(expected 'anonymous' or 'user')",
serverAuthMode);
+ configFree (&cfg);
return EXIT_FAILURE;
}
/* Parse client-side auth mode (how this server authenticates to the
LDS when registering). */
- if (idx >= argc)
- {
- UA_LOG_FATAL (UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
- "Missing client auth mode");
- return EXIT_FAILURE;
- }
- const char *clientAuthMode = argv[idx++];
- char *clientUsername = NULL, *clientPassword = NULL;
+ const char *clientUsername = NULL, *clientPassword = NULL;
if (strcmp (clientAuthMode, "anonymous") == 0)
{
}
else if (strcmp (clientAuthMode, "user") == 0)
{
- if (idx + 2 > argc)
+ clientUsername
+ = configRequire (&cfg, "clientUsername", "ServerRegister");
+ clientPassword
+ = configRequire (&cfg, "clientPassword", "ServerRegister");
+ if (!clientUsername || !clientPassword)
{
- UA_LOG_FATAL (UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
- "Client auth mode 'user' requires "
- "<username> <password>");
+ configFree (&cfg);
return EXIT_FAILURE;
}
- clientUsername = argv[idx++];
- clientPassword = argv[idx++];
}
else
{
@@ -153,16 +162,24 @@ main (int argc, char **argv)
"Unknown client auth mode: %s "
"(expected 'anonymous' or 'user')",
clientAuthMode);
+ configFree (&cfg);
return EXIT_FAILURE;
}
- size_t trustSize = (idx < argc) ? (size_t)(argc - idx) : 0;
+ char **trustPaths = NULL;
+ size_t trustSize = 0;
+ configGetAll (&cfg, "trustList", &trustPaths, &trustSize);
UA_StatusCode retval;
- UA_Server *server = createSecureServer (
- port, applicationUri, argv[3], argv[4], argv + idx, trustSize, &retval);
+ UA_Server *server
+ = createSecureServer ((UA_UInt16)port, applicationUri, serverCertPath,
+ serverKeyPath, trustPaths, trustSize, &retval);
if (!server)
- return EXIT_FAILURE;
+ {
+ free (trustPaths);
+ configFree (&cfg);
+ return EXIT_FAILURE;
+ }
UA_ServerConfig *serverConfig = UA_Server_getConfig (server);
@@ -173,12 +190,14 @@ main (int argc, char **argv)
if (!serverAllowAnonymous)
{
UA_UsernamePasswordLogin logins[1];
- logins[0].username = UA_STRING (serverUsername);
- logins[0].password = UA_STRING (serverPassword);
+ logins[0].username = UA_STRING ((char *)serverUsername);
+ logins[0].password = UA_STRING ((char *)serverPassword);
retval = UA_AccessControl_default (serverConfig, false, NULL, 1, logins);
if (retval != UA_STATUSCODE_GOOD)
{
UA_Server_delete (server);
+ free (trustPaths);
+ configFree (&cfg);
return EXIT_FAILURE;
}
}
@@ -195,12 +214,14 @@ main (int argc, char **argv)
UA_ClientConfig clientConfig;
memset (&clientConfig, 0, sizeof (UA_ClientConfig));
retval = createSecureClientConfig (
- &clientConfig, applicationUri, clientCertPath, clientKeyPath, argv + idx,
+ &clientConfig, applicationUri, clientCertPath, clientKeyPath, trustPaths,
trustSize, securityMode, securityPolicyUri);
if (retval != UA_STATUSCODE_GOOD)
{
UA_Server_run_shutdown (server);
UA_Server_delete (server);
+ free (trustPaths);
+ configFree (&cfg);
return EXIT_FAILURE;
}
if (clientUsername)
@@ -230,7 +251,7 @@ main (int argc, char **argv)
memset (&clientConfig, 0, sizeof (UA_ClientConfig));
retval = createSecureClientConfig (
&clientConfig, applicationUri, clientCertPath, clientKeyPath,
- argv + idx, trustSize, securityMode, securityPolicyUri);
+ trustPaths, trustSize, securityMode, securityPolicyUri);
if (retval == UA_STATUSCODE_GOOD)
{
if (clientUsername)
@@ -253,7 +274,7 @@ main (int argc, char **argv)
our entry immediately rather than waiting for the cleanup timeout. */
memset (&clientConfig, 0, sizeof (UA_ClientConfig));
retval = createSecureClientConfig (
- &clientConfig, applicationUri, clientCertPath, clientKeyPath, argv + idx,
+ &clientConfig, applicationUri, clientCertPath, clientKeyPath, trustPaths,
trustSize, securityMode, securityPolicyUri);
if (retval == UA_STATUSCODE_GOOD)
{
@@ -271,5 +292,7 @@ main (int argc, char **argv)
UA_Server_run_shutdown (server);
UA_Server_delete (server);
+ free (trustPaths);
+ configFree (&cfg);
return EXIT_SUCCESS;
}