From 2dbc31682ca580615d4f6855a1e7dfdcc562c6a6 Mon Sep 17 00:00:00 2001 From: Jan Hutter Date: Thu, 17 Nov 2005 12:50:54 +0000 Subject: [PATCH] - added verify functionality --- Source/charon/message.c | 21 +++++++++++++-------- Source/charon/message.h | 2 ++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Source/charon/message.c b/Source/charon/message.c index 272a5ab..9d9f0b0 100644 --- a/Source/charon/message.c +++ b/Source/charon/message.c @@ -540,9 +540,19 @@ static status_t parse_header (private_message_t *this) status = this->parser->parse_payload(this->parser,HEADER,(payload_t **) &ike_header); if (status != SUCCESS) { + this->logger->log(this->logger, ERROR, "Header could not be parsed"); return status; } + + /* verify payload */ + status = ike_header->payload_interface.verify(&(ike_header->payload_interface)); + if (status != SUCCESS) + { + this->logger->log(this->logger, ERROR, "Header could not be verified"); + return status; + } + if (this->ike_sa_id != NULL) { this->ike_sa_id->destroy(this->ike_sa_id); @@ -552,18 +562,13 @@ static status_t parse_header (private_message_t *this) this->ike_sa_id = ike_sa_id_create(ike_header->get_initiator_spi(ike_header),ike_header->get_responder_spi(ike_header),this->original_initiator); if (this->ike_sa_id == NULL) { + this->logger->log(this->logger, ERROR, "Could not creaee ike_sa_id object"); ike_header->destroy(ike_header); return OUT_OF_RES; } this->exchange_type = ike_header->get_exchange_type(ike_header); this->message_id = ike_header->get_message_id(ike_header); this->is_request = (!(ike_header->get_response_flag(ike_header))); - if ((ike_header->get_initiator_spi(ike_header) == 0) && (ike_header->get_responder_spi(ike_header) != 0)) - { - /* initiator spi not set */ - ike_header->destroy(ike_header); - return PARSE_ERROR; - } this->major_version = ike_header->get_maj_version(ike_header); this->minor_version = ike_header->get_min_version(ike_header); this->first_payload = ike_header->payload_interface.get_next_type(&(ike_header->payload_interface)); @@ -620,11 +625,11 @@ static status_t parse_body (private_message_t *this) current_payload_type = current_payload->get_next_type(current_payload); - // status = current_payload->verify(current_payload); + status = current_payload->verify(current_payload); if (status != SUCCESS) { this->logger->log(this->logger, ERROR, "Payload type %s could not be verified",mapping_find(payload_type_m,current_payload_type)); - status = PARSE_ERROR; + status = VERIFY_ERROR; break; } diff --git a/Source/charon/message.h b/Source/charon/message.h index d48ead8..009b435 100644 --- a/Source/charon/message.h +++ b/Source/charon/message.h @@ -191,6 +191,7 @@ struct message_s { * - SUCCESS if header could be parsed * - OUT_OF_RES if out of ressources * - PARSE_ERROR if corrupted/invalid data found + * - FAILED if consistence check of header failed */ status_t (*parse_header) (message_t *this); @@ -204,6 +205,7 @@ struct message_s { * - OUT_OF_RES if out of ressources * - FAILED if message type is not suppported! * - PARSE_ERROR if corrupted/invalid data found + * - VERIFY_ERROR if verification of some payload failed */ status_t (*parse_body) (message_t *this); -- 2.7.4