]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Make sure libstrongswan is initialized first in IMCs and IMVs
authorAndreas Steffen <andreas.steffen@strongswan.org>
Wed, 11 Sep 2013 18:58:18 +0000 (20:58 +0200)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Wed, 11 Sep 2013 18:58:18 +0000 (20:58 +0200)
src/libimcv/plugins/imv_os/imv_os_agent.c
src/libimcv/plugins/imv_test/imv_test_agent.c
src/libpts/plugins/imc_attestation/imc_attestation.c
src/libpts/plugins/imv_attestation/imv_attestation_agent.c

index ba3f3afc62156945347db66883876d385f81f140..84a24b48f85b9d0cea523ebf7e48e935b429270d 100644 (file)
@@ -779,6 +779,14 @@ imv_agent_if_t *imv_os_agent_create(const char *name, TNC_IMVID id,
                                                                        TNC_Version *actual_version)
 {
        private_imv_os_agent_t *this;
+       imv_agent_t *agent;
+
+       agent = imv_agent_create(name, msg_types, countof(msg_types), id,
+                                                        actual_version);
+       if (!agent)
+       {
+               return NULL;
+       }
 
        INIT(this,
                .public = {
@@ -790,16 +798,10 @@ imv_agent_if_t *imv_os_agent_create(const char *name, TNC_IMVID id,
                        .solicit_recommendation = _solicit_recommendation,
                        .destroy = _destroy,
                },
-               .agent = imv_agent_create(name, msg_types, countof(msg_types), id,
-                                                                actual_version),
+               .agent = agent,
                .db = imv_os_database_create(imcv_db),
        );
 
-       if (!this->agent)
-       {
-               destroy(this);
-               return NULL;
-       }
        return &this->public;
 }
 
index 87d69373f5df741b8675d835fb07a8f52cc6d87a..cdf0e18cde6a52560f66f6e9446f937904d20687 100644 (file)
@@ -296,6 +296,14 @@ imv_agent_if_t *imv_test_agent_create(const char *name, TNC_IMVID id,
                                                                          TNC_Version *actual_version)
 {
        private_imv_test_agent_t *this;
+       imv_agent_t *agent;
+
+       agent = imv_agent_create(name, msg_types, countof(msg_types), id,
+                                                        actual_version);
+       if (!agent)
+       {
+               return NULL;
+       }
 
        INIT(this,
                .public = {
@@ -307,15 +315,9 @@ imv_agent_if_t *imv_test_agent_create(const char *name, TNC_IMVID id,
                        .solicit_recommendation = _solicit_recommendation,
                        .destroy = _destroy,
                },
-               .agent = imv_agent_create(name, msg_types, countof(msg_types), id,
-                                                                 actual_version),
+               .agent = agent,
        );
 
-       if (!this->agent)
-       {
-               destroy(this);
-               return NULL;
-       }
        return &this->public;
 }
 
index e783b8f2971620880ec96eaecf0356b0b2a74c53..467b998c8f2b9c6ad36db62594cb08dec9aa2dce 100644 (file)
@@ -71,11 +71,6 @@ TNC_Result TNC_IMC_Initialize(TNC_IMCID imc_id,
                DBG1(DBG_IMC, "IMC \"%s\" has already been initialized", imc_name);
                return TNC_RESULT_ALREADY_INITIALIZED;
        }
-       if (!pts_meas_algo_probe(&supported_algorithms) ||
-               !pts_dh_group_probe(&supported_dh_groups))
-       {
-               return TNC_RESULT_FATAL;
-       }
        imc_attestation = imc_agent_create(imc_name, msg_types, countof(msg_types),
                                                                           imc_id, actual_version);
        if (!imc_attestation)
@@ -83,6 +78,13 @@ TNC_Result TNC_IMC_Initialize(TNC_IMCID imc_id,
                return TNC_RESULT_FATAL;
        }
 
+       if (!pts_meas_algo_probe(&supported_algorithms) ||
+               !pts_dh_group_probe(&supported_dh_groups))
+       {
+               imc_attestation->destroy(imc_attestation);
+               imc_attestation = NULL;
+               return TNC_RESULT_FATAL;
+       }
        libpts_init();
 
        if (min_version > TNC_IFIMC_VERSION_1 || max_version < TNC_IFIMC_VERSION_1)
index 2c5df2df220b04701d89e66a4c01007638dac79a..f127a968291e2dc2ed3c9abc225d7d392da5bc3e 100644 (file)
@@ -564,8 +564,16 @@ imv_agent_if_t *imv_attestation_agent_create(const char *name, TNC_IMVID id,
                                                                                 TNC_Version *actual_version)
 {
        private_imv_attestation_agent_t *this;
+       imv_agent_t *agent;
        char *hash_alg, *dh_group, *cadir;
 
+       agent = imv_agent_create(name, msg_types, countof(msg_types), id,
+                                                        actual_version);
+       if (!agent)
+       {
+               return NULL;
+       }
+
        hash_alg = lib->settings->get_str(lib->settings,
                                        "libimcv.plugins.imv-attestation.hash_algorithm", "sha256");
        dh_group = lib->settings->get_str(lib->settings,
@@ -583,8 +591,7 @@ imv_agent_if_t *imv_attestation_agent_create(const char *name, TNC_IMVID id,
                        .solicit_recommendation = _solicit_recommendation,
                        .destroy = _destroy,
                },
-               .agent = imv_agent_create(name, msg_types, countof(msg_types), id,
-                                                                 actual_version),
+               .agent = agent,
                .supported_algorithms = PTS_MEAS_ALGO_NONE,
                .supported_dh_groups = PTS_DH_GROUP_NONE,
                .pts_credmgr = credential_manager_create(),
@@ -594,8 +601,7 @@ imv_agent_if_t *imv_attestation_agent_create(const char *name, TNC_IMVID id,
 
        libpts_init();
 
-       if (!this->agent ||
-               !pts_meas_algo_probe(&this->supported_algorithms) ||
+       if (!pts_meas_algo_probe(&this->supported_algorithms) ||
                !pts_dh_group_probe(&this->supported_dh_groups) ||
                !pts_meas_algo_update(hash_alg, &this->supported_algorithms) ||
                !pts_dh_group_update(dh_group, &this->supported_dh_groups))
@@ -612,4 +618,3 @@ imv_agent_if_t *imv_attestation_agent_create(const char *name, TNC_IMVID id,
 
        return &this->public;
 }
-