Do PTS measurements only if session initialisation was successful 5.1.2dr3
authorAndreas Steffen <andreas.steffen@strongswan.org>
Wed, 15 Jan 2014 11:06:22 +0000 (12:06 +0100)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Wed, 15 Jan 2014 11:06:22 +0000 (12:06 +0100)
src/libpts/plugins/imv_attestation/imv_attestation_agent.c

index 084d838..957ca9b 100644 (file)
@@ -345,15 +345,14 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
                state->set_action_flags(state, IMV_ATTESTATION_FLAG_ATTR_REQ);
        }
 
-       /* create an empty out message - we might need it */
-       out_msg = imv_msg_create(this->agent, state, id, imv_id, TNC_IMCID_ANY,
-                                                        msg_types[0]);
-
        if (handshake_state == IMV_ATTESTATION_STATE_INIT)
        {
                pa_tnc_attr_t *attr;
                pts_proto_caps_flag_t flags;
 
+               out_msg = imv_msg_create(this->agent, state, id, imv_id, TNC_IMCID_ANY,
+                                                                msg_types[0]);
+
                /* Send Request Protocol Capabilities attribute */
                flags = pts->get_proto_caps(pts);
                attr = tcg_pts_attr_proto_caps_create(flags, TRUE);
@@ -367,11 +366,27 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
 
                attestation_state->set_handshake_state(attestation_state,
                                                                                IMV_ATTESTATION_STATE_DISCOVERY);
+
+               /* send these initial PTS attributes and exit */
+               result = out_msg->send(out_msg, FALSE);
+               out_msg->destroy(out_msg);
+
+               return result;
+       }
+
+       /* exit if we are not ready yet for PTS measurements */
+       if (!platform_info || !session ||
+           !(state->get_action_flags(state) & IMV_ATTESTATION_FLAG_ALGO))
+       {
+               return TNC_RESULT_SUCCESS;
        }
 
-       if (platform_info && session &&
-          (state->get_action_flags(state) & IMV_ATTESTATION_FLAG_ALGO) &&
-         !(state->get_action_flags(state) & IMV_ATTESTATION_FLAG_FILE_MEAS))
+       /* create an empty out message - we might need it */
+       out_msg = imv_msg_create(this->agent, state, id, imv_id, TNC_IMCID_ANY,
+                                                        msg_types[0]);
+
+       /* establish the PTS measurements to be taken */
+       if (!(state->get_action_flags(state) & IMV_ATTESTATION_FLAG_FILE_MEAS))
        {
                bool is_dir, no_workitems = TRUE;
                u_int32_t delimiter = SOLIDUS_UTF;