diff --git a/src/ddsrt/src/filesystem/posix/filesystem.c b/src/ddsrt/src/filesystem/posix/filesystem.c
index 11b57ce..1db647c 100644
--- a/src/ddsrt/src/filesystem/posix/filesystem.c
+++ b/src/ddsrt/src/filesystem/posix/filesystem.c
@@ -87,14 +87,14 @@ char * ddsrt_file_normalize(const char *filepath)
char *normPtr;
norm = NULL;
- if ((filepath != NULL) && (*filepath != '\0')) {
- norm = ddsrt_malloc(strlen(filepath) + 1);
+ if (filepath != NULL) {
+ norm = ddsrt_malloc (strlen (filepath) + 1);
/* replace any / or \ by DDSRT_FILESEPCHAR */
fpPtr = (char *) filepath;
normPtr = norm;
while (*fpPtr != '\0') {
*normPtr = *fpPtr;
- if ((*fpPtr == '/') || (*fpPtr == '\\')) {
+ if (*fpPtr == '/' || *fpPtr == '\\') {
*normPtr = DDSRT_FILESEPCHAR;
normPtr++;
} else {
@@ -106,7 +106,6 @@ char * ddsrt_file_normalize(const char *filepath)
}
*normPtr = '\0';
}
-
return norm;
}
diff --git a/src/security/builtin_plugins/authentication/src/authentication.c b/src/security/builtin_plugins/authentication/src/authentication.c
index d6139d9..4d317d7 100644
--- a/src/security/builtin_plugins/authentication/src/authentication.c
+++ b/src/security/builtin_plugins/authentication/src/authentication.c
@@ -980,17 +980,13 @@ validate_local_identity(
password = DDS_Security_Property_get_value(&participant_qos->property.value, PROPERTY_PASSWORD);
-
trusted_ca_dir = DDS_Security_Property_get_value(&participant_qos->property.value, PROPERTY_TRUSTED_CA_DIR);
-
- if( trusted_ca_dir ){
- result = get_trusted_ca_list(trusted_ca_dir, &(implementation->trustedCAList), ex );
- if (result != DDS_SECURITY_VALIDATION_OK) {
+ if (trusted_ca_dir && *trusted_ca_dir != '\0')
+ {
+ if ((result = get_trusted_ca_list (trusted_ca_dir, &(implementation->trustedCAList), ex)) != DDS_SECURITY_VALIDATION_OK)
goto err_inv_trusted_ca_dir;
- }
}
-
result = load_X509_certificate(identityCaPEM, &identityCA, ex);
if (result != DDS_SECURITY_VALIDATION_OK) {
goto err_inv_identity_ca;
diff --git a/src/security/core/tests/authentication.c b/src/security/core/tests/authentication.c
index e981648..c1e022d 100644
--- a/src/security/core/tests/authentication.c
+++ b/src/security/core/tests/authentication.c
@@ -14,6 +14,7 @@
#include "dds/dds.h"
#include "CUnit/Test.h"
+#include "CUnit/Theory.h"
#include "dds/version.h"
#include "dds/ddsrt/cdtors.h"
@@ -44,8 +45,7 @@ static const char *config =
" ${TEST_IDENTITY_CERTIFICATE}"
" ${TEST_IDENTITY_PRIVATE_KEY}"
" ${TEST_IDENTITY_CA_CERTIFICATE}"
- " testtext_Password_testtext"
- " ."
+ " ${TRUSTED_CA_DIR:+}${TRUSTED_CA_DIR}${TRUSTED_CA_DIR:+}"
" "
" "
" "
@@ -61,6 +61,7 @@ static const char *config =
#define DDS_DOMAINID1 0
#define DDS_DOMAINID2 1
+#define MAX_ADDITIONAL_CONF 255
static dds_entity_t g_domain1 = 0;
static dds_entity_t g_participant1 = 0;
@@ -68,7 +69,7 @@ static dds_entity_t g_participant1 = 0;
static dds_entity_t g_domain2 = 0;
static dds_entity_t g_participant2 = 0;
-static void authentication_init(void)
+static void authentication_init(bool different_ca, const char * trusted_ca_dir, bool exp_pp_fail)
{
struct kvp governance_vars[] = {
{ "ALLOW_UNAUTH_PP", "false" },
@@ -82,38 +83,74 @@ static void authentication_init(void)
{ "TEST_IDENTITY_CERTIFICATE", TEST_IDENTITY_CERTIFICATE },
{ "TEST_IDENTITY_PRIVATE_KEY", TEST_IDENTITY_PRIVATE_KEY },
{ "TEST_IDENTITY_CA_CERTIFICATE", TEST_IDENTITY_CA_CERTIFICATE },
+ { "TRUSTED_CA_DIR", trusted_ca_dir },
{ NULL, NULL }
};
+
struct kvp config_vars2[] = {
{ "GOVERNANCE_DATA", gov_config_signed },
{ "TEST_IDENTITY_CERTIFICATE", TEST_IDENTITY2_CERTIFICATE },
{ "TEST_IDENTITY_PRIVATE_KEY", TEST_IDENTITY2_PRIVATE_KEY },
{ "TEST_IDENTITY_CA_CERTIFICATE", TEST_IDENTITY_CA2_CERTIFICATE },
+ { "TRUSTED_CA_DIR", trusted_ca_dir },
{ NULL, NULL }
};
char *conf1 = ddsrt_expand_vars (config, &expand_lookup_vars_env, config_vars1);
char *conf2 = ddsrt_expand_vars (config, &expand_lookup_vars_env, config_vars2);
g_domain1 = dds_create_domain (DDS_DOMAINID1, conf1);
- g_domain2 = dds_create_domain (DDS_DOMAINID2, conf2);
+ g_domain2 = dds_create_domain (DDS_DOMAINID2, different_ca ? conf2 : conf1);
dds_free (conf1);
dds_free (conf2);
ddsrt_free (gov_config_signed);
- CU_ASSERT_FATAL ((g_participant1 = dds_create_participant (DDS_DOMAINID1, NULL, NULL)) > 0);
- CU_ASSERT_FATAL ((g_participant2 = dds_create_participant (DDS_DOMAINID2, NULL, NULL)) > 0);
+ g_participant1 = dds_create_participant (DDS_DOMAINID1, NULL, NULL);
+ g_participant2 = dds_create_participant (DDS_DOMAINID2, NULL, NULL);
+ if (exp_pp_fail)
+ {
+ CU_ASSERT_FATAL (g_participant1 <= 0);
+ CU_ASSERT_FATAL (g_participant2 <= 0);
+ }
+ else
+ {
+ CU_ASSERT_FATAL (g_participant1 > 0);
+ CU_ASSERT_FATAL (g_participant2 > 0);
+ }
}
-static void authentication_fini(void)
+static void authentication_fini(bool delete_pp)
{
- CU_ASSERT_EQUAL_FATAL (dds_delete (g_participant1), DDS_RETCODE_OK);
- CU_ASSERT_EQUAL_FATAL (dds_delete (g_participant2), DDS_RETCODE_OK);
+ if (delete_pp)
+ {
+ CU_ASSERT_EQUAL_FATAL (dds_delete (g_participant1), DDS_RETCODE_OK);
+ CU_ASSERT_EQUAL_FATAL (dds_delete (g_participant2), DDS_RETCODE_OK);
+ }
CU_ASSERT_EQUAL_FATAL (dds_delete (g_domain1), DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL (dds_delete (g_domain2), DDS_RETCODE_OK);
}
-CU_Test(ddssec_authentication, different_ca, .init = authentication_init, .fini = authentication_fini)
+CU_Test(ddssec_authentication, different_ca)
{
+ authentication_init (true, NULL, false);
validate_handshake (DDS_DOMAINID1, true, NULL, true, "error: unable to get local issuer certificate");
validate_handshake (DDS_DOMAINID2, true, NULL, true, "error: unable to get local issuer certificate");
+ authentication_fini (true);
+}
+
+
+CU_TheoryDataPoints(ddssec_authentication, trusted_ca_dir) = {
+ CU_DataPoints(const char *, "", ".", "/nonexisting", NULL),
+ CU_DataPoints(bool, false, false, true, false)
+};
+
+CU_Theory((const char * ca_dir, bool exp_fail), ddssec_authentication, trusted_ca_dir)
+{
+ printf("Testing custom CA dir: %s\n", ca_dir);
+ authentication_init (false, ca_dir, exp_fail);
+ if (!exp_fail)
+ {
+ validate_handshake (DDS_DOMAINID1, false, NULL, false, NULL);
+ validate_handshake (DDS_DOMAINID2, false, NULL, false, NULL);
+ }
+ authentication_fini (!exp_fail);
}
diff --git a/src/security/core/tests/handshake.c b/src/security/core/tests/handshake.c
index 6de2876..2eb52fc 100644
--- a/src/security/core/tests/handshake.c
+++ b/src/security/core/tests/handshake.c
@@ -44,8 +44,6 @@ static const char *config =
" "TEST_IDENTITY_CERTIFICATE""
" "TEST_IDENTITY_PRIVATE_KEY""
" "TEST_IDENTITY_CA_CERTIFICATE""
- " testtext_Password_testtext"
- " ."
" "
" "
" "