aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndreas Steffen <andreas.steffen@strongswan.org>2011-10-09 10:18:24 +0200
committerAndreas Steffen <andreas.steffen@strongswan.org>2011-11-28 14:39:50 +0100
commit95c6cdeee89b99fc5fe0a6227181e9c8b59eec2d (patch)
treee69ce439f7679208d94224b692f0601e772c940d /src
parent350f855ca4c8869cce7dfd934b22c31fc99fc4f5 (diff)
downloadstrongswan-95c6cdeee89b99fc5fe0a6227181e9c8b59eec2d.tar.bz2
strongswan-95c6cdeee89b99fc5fe0a6227181e9c8b59eec2d.tar.xz
aborting after fatal imv_attestation error
Diffstat (limited to 'src')
-rw-r--r--src/libimcv/plugins/imv_attestation/imv_attestation.c14
-rw-r--r--src/libimcv/plugins/imv_attestation/imv_attestation_process.h11
2 files changed, 16 insertions, 9 deletions
diff --git a/src/libimcv/plugins/imv_attestation/imv_attestation.c b/src/libimcv/plugins/imv_attestation/imv_attestation.c
index e496b79f8..0c1150fb8 100644
--- a/src/libimcv/plugins/imv_attestation/imv_attestation.c
+++ b/src/libimcv/plugins/imv_attestation/imv_attestation.c
@@ -417,13 +417,12 @@ TNC_Result TNC_IMV_ReceiveMessage(TNC_IMVID imv_id,
{
pa_tnc_msg_t *pa_tnc_msg;
pa_tnc_attr_t *attr;
+ linked_list_t *attr_list;
imv_state_t *state;
imv_attestation_state_t *attestation_state;
pts_t *pts;
enumerator_t *enumerator;
TNC_Result result;
- bool fatal_error = FALSE;
- linked_list_t *attr_list;
if (!imv_attestation)
{
@@ -451,6 +450,7 @@ TNC_Result TNC_IMV_ReceiveMessage(TNC_IMVID imv_id,
}
attr_list = linked_list_create();
+ result = TNC_RESULT_SUCCESS;
/* analyze PA-TNC attributes */
enumerator = pa_tnc_msg->create_attribute_enumerator(pa_tnc_msg);
@@ -499,7 +499,7 @@ TNC_Result TNC_IMV_ReceiveMessage(TNC_IMVID imv_id,
pts_error_code_names, error_code);
DBG1(DBG_IMV, "error information: %B", &msg_info);
}
- fatal_error = TRUE;
+ result = TNC_RESULT_FATAL;
}
else if (attr->get_type(attr) == IETF_ATTR_PRODUCT_INFORMATION)
{
@@ -516,15 +516,17 @@ TNC_Result TNC_IMV_ReceiveMessage(TNC_IMVID imv_id,
if (!imv_attestation_process(attr, attr_list, attestation_state,
supported_algorithms, supported_dh_groups, pts_db, pts_credmgr))
{
- return TNC_RESULT_FATAL;
+ result = TNC_RESULT_FATAL;
+ break;
}
}
}
enumerator->destroy(enumerator);
pa_tnc_msg->destroy(pa_tnc_msg);
- if (fatal_error)
+ if (result != TNC_RESULT_SUCCESS)
{
+ attr_list->destroy(attr_list);
state->set_recommendation(state,
TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
TNC_IMV_EVALUATION_RESULT_ERROR);
@@ -552,7 +554,7 @@ TNC_Result TNC_IMV_ReceiveMessage(TNC_IMVID imv_id,
return result;
}
- DESTROY_IF(attr_list);
+ attr_list->destroy(attr_list);
if (attestation_state->get_handshake_state(attestation_state) &
IMV_ATTESTATION_STATE_END)
diff --git a/src/libimcv/plugins/imv_attestation/imv_attestation_process.h b/src/libimcv/plugins/imv_attestation/imv_attestation_process.h
index 506ecfd03..078337f46 100644
--- a/src/libimcv/plugins/imv_attestation/imv_attestation_process.h
+++ b/src/libimcv/plugins/imv_attestation/imv_attestation_process.h
@@ -37,9 +37,14 @@
/**
* Process a TCG PTS attribute
*
- * @param attr PA-TNC attribute to be processed
- * @param attr_list list with PA-TNC error attributes
- * @return TRUE if successful
+ * @param attr PA-TNC attribute to be processed
+ * @param attr_list list with PA-TNC error attributes
+ * @param attestation_state attestation state of a given connection
+ * @param supported_algorithms supported PTS measurement algorithms
+ * @param supported_dh_groups supported DH groups
+ * @param pts_db PTS configuration database
+ * @param pts_credmgr PTS credential manager
+ * @return TRUE if successful
*/
bool imv_attestation_process(pa_tnc_attr_t *attr, linked_list_t *attr_list,
imv_attestation_state_t *attestation_state,