diff options
Diffstat (limited to 'Source/charon/encoding')
20 files changed, 37 insertions, 106 deletions
diff --git a/Source/charon/encoding/generator.c b/Source/charon/encoding/generator.c index 7b65223bf..0d7394a10 100644 --- a/Source/charon/encoding/generator.c +++ b/Source/charon/encoding/generator.c @@ -1029,7 +1029,6 @@ static void generate_payload (private_generator_t *this,payload_t *payload) static status_t destroy(private_generator_t *this) { allocator_free(this->buffer); - charon->logger_manager->destroy_logger(charon->logger_manager,this->logger); allocator_free(this); return SUCCESS; } @@ -1073,7 +1072,7 @@ generator_t *generator_create() this->current_bit = 0; this->last_payload_length_position_offset = 0; this->header_length_position_offset = 0; - this->logger = charon->logger_manager->create_logger(charon->logger_manager,GENERATOR,NULL); + this->logger = charon->logger_manager->get_logger(charon->logger_manager, GENERATOR); return &(this->public); } diff --git a/Source/charon/encoding/message.c b/Source/charon/encoding/message.c index b79020a24..360e44a71 100644 --- a/Source/charon/encoding/message.c +++ b/Source/charon/encoding/message.c @@ -746,7 +746,7 @@ static status_t parse_body(private_message_t *this, crypter_t *crypter, signer_t current_payload_type = this->first_payload; - this->logger->log(this->logger, CONTROL|LEVEL1, "Parsing body of message, first payload %s", + this->logger->log(this->logger, CONTROL|LEVEL1, "Parsing body of message, first payload is %s", mapping_find(payload_type_m, current_payload_type)); /* parse payload for payload, while there are more available */ @@ -754,7 +754,7 @@ static status_t parse_body(private_message_t *this, crypter_t *crypter, signer_t { payload_t *current_payload; - this->logger->log(this->logger, CONTROL|LEVEL2, "Start parsing payload of type %s", + this->logger->log(this->logger, CONTROL|LEVEL2, "Start parsing a %s payload", mapping_find(payload_type_m, current_payload_type)); /* parse current payload */ @@ -774,21 +774,21 @@ static status_t parse_body(private_message_t *this, crypter_t *crypter, signer_t status = current_payload->verify(current_payload); if (status != SUCCESS) { - this->logger->log(this->logger, ERROR, "Payload type %s verification failed", + this->logger->log(this->logger, ERROR, "%s payload verification failed", mapping_find(payload_type_m,current_payload_type)); current_payload->destroy(current_payload); status = VERIFY_ERROR; return status; } - this->logger->log(this->logger, CONTROL|LEVEL2, "Payload verified. Adding to payload list", + this->logger->log(this->logger, CONTROL|LEVEL2, "%s payload verified. Adding to payload list", mapping_find(payload_type_m, current_payload_type)); this->payloads->insert_last(this->payloads,current_payload); /* an encryption payload is the last one, so STOP here. decryption is done later */ if (current_payload_type == ENCRYPTED) { - this->logger->log(this->logger, CONTROL|LEVEL2, "Payload of type encrypted found. Stop parsing", + this->logger->log(this->logger, CONTROL|LEVEL2, "%s payload found. Stop parsing", mapping_find(payload_type_m, current_payload_type)); break; } @@ -1153,7 +1153,6 @@ static void destroy (private_message_t *this) iterator->destroy(iterator); this->payloads->destroy(this->payloads); this->parser->destroy(this->parser); - charon->logger_manager->destroy_logger(charon->logger_manager, this->logger); allocator_free(this); } @@ -1218,7 +1217,7 @@ message_t *message_create_from_packet(packet_t *packet) /* parser is created from data of packet */ this->parser = parser_create(this->packet->get_data(this->packet)); - this->logger = charon->logger_manager->create_logger(charon->logger_manager, MESSAGE, NULL); + this->logger = charon->logger_manager->get_logger(charon->logger_manager, MESSAGE); return (&this->public); } @@ -1246,7 +1245,7 @@ message_t *message_create_notify_reply(host_t *source, host_t *destination, exch message->set_message_id(message,0); message->set_ike_sa_id(message, ike_sa_id); - payload = notify_payload_create_from_protocol_and_type(IKE,notify_type); + payload = notify_payload_create_from_protocol_and_type(PROTO_IKE, notify_type); message->add_payload(message,(payload_t *) payload); return message; diff --git a/Source/charon/encoding/parser.c b/Source/charon/encoding/parser.c index f161391bd..769a815df 100644 --- a/Source/charon/encoding/parser.c +++ b/Source/charon/encoding/parser.c @@ -1027,7 +1027,6 @@ static void reset_context (private_parser_t *this) */ static void destroy(private_parser_t *this) { - charon->logger_manager->destroy_logger(charon->logger_manager,this->logger); allocator_free(this); } @@ -1038,7 +1037,7 @@ parser_t *parser_create(chunk_t data) { private_parser_t *this = allocator_alloc_thing(private_parser_t); - this->logger = charon->logger_manager->create_logger(charon->logger_manager, PARSER, NULL); + this->logger = charon->logger_manager->get_logger(charon->logger_manager, PARSER); this->public.parse_payload = (status_t(*)(parser_t*,payload_type_t,payload_t**)) parse_payload; this->public.reset_context = (void(*)(parser_t*)) reset_context; diff --git a/Source/charon/encoding/payloads/auth_payload.c b/Source/charon/encoding/payloads/auth_payload.c index 73e5abd5d..8adb6fd6d 100644 --- a/Source/charon/encoding/payloads/auth_payload.c +++ b/Source/charon/encoding/payloads/auth_payload.c @@ -116,11 +116,6 @@ encoding_rule_t auth_payload_encodings[] = { */ static status_t verify(private_auth_payload_t *this) { - if (this->critical) - { - /* critical bit is set! */ - return FAILED; - } if ((this->auth_method == 0) || ((this->auth_method >= 4) && (this->auth_method <= 200))) { diff --git a/Source/charon/encoding/payloads/cert_payload.c b/Source/charon/encoding/payloads/cert_payload.c index 10256cf8e..a361f1345 100644 --- a/Source/charon/encoding/payloads/cert_payload.c +++ b/Source/charon/encoding/payloads/cert_payload.c @@ -129,11 +129,6 @@ encoding_rule_t cert_payload_encodings[] = { */ static status_t verify(private_cert_payload_t *this) { - if (this->critical) - { - /* critical bit is set! */ - return FAILED; - } if ((this->cert_encoding == 0) || ((this->cert_encoding >= 14) && (this->cert_encoding <= 200))) { diff --git a/Source/charon/encoding/payloads/certreq_payload.c b/Source/charon/encoding/payloads/certreq_payload.c index 8058ff08f..b7372a7a2 100644 --- a/Source/charon/encoding/payloads/certreq_payload.c +++ b/Source/charon/encoding/payloads/certreq_payload.c @@ -109,11 +109,6 @@ encoding_rule_t certreq_payload_encodings[] = { */ static status_t verify(private_certreq_payload_t *this) { - if (this->critical) - { - /* critical bit is set! */ - return FAILED; - } if ((this->cert_encoding == 0) || ((this->cert_encoding >= 14) && (this->cert_encoding <= 200))) { diff --git a/Source/charon/encoding/payloads/cp_payload.c b/Source/charon/encoding/payloads/cp_payload.c index cca06d1b1..e9d8af77e 100644 --- a/Source/charon/encoding/payloads/cp_payload.c +++ b/Source/charon/encoding/payloads/cp_payload.c @@ -139,12 +139,6 @@ static status_t verify(private_cp_payload_t *this) { status_t status = SUCCESS; iterator_t *iterator; - - if (this->critical) - { - /* critical bit set! */ - return FAILED; - } iterator = this->attributes->create_iterator(this->attributes,TRUE); diff --git a/Source/charon/encoding/payloads/delete_payload.c b/Source/charon/encoding/payloads/delete_payload.c index 21f064e51..59d877945 100644 --- a/Source/charon/encoding/payloads/delete_payload.c +++ b/Source/charon/encoding/payloads/delete_payload.c @@ -121,11 +121,6 @@ encoding_rule_t delete_payload_encodings[] = { */ static status_t verify(private_delete_payload_t *this) { - if (this->critical) - { - /* critical bit is set! */ - return FAILED; - } if ((this->protocol_id == 0) || (this->protocol_id > 3)) { @@ -136,7 +131,7 @@ static status_t verify(private_delete_payload_t *this) { return FAILED; } - if ((this->protocol_id == IKE) && (this->spis.len != 0)) + if ((this->protocol_id == PROTO_IKE) && (this->spis.len != 0)) { /* IKE deletion has no spi assigned! */ return FAILED; @@ -318,7 +313,7 @@ delete_payload_t *delete_payload_create() this->critical = FALSE; this->next_payload = NO_PAYLOAD; this->payload_length =DELETE_PAYLOAD_HEADER_LENGTH; - this->protocol_id = UNDEFINED_PROTOCOL_ID; + this->protocol_id = PROTO_NONE; this->spi_size = 0; this->spi_count = 0; this->spis = CHUNK_INITIALIZER; diff --git a/Source/charon/encoding/payloads/eap_payload.c b/Source/charon/encoding/payloads/eap_payload.c index f6f8426e0..2bd8d5ee0 100644 --- a/Source/charon/encoding/payloads/eap_payload.c +++ b/Source/charon/encoding/payloads/eap_payload.c @@ -101,11 +101,6 @@ encoding_rule_t eap_payload_encodings[] = { */ static status_t verify(private_eap_payload_t *this) { - if (this->critical) - { - /* critical bit is set! */ - return FAILED; - } return SUCCESS; } diff --git a/Source/charon/encoding/payloads/encryption_payload.c b/Source/charon/encoding/payloads/encryption_payload.c index e642bb318..da48c8349 100644 --- a/Source/charon/encoding/payloads/encryption_payload.c +++ b/Source/charon/encoding/payloads/encryption_payload.c @@ -638,7 +638,6 @@ static void destroy(private_encryption_payload_t *this) current_payload->destroy(current_payload); } this->payloads->destroy(this->payloads); - charon->logger_manager->destroy_logger(charon->logger_manager, this->logger); allocator_free(this->encrypted.ptr); allocator_free(this->decrypted.ptr); allocator_free(this); @@ -677,10 +676,10 @@ encryption_payload_t *encryption_payload_create() this->compute_length = compute_length; this->generate = generate; this->parse = parse; - this->logger = charon->logger_manager->create_logger(charon->logger_manager, ENCRYPTION_PAYLOAD, NULL); + this->logger = charon->logger_manager->get_logger(charon->logger_manager, ENCRYPTION_PAYLOAD); /* set default values of the fields */ - this->critical = TRUE; + this->critical = FALSE; this->next_payload = NO_PAYLOAD; this->payload_length = ENCRYPTION_PAYLOAD_HEADER_LENGTH; this->encrypted = CHUNK_INITIALIZER; diff --git a/Source/charon/encoding/payloads/id_payload.c b/Source/charon/encoding/payloads/id_payload.c index c720c7119..df37a06f5 100644 --- a/Source/charon/encoding/payloads/id_payload.c +++ b/Source/charon/encoding/payloads/id_payload.c @@ -119,11 +119,6 @@ encoding_rule_t id_payload_encodings[] = { */ static status_t verify(private_id_payload_t *this) { - if (this->critical) - { - /* critical bit is set! */ - return FAILED; - } if ((this->id_type == 0) || (this->id_type == 4) || ((this->id_type >= 6) && (this->id_type <= 8)) || diff --git a/Source/charon/encoding/payloads/ke_payload.c b/Source/charon/encoding/payloads/ke_payload.c index f1ba922ca..5cbf99b25 100644 --- a/Source/charon/encoding/payloads/ke_payload.c +++ b/Source/charon/encoding/payloads/ke_payload.c @@ -123,12 +123,6 @@ encoding_rule_t ke_payload_encodings[] = { */ static status_t verify(private_ke_payload_t *this) { - if (this->critical) - { - /* critical bit is set! */ - return FAILED; - } - /* dh group is not verified in here */ return SUCCESS; } diff --git a/Source/charon/encoding/payloads/nonce_payload.c b/Source/charon/encoding/payloads/nonce_payload.c index 63f1adddd..aa71f8bf6 100644 --- a/Source/charon/encoding/payloads/nonce_payload.c +++ b/Source/charon/encoding/payloads/nonce_payload.c @@ -111,11 +111,6 @@ encoding_rule_t nonce_payload_encodings[] = { */ static status_t verify(private_nonce_payload_t *this) { - if (this->critical) - { - /* critical bit is set! */ - return FAILED; - } if ((this->nonce.len < 16) || ((this->nonce.len > 256))) { /* nonce length is wrong */ diff --git a/Source/charon/encoding/payloads/notify_payload.c b/Source/charon/encoding/payloads/notify_payload.c index ee4b44e9e..b26f89b39 100644 --- a/Source/charon/encoding/payloads/notify_payload.c +++ b/Source/charon/encoding/payloads/notify_payload.c @@ -25,6 +25,7 @@ #include "notify_payload.h" +#include <daemon.h> #include <encoding/payloads/encodings.h> #include <utils/allocator.h> @@ -105,6 +106,11 @@ struct private_notify_payload_t { chunk_t notification_data; /** + * Assigned logger + */ + logger_t *logger; + + /** * @brief Computes the length of this payload. * * @param this calling private_ke_payload_t object @@ -169,11 +175,6 @@ encoding_rule_t notify_payload_encodings[] = { */ static status_t verify(private_notify_payload_t *this) { - if (this->critical) - { - /* critical bit is set! */ - return FAILED; - } if (this->protocol_id > 3) { /* reserved for future use */ @@ -191,9 +192,20 @@ static status_t verify(private_notify_payload_t *this) return FAILED; } dh_group = ntohs(*((u_int16_t*)this->notification_data.ptr)); - if (dh_group < MODP_1024_BIT || dh_group > MODP_8192_BIT) + switch (dh_group) { - return FAILED; + case MODP_768_BIT: + case MODP_1024_BIT: + case MODP_1536_BIT: + case MODP_2048_BIT: + case MODP_3072_BIT: + case MODP_4096_BIT: + case MODP_6144_BIT: + case MODP_8192_BIT: + break; + default: + this->logger->log(this->logger, ERROR, "Bad DH group (%d)", dh_group); + return FAILED; } } return SUCCESS; @@ -402,7 +414,7 @@ notify_payload_t *notify_payload_create() this->compute_length = compute_length; /* set default values of the fields */ - this->critical = NOTIFY_PAYLOAD_CRITICAL_FLAG; + this->critical = FALSE; this->next_payload = NO_PAYLOAD; this->payload_length = NOTIFY_PAYLOAD_HEADER_LENGTH; this->protocol_id = 0; @@ -412,6 +424,7 @@ notify_payload_t *notify_payload_create() this->spi_size = 0; this->notification_data.ptr = NULL; this->notification_data.len = 0; + this->logger = charon->logger_manager->get_logger(charon->logger_manager, PAYLOAD); return (&(this->public)); } diff --git a/Source/charon/encoding/payloads/notify_payload.h b/Source/charon/encoding/payloads/notify_payload.h index 148a8833f..093f99144 100644 --- a/Source/charon/encoding/payloads/notify_payload.h +++ b/Source/charon/encoding/payloads/notify_payload.h @@ -30,13 +30,6 @@ #include <utils/linked_list.h> /** - * Critical flag must not be set. - * - * @ingroup payloads - */ -#define NOTIFY_PAYLOAD_CRITICAL_FLAG FALSE; - -/** * Notify payload length in bytes without any spi and notification data. * * @ingroup payloads diff --git a/Source/charon/encoding/payloads/proposal_substructure.c b/Source/charon/encoding/payloads/proposal_substructure.c index 922dde40d..4ee2e91f4 100644 --- a/Source/charon/encoding/payloads/proposal_substructure.c +++ b/Source/charon/encoding/payloads/proposal_substructure.c @@ -620,7 +620,7 @@ proposal_substructure_t *proposal_substructure_create_from_proposal(proposal_t * iterator->destroy(iterator); /* take over general infos */ - this->spi_size = proto == IKE ? 8 : 4; + this->spi_size = proto == PROTO_IKE ? 8 : 4; this->spi.len = this->spi_size; this->spi.ptr = allocator_alloc(this->spi_size); *((u_int32_t*)this->spi.ptr) = proposal->get_spi(proposal, proto); diff --git a/Source/charon/encoding/payloads/sa_payload.c b/Source/charon/encoding/payloads/sa_payload.c index 3a40d41b2..91049dd65 100644 --- a/Source/charon/encoding/payloads/sa_payload.c +++ b/Source/charon/encoding/payloads/sa_payload.c @@ -118,12 +118,6 @@ static status_t verify(private_sa_payload_t *this) status_t status = SUCCESS; iterator_t *iterator; bool first = TRUE; - - if (this->critical) - { - /* critical bit set! */ - return FAILED; - } /* check proposal numbering */ iterator = this->proposals->create_iterator(this->proposals,TRUE); @@ -269,7 +263,7 @@ static void add_proposal(private_sa_payload_t *this, proposal_t *proposal) proposal->get_protocols(proposal, proto); for (i = 0; i<2; i++) { - if (proto[i] != UNDEFINED_PROTOCOL_ID) + if (proto[i] != PROTO_NONE) { substructure = proposal_substructure_create_from_proposal(proposal, proto[i]); add_proposal_substructure(this, substructure); @@ -356,7 +350,7 @@ sa_payload_t *sa_payload_create() this->compute_length = compute_length; /* set default values of the fields */ - this->critical = SA_PAYLOAD_CRITICAL_FLAG; + this->critical = FALSE; this->next_payload = NO_PAYLOAD; this->payload_length = SA_PAYLOAD_HEADER_LENGTH; diff --git a/Source/charon/encoding/payloads/sa_payload.h b/Source/charon/encoding/payloads/sa_payload.h index d7120ec4b..45095c030 100644 --- a/Source/charon/encoding/payloads/sa_payload.h +++ b/Source/charon/encoding/payloads/sa_payload.h @@ -29,13 +29,6 @@ #include <utils/linked_list.h> /** - * Critical flag must not be set. - * - * @ingroup payloads - */ -#define SA_PAYLOAD_CRITICAL_FLAG FALSE; - -/** * SA_PAYLOAD length in bytes without any proposal substructure. * * @ingroup payloads diff --git a/Source/charon/encoding/payloads/ts_payload.c b/Source/charon/encoding/payloads/ts_payload.c index 4bc6ccbc8..33a0cdab8 100644 --- a/Source/charon/encoding/payloads/ts_payload.c +++ b/Source/charon/encoding/payloads/ts_payload.c @@ -130,11 +130,6 @@ static status_t verify(private_ts_payload_t *this) iterator_t *iterator; status_t status = SUCCESS; - if (this->critical) - { - /* critical bit is set! */ - return FAILED; - } if (this->number_of_traffic_selectors != (this->traffic_selectors->get_count(this->traffic_selectors))) { /* must be the same */ diff --git a/Source/charon/encoding/payloads/vendor_id_payload.c b/Source/charon/encoding/payloads/vendor_id_payload.c index b598f604b..28f07608b 100644 --- a/Source/charon/encoding/payloads/vendor_id_payload.c +++ b/Source/charon/encoding/payloads/vendor_id_payload.c @@ -102,12 +102,6 @@ encoding_rule_t vendor_id_payload_encodings[] = { */ static status_t verify(private_vendor_id_payload_t *this) { - if (this->critical) - { - /* critical bit is set! */ - return FAILED; - } - return SUCCESS; } |