From 2eafa286def11c3d80e2910d7bea3694fe81c5af Mon Sep 17 00:00:00 2001 From: Sansar Choinyambuu Date: Wed, 7 Dec 2011 10:38:23 +0100 Subject: [PATCH] Do not send empty PA-TNC message --- src/libimcv/pa_tnc/pa_tnc_msg.c | 7 +++++++ src/libimcv/pa_tnc/pa_tnc_msg.h | 7 +++++++ .../plugins/imv_attestation/imv_attestation.c | 15 +++++++++++---- .../imv_attestation/imv_attestation_build.c | 2 +- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/libimcv/pa_tnc/pa_tnc_msg.c b/src/libimcv/pa_tnc/pa_tnc_msg.c index f8d3b9d0e8..bcb5427ce2 100644 --- a/src/libimcv/pa_tnc/pa_tnc_msg.c +++ b/src/libimcv/pa_tnc/pa_tnc_msg.c @@ -317,6 +317,12 @@ METHOD(pa_tnc_msg_t, create_attribute_enumerator, enumerator_t*, return this->attributes->create_enumerator(this->attributes); } +METHOD(pa_tnc_msg_t, get_attribute_count, int, + private_pa_tnc_msg_t *this) +{ + return this->attributes->get_count(this->attributes); +} + METHOD(pa_tnc_msg_t, create_error_enumerator, enumerator_t*, private_pa_tnc_msg_t *this) { @@ -348,6 +354,7 @@ pa_tnc_msg_t *pa_tnc_msg_create_from_data(chunk_t data) .build = _build, .process = _process, .create_attribute_enumerator = _create_attribute_enumerator, + .get_attribute_count = _get_attribute_count, .create_error_enumerator = _create_error_enumerator, .destroy = _destroy, }, diff --git a/src/libimcv/pa_tnc/pa_tnc_msg.h b/src/libimcv/pa_tnc/pa_tnc_msg.h index bff954678e..97e9344e91 100644 --- a/src/libimcv/pa_tnc/pa_tnc_msg.h +++ b/src/libimcv/pa_tnc/pa_tnc_msg.h @@ -68,6 +68,13 @@ struct pa_tnc_msg_t { */ enumerator_t* (*create_attribute_enumerator)(pa_tnc_msg_t *this); + /** + * Get Count of the PA-TNC attributes + * + * @return return attributes count + */ + int (*get_attribute_count)(pa_tnc_msg_t *this); + /** * Enumerates over all parsing errors * diff --git a/src/libpts/plugins/imv_attestation/imv_attestation.c b/src/libpts/plugins/imv_attestation/imv_attestation.c index 7d8445c131..70f574e531 100644 --- a/src/libpts/plugins/imv_attestation/imv_attestation.c +++ b/src/libpts/plugins/imv_attestation/imv_attestation.c @@ -181,11 +181,18 @@ static TNC_Result send_message(TNC_ConnectionID connection_id) msg = pa_tnc_msg_create(); if (imv_attestation_build(msg, attestation_state, supported_algorithms, - supported_dh_groups, pts_db)) + supported_dh_groups, pts_db)) { - msg->build(msg); - result = imv_attestation->send_message(imv_attestation, connection_id, - msg->get_encoding(msg)); + if (!msg->get_attribute_count(msg)) + { + result = TNC_RESULT_SUCCESS; + } + else + { + msg->build(msg); + result = imv_attestation->send_message(imv_attestation, + connection_id, msg->get_encoding(msg)); + } } else { diff --git a/src/libpts/plugins/imv_attestation/imv_attestation_build.c b/src/libpts/plugins/imv_attestation/imv_attestation_build.c index 2477924b2e..f20cead3e4 100644 --- a/src/libpts/plugins/imv_attestation/imv_attestation_build.c +++ b/src/libpts/plugins/imv_attestation/imv_attestation_build.c @@ -236,11 +236,11 @@ bool imv_attestation_build(pa_tnc_msg_t *msg, { break; } - DBG2(DBG_IMV, "evidence request by"); while (enumerator->enumerate(enumerator, &vid, &name, &qualifier, &depth)) { comp_name = pts_comp_func_name_create(vid, name, qualifier); + DBG2(DBG_IMV, "evidence request by"); comp_name->log(comp_name, " "); comp = pts_components->create(pts_components, comp_name, -- 2.47.2