From b0b9d185931e7f88f0f7c89e9ef4e6034ac38dd3 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Wed, 16 Nov 2011 09:29:38 +0100 Subject: Extend sa_payload for IKEv1 support --- src/libcharon/encoding/parser.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index 6309a5c3f..09b52168f 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -496,6 +496,18 @@ METHOD(parser_t, parse_payload, status_t, } break; } + case PROPOSALS_V1: + { + if (payload_length < SA_PAYLOAD_V1_HEADER_LENGTH || + !parse_list(this, rule_number, output + rule->offset, + PROPOSAL_SUBSTRUCTURE_V1, + payload_length - SA_PAYLOAD_V1_HEADER_LENGTH)) + { + pld->destroy(pld); + return PARSE_ERROR; + } + break; + } case TRANSFORMS: { if (payload_length < -- cgit v1.2.3 From 3f6d1b13a7d53bf465c65687e18425d14a143af8 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Wed, 16 Nov 2011 12:40:09 +0000 Subject: Added additional IKEv1 payload and encoding identifiers --- src/libcharon/encoding/parser.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index 09b52168f..c2c60f06a 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -521,6 +521,19 @@ METHOD(parser_t, parse_payload, status_t, } break; } + case TRANSFORMS_V1: + { + if (payload_length < + spi_size + PROPOSAL_SUBSTRUCTURE_HEADER_LENGTH || + !parse_list(this, rule_number, output + rule->offset, + TRANSFORM_SUBSTRUCTURE_V1, payload_length - spi_size - + PROPOSAL_SUBSTRUCTURE_HEADER_LENGTH)) + { + pld->destroy(pld); + return PARSE_ERROR; + } + break; + } case TRANSFORM_ATTRIBUTES: { if (payload_length < TRANSFORM_SUBSTRUCTURE_HEADER_LENGTH || @@ -533,6 +546,18 @@ METHOD(parser_t, parse_payload, status_t, } break; } + case TRANSFORM_ATTRIBUTES_V1: + { + if (payload_length < TRANSFORM_SUBSTRUCTURE_HEADER_LENGTH || + !parse_list(this, rule_number, output + rule->offset, + TRANSFORM_ATTRIBUTE_V1, + payload_length - TRANSFORM_SUBSTRUCTURE_HEADER_LENGTH)) + { + pld->destroy(pld); + return PARSE_ERROR; + } + break; + } case CONFIGURATION_ATTRIBUTES: { if (payload_length < CP_PAYLOAD_HEADER_LENGTH || -- cgit v1.2.3 From 683d83ed3ef6c920a59f6d23d0f44c66fc6ded42 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Thu, 17 Nov 2011 11:16:02 +0100 Subject: Extended KE payload for IKEv1 support --- src/libcharon/encoding/parser.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index c2c60f06a..86ab212b8 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -729,6 +729,17 @@ METHOD(parser_t, parse_payload, status_t, } break; } + case KEY_EXCHANGE_DATA_V1: + { + if (payload_length < KE_PAYLOAD_V1_HEADER_LENGTH || + !parse_chunk(this, rule_number, output + rule->offset, + payload_length - KE_PAYLOAD_V1_HEADER_LENGTH)) + { + pld->destroy(pld); + return PARSE_ERROR; + } + break; + } case NOTIFICATION_DATA: { if (payload_length < NOTIFY_PAYLOAD_HEADER_LENGTH + spi_size || -- cgit v1.2.3 From e9b55b832546d05f464bdddbe779ed21cd17b624 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Thu, 17 Nov 2011 11:27:55 +0100 Subject: Simplify signature of get_encoding_rules(), make all rules static --- src/libcharon/encoding/parser.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index 86ab212b8..4736873a7 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -363,11 +363,10 @@ METHOD(parser_t, parse_payload, status_t, { payload_t *pld; void *output; - size_t rule_count; int payload_length = 0, spi_size = 0, attribute_length = 0; u_int16_t ts_type = 0; bool attribute_format = FALSE; - int rule_number; + int rule_number, rule_count; encoding_rule_t *rule; /* create instance of the payload to parse */ @@ -383,7 +382,7 @@ METHOD(parser_t, parse_payload, status_t, output = pld; /* parse the payload with its own rulse */ - pld->get_encoding_rules(pld, &this->rules, &rule_count); + rule_count = pld->get_encoding_rules(pld, &this->rules); for (rule_number = 0; rule_number < rule_count; rule_number++) { rule = &(this->rules[rule_number]); -- cgit v1.2.3 From 38fb67fbf18489f40845b072e4ed50b1f6cf0c9c Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Thu, 17 Nov 2011 11:27:46 +0000 Subject: Add a payload.get_header_length() method, remove header length definitions --- src/libcharon/encoding/parser.c | 287 ++++++++-------------------------------- 1 file changed, 55 insertions(+), 232 deletions(-) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index 4736873a7..719c94254 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -358,12 +358,40 @@ static bool parse_chunk(private_parser_t *this, int rule_number, return TRUE; } +/** + * Map a encoding type to a encoded payload + */ +static payload_type_t map_wrapped_payload(encoding_type_t type) +{ + switch (type) + { + case PROPOSALS: + return PROPOSAL_SUBSTRUCTURE; + case PROPOSALS_V1: + return PROPOSAL_SUBSTRUCTURE_V1; + case TRANSFORMS: + return TRANSFORM_SUBSTRUCTURE; + case TRANSFORMS_V1: + return TRANSFORM_SUBSTRUCTURE_V1; + case TRANSFORM_ATTRIBUTES: + return TRANSFORM_ATTRIBUTE; + case TRANSFORM_ATTRIBUTES_V1: + return TRANSFORM_ATTRIBUTE_V1; + case CONFIGURATION_ATTRIBUTES: + return CONFIGURATION_ATTRIBUTE; + case TRAFFIC_SELECTORS: + return TRAFFIC_SELECTOR_SUBSTRUCTURE; + default: + return NO_PAYLOAD; + } +} + METHOD(parser_t, parse_payload, status_t, private_parser_t *this, payload_type_t payload_type, payload_t **payload) { payload_t *pld; void *output; - int payload_length = 0, spi_size = 0, attribute_length = 0; + int payload_length = 0, spi_size = 0, attribute_length = 0, header_length; u_int16_t ts_type = 0; bool attribute_format = FALSE; int rule_number, rule_count; @@ -381,6 +409,7 @@ METHOD(parser_t, parse_payload, status_t, /* base pointer for output, avoids casting in every rule */ output = pld; + header_length = pld->get_header_length(pld); /* parse the payload with its own rulse */ rule_count = pld->get_encoding_rules(pld, &this->rules); for (rule_number = 0; rule_number < rule_count; rule_number++) @@ -456,7 +485,8 @@ METHOD(parser_t, parse_payload, status_t, } /* parsed u_int16 should be aligned */ payload_length = *(u_int16_t*)(output + rule->offset); - if (payload_length < UNKNOWN_PAYLOAD_HEADER_LENGTH) + /* all payloads must have at least 4 bytes header */ + if (payload_length < 4) { pld->destroy(pld); return PARSE_ERROR; @@ -483,86 +513,44 @@ METHOD(parser_t, parse_payload, status_t, } break; } + /* lists */ case PROPOSALS: - { - if (payload_length < SA_PAYLOAD_HEADER_LENGTH || - !parse_list(this, rule_number, output + rule->offset, - PROPOSAL_SUBSTRUCTURE, - payload_length - SA_PAYLOAD_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } case PROPOSALS_V1: - { - if (payload_length < SA_PAYLOAD_V1_HEADER_LENGTH || - !parse_list(this, rule_number, output + rule->offset, - PROPOSAL_SUBSTRUCTURE_V1, - payload_length - SA_PAYLOAD_V1_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } case TRANSFORMS: - { - if (payload_length < - spi_size + PROPOSAL_SUBSTRUCTURE_HEADER_LENGTH || - !parse_list(this, rule_number, output + rule->offset, - TRANSFORM_SUBSTRUCTURE, payload_length - spi_size - - PROPOSAL_SUBSTRUCTURE_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } case TRANSFORMS_V1: - { - if (payload_length < - spi_size + PROPOSAL_SUBSTRUCTURE_HEADER_LENGTH || - !parse_list(this, rule_number, output + rule->offset, - TRANSFORM_SUBSTRUCTURE_V1, payload_length - spi_size - - PROPOSAL_SUBSTRUCTURE_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } case TRANSFORM_ATTRIBUTES: - { - if (payload_length < TRANSFORM_SUBSTRUCTURE_HEADER_LENGTH || - !parse_list(this, rule_number, output + rule->offset, - TRANSFORM_ATTRIBUTE, - payload_length - TRANSFORM_SUBSTRUCTURE_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } case TRANSFORM_ATTRIBUTES_V1: + case TRAFFIC_SELECTORS: { - if (payload_length < TRANSFORM_SUBSTRUCTURE_HEADER_LENGTH || + if (payload_length < header_length || !parse_list(this, rule_number, output + rule->offset, - TRANSFORM_ATTRIBUTE_V1, - payload_length - TRANSFORM_SUBSTRUCTURE_HEADER_LENGTH)) + map_wrapped_payload(rule->type), + payload_length - header_length)) { pld->destroy(pld); return PARSE_ERROR; } break; } - case CONFIGURATION_ATTRIBUTES: + /* chunks */ + case NONCE_DATA: + case ID_DATA: + case AUTH_DATA: + case CERT_DATA: + case CERTREQ_DATA: + case EAP_DATA: + case SPIS: + case VID_DATA: + case CONFIGURATION_ATTRIBUTE_VALUE: + case KEY_EXCHANGE_DATA: + case KEY_EXCHANGE_DATA_V1: + case NOTIFICATION_DATA: + case ENCRYPTED_DATA: + case UNKNOWN_DATA: { - if (payload_length < CP_PAYLOAD_HEADER_LENGTH || - !parse_list(this, rule_number, output + rule->offset, - CONFIGURATION_ATTRIBUTE, - payload_length - CP_PAYLOAD_HEADER_LENGTH)) + if (payload_length < header_length || + !parse_chunk(this, rule_number, output + rule->offset, + payload_length - header_length)) { pld->destroy(pld); return PARSE_ERROR; @@ -619,148 +607,6 @@ METHOD(parser_t, parse_payload, status_t, } break; } - case NONCE_DATA: - { - if (payload_length < NONCE_PAYLOAD_HEADER_LENGTH || - !parse_chunk(this, rule_number, output + rule->offset, - payload_length - NONCE_PAYLOAD_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } - case ID_DATA: - { - if (payload_length < ID_PAYLOAD_HEADER_LENGTH || - !parse_chunk(this, rule_number, output + rule->offset, - payload_length - ID_PAYLOAD_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } - case AUTH_DATA: - { - if (payload_length < AUTH_PAYLOAD_HEADER_LENGTH || - !parse_chunk(this, rule_number, output + rule->offset, - payload_length - AUTH_PAYLOAD_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } - case CERT_DATA: - { - if (payload_length < CERT_PAYLOAD_HEADER_LENGTH || - !parse_chunk(this, rule_number, output + rule->offset, - payload_length - CERT_PAYLOAD_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } - case CERTREQ_DATA: - { - if (payload_length < CERTREQ_PAYLOAD_HEADER_LENGTH || - !parse_chunk(this, rule_number, output + rule->offset, - payload_length - CERTREQ_PAYLOAD_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } - case EAP_DATA: - { - if (payload_length < EAP_PAYLOAD_HEADER_LENGTH || - !parse_chunk(this, rule_number, output + rule->offset, - payload_length - EAP_PAYLOAD_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } - case SPIS: - { - if (payload_length < DELETE_PAYLOAD_HEADER_LENGTH || - !parse_chunk(this, rule_number, output + rule->offset, - payload_length - DELETE_PAYLOAD_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } - case VID_DATA: - { - if (payload_length < VENDOR_ID_PAYLOAD_HEADER_LENGTH || - !parse_chunk(this, rule_number, output + rule->offset, - payload_length - VENDOR_ID_PAYLOAD_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } - case CONFIGURATION_ATTRIBUTE_VALUE: - { - if (!parse_chunk(this, rule_number, output + rule->offset, - attribute_length)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } - case KEY_EXCHANGE_DATA: - { - if (payload_length < KE_PAYLOAD_HEADER_LENGTH || - !parse_chunk(this, rule_number, output + rule->offset, - payload_length - KE_PAYLOAD_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } - case KEY_EXCHANGE_DATA_V1: - { - if (payload_length < KE_PAYLOAD_V1_HEADER_LENGTH || - !parse_chunk(this, rule_number, output + rule->offset, - payload_length - KE_PAYLOAD_V1_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } - case NOTIFICATION_DATA: - { - if (payload_length < NOTIFY_PAYLOAD_HEADER_LENGTH + spi_size || - !parse_chunk(this, rule_number, output + rule->offset, - payload_length - NOTIFY_PAYLOAD_HEADER_LENGTH - spi_size)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } - case ENCRYPTED_DATA: - { - if (payload_length < ENCRYPTION_PAYLOAD_HEADER_LENGTH || - !parse_chunk(this, rule_number, output + rule->offset, - payload_length - ENCRYPTION_PAYLOAD_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } case TS_TYPE: { if (!parse_uint8(this, rule_number, output + rule->offset)) @@ -783,29 +629,6 @@ METHOD(parser_t, parse_payload, status_t, } break; } - case TRAFFIC_SELECTORS: - { - if (payload_length < TS_PAYLOAD_HEADER_LENGTH || - !parse_list(this, rule_number, output + rule->offset, - TRAFFIC_SELECTOR_SUBSTRUCTURE, - payload_length - TS_PAYLOAD_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } - case UNKNOWN_DATA: - { - if (payload_length < UNKNOWN_PAYLOAD_HEADER_LENGTH || - !parse_chunk(this, rule_number, output + rule->offset, - payload_length - UNKNOWN_PAYLOAD_HEADER_LENGTH)) - { - pld->destroy(pld); - return PARSE_ERROR; - } - break; - } default: { DBG1(DBG_ENC, " no rule to parse rule %d %N", -- cgit v1.2.3 From ee50a2938557c4fa67a76304dbeb37abfe6ad253 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Thu, 17 Nov 2011 15:00:04 +0100 Subject: Implemented IKEv1 hash payload --- src/libcharon/encoding/parser.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index 719c94254..77923e74b 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -534,6 +534,7 @@ METHOD(parser_t, parse_payload, status_t, } /* chunks */ case NONCE_DATA: + case HASH_DATA: case ID_DATA: case AUTH_DATA: case CERT_DATA: -- cgit v1.2.3 From 95a26523afc0d2a997cd1d4f738c287ae045ae4e Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Thu, 17 Nov 2011 14:20:16 +0000 Subject: Use a generic encoding type for all variable length chunks --- src/libcharon/encoding/parser.c | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index 77923e74b..1876212aa 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -532,22 +532,7 @@ METHOD(parser_t, parse_payload, status_t, } break; } - /* chunks */ - case NONCE_DATA: - case HASH_DATA: - case ID_DATA: - case AUTH_DATA: - case CERT_DATA: - case CERTREQ_DATA: - case EAP_DATA: - case SPIS: - case VID_DATA: - case CONFIGURATION_ATTRIBUTE_VALUE: - case KEY_EXCHANGE_DATA: - case KEY_EXCHANGE_DATA_V1: - case NOTIFICATION_DATA: - case ENCRYPTED_DATA: - case UNKNOWN_DATA: + case CHUNK_DATA: { if (payload_length < header_length || !parse_chunk(this, rule_number, output + rule->offset, -- cgit v1.2.3 From f62a7c7c7192d791eb4c10e7ff4d09cf54c7d4da Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Thu, 17 Nov 2011 15:44:42 +0100 Subject: Use a generic list encoding rule we can use to specify the wrapped payload type --- src/libcharon/encoding/parser.c | 46 ++++++++--------------------------------- 1 file changed, 9 insertions(+), 37 deletions(-) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index 1876212aa..e599b84d9 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -358,34 +358,6 @@ static bool parse_chunk(private_parser_t *this, int rule_number, return TRUE; } -/** - * Map a encoding type to a encoded payload - */ -static payload_type_t map_wrapped_payload(encoding_type_t type) -{ - switch (type) - { - case PROPOSALS: - return PROPOSAL_SUBSTRUCTURE; - case PROPOSALS_V1: - return PROPOSAL_SUBSTRUCTURE_V1; - case TRANSFORMS: - return TRANSFORM_SUBSTRUCTURE; - case TRANSFORMS_V1: - return TRANSFORM_SUBSTRUCTURE_V1; - case TRANSFORM_ATTRIBUTES: - return TRANSFORM_ATTRIBUTE; - case TRANSFORM_ATTRIBUTES_V1: - return TRANSFORM_ATTRIBUTE_V1; - case CONFIGURATION_ATTRIBUTES: - return CONFIGURATION_ATTRIBUTE; - case TRAFFIC_SELECTORS: - return TRAFFIC_SELECTOR_SUBSTRUCTURE; - default: - return NO_PAYLOAD; - } -} - METHOD(parser_t, parse_payload, status_t, private_parser_t *this, payload_type_t payload_type, payload_t **payload) { @@ -513,18 +485,18 @@ METHOD(parser_t, parse_payload, status_t, } break; } - /* lists */ - case PROPOSALS: - case PROPOSALS_V1: - case TRANSFORMS: - case TRANSFORMS_V1: - case TRANSFORM_ATTRIBUTES: - case TRANSFORM_ATTRIBUTES_V1: - case TRAFFIC_SELECTORS: + case PAYLOAD_LIST + PROPOSAL_SUBSTRUCTURE: + case PAYLOAD_LIST + PROPOSAL_SUBSTRUCTURE_V1: + case PAYLOAD_LIST + TRANSFORM_SUBSTRUCTURE: + case PAYLOAD_LIST + TRANSFORM_SUBSTRUCTURE_V1: + case PAYLOAD_LIST + TRANSFORM_ATTRIBUTE: + case PAYLOAD_LIST + TRANSFORM_ATTRIBUTE_V1: + case PAYLOAD_LIST + CONFIGURATION_ATTRIBUTE: + case PAYLOAD_LIST + TRAFFIC_SELECTOR_SUBSTRUCTURE: { if (payload_length < header_length || !parse_list(this, rule_number, output + rule->offset, - map_wrapped_payload(rule->type), + rule->type - PAYLOAD_LIST, payload_length - header_length)) { pld->destroy(pld); -- cgit v1.2.3 From 4ea258538e396949b6c8c626e80bf8cc3c191dc3 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Mon, 21 Nov 2011 10:10:48 +0100 Subject: Update header length after each parsed rule, as it might change when parsing SPI size --- src/libcharon/encoding/parser.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index e599b84d9..39ce2db67 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -380,12 +380,13 @@ METHOD(parser_t, parse_payload, status_t, /* base pointer for output, avoids casting in every rule */ output = pld; - - header_length = pld->get_header_length(pld); /* parse the payload with its own rulse */ rule_count = pld->get_encoding_rules(pld, &this->rules); for (rule_number = 0; rule_number < rule_count; rule_number++) { + /* update header length for each rule, as it is dynamic (SPIs) */ + header_length = pld->get_header_length(pld); + rule = &(this->rules[rule_number]); DBG2(DBG_ENC, " parsing rule %d %N", rule_number, encoding_type_names, rule->type); -- cgit v1.2.3 From 50d493808c84fb042244119d41f65ee9fa76f358 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 21 Nov 2011 11:05:43 +0100 Subject: Avoid compiler warnings due to extended enums. --- src/libcharon/encoding/parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index 39ce2db67..1a7f297da 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -390,7 +390,7 @@ METHOD(parser_t, parse_payload, status_t, rule = &(this->rules[rule_number]); DBG2(DBG_ENC, " parsing rule %d %N", rule_number, encoding_type_names, rule->type); - switch (rule->type) + switch ((int)rule->type) { case U_INT_4: { -- cgit v1.2.3 From 6f5f8ee4b59484e15cc1cba356cfe37b6c4a9c23 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 21 Nov 2011 11:53:23 +0100 Subject: Use modified encryption payload to encrypt/decrypt complete IKEv1 messages. --- src/libcharon/encoding/parser.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index 1a7f297da..b93651bbe 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -516,6 +516,16 @@ METHOD(parser_t, parse_payload, status_t, } break; } + case ENCRYPTED_DATA: + { + if (!parse_chunk(this, rule_number, output + rule->offset, + this->input_roof - this->byte_pos)) + { + pld->destroy(pld); + return PARSE_ERROR; + } + break; + } case ATTRIBUTE_FORMAT: { if (!parse_bit(this, rule_number, output + rule->offset)) -- cgit v1.2.3 From 97265a8927c290466eb8899d99da9b3cf921969f Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Wed, 23 Nov 2011 15:30:41 +0100 Subject: Removed redundant '=>' when logging binary data in parser and generator. --- src/libcharon/encoding/parser.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index b93651bbe..3f4bb15a9 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -254,7 +254,7 @@ static bool parse_bytes(private_parser_t *this, int rule_number, if (output_pos) { memcpy(output_pos, this->byte_pos, bytes); - DBG3(DBG_ENC, " => %b", output_pos, bytes); + DBG3(DBG_ENC, " %b", output_pos, bytes); } this->byte_pos += bytes; return TRUE; @@ -352,7 +352,7 @@ static bool parse_chunk(private_parser_t *this, int rule_number, { *output_pos = chunk_alloc(length); memcpy(output_pos->ptr, this->byte_pos, length); - DBG3(DBG_ENC, " => %b", output_pos->ptr, length); + DBG3(DBG_ENC, " %b", output_pos->ptr, length); } this->byte_pos += length; return TRUE; -- cgit v1.2.3 From 0b6811b4a7a26176b8fc102ef6ee398edaa289cb Mon Sep 17 00:00:00 2001 From: Clavister OpenSource Date: Thu, 24 Nov 2011 11:30:19 +0100 Subject: IKEv1 ConfigMode: Fixed cp_payload to use CONFIGURATION_ATTRIBUTE_V1 in all appropriate places, so the parsing is done correctly. --- src/libcharon/encoding/parser.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index 3f4bb15a9..14e2cc7a0 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -493,6 +493,7 @@ METHOD(parser_t, parse_payload, status_t, case PAYLOAD_LIST + TRANSFORM_ATTRIBUTE: case PAYLOAD_LIST + TRANSFORM_ATTRIBUTE_V1: case PAYLOAD_LIST + CONFIGURATION_ATTRIBUTE: + case PAYLOAD_LIST + CONFIGURATION_ATTRIBUTE_V1: case PAYLOAD_LIST + TRAFFIC_SELECTOR_SUBSTRUCTURE: { if (payload_length < header_length || -- cgit v1.2.3 From b46b56fac1a1435ff33e0a9ccb3240db5150fe13 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Thu, 15 Dec 2011 11:22:31 +0100 Subject: Log parsed unsigned ints with proper format strings. --- src/libcharon/encoding/parser.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index 14e2cc7a0..8f1d667fc 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -137,7 +137,7 @@ static bool parse_uint4(private_parser_t *this, int rule_number, } if (output_pos) { - DBG3(DBG_ENC, " => %d", *output_pos); + DBG3(DBG_ENC, " => %hhu", *output_pos); } return TRUE; } @@ -159,7 +159,7 @@ static bool parse_uint8(private_parser_t *this, int rule_number, if (output_pos) { *output_pos = *(this->byte_pos); - DBG3(DBG_ENC, " => %d", *output_pos); + DBG3(DBG_ENC, " => %hhu", *output_pos); } this->byte_pos++; return TRUE; @@ -183,7 +183,7 @@ static bool parse_uint15(private_parser_t *this, int rule_number, { memcpy(output_pos, this->byte_pos, sizeof(u_int16_t)); *output_pos = ntohs(*output_pos) & ~0x8000; - DBG3(DBG_ENC, " => %d", *output_pos); + DBG3(DBG_ENC, " => %hu", *output_pos); } this->byte_pos += sizeof(u_int16_t); this->bit_pos = 0; @@ -208,7 +208,7 @@ static bool parse_uint16(private_parser_t *this, int rule_number, { memcpy(output_pos, this->byte_pos, sizeof(u_int16_t)); *output_pos = ntohs(*output_pos); - DBG3(DBG_ENC, " => %d", *output_pos); + DBG3(DBG_ENC, " => %hu", *output_pos); } this->byte_pos += sizeof(u_int16_t); return TRUE; @@ -231,7 +231,7 @@ static bool parse_uint32(private_parser_t *this, int rule_number, { memcpy(output_pos, this->byte_pos, sizeof(u_int32_t)); *output_pos = ntohl(*output_pos); - DBG3(DBG_ENC, " => %d", *output_pos); + DBG3(DBG_ENC, " => %u", *output_pos); } this->byte_pos += sizeof(u_int32_t); return TRUE; -- cgit v1.2.3 From c390569a76524a72e25a8885f3f8dc920700207d Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Fri, 20 Jan 2012 15:00:06 +0100 Subject: Renamed CONFIGURATION_ATTRIBUTE_LENGTH to streamline it with other ATTRIBUTE rules --- src/libcharon/encoding/parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/libcharon/encoding/parser.c') diff --git a/src/libcharon/encoding/parser.c b/src/libcharon/encoding/parser.c index 8f1d667fc..a599de60f 100644 --- a/src/libcharon/encoding/parser.c +++ b/src/libcharon/encoding/parser.c @@ -546,7 +546,7 @@ METHOD(parser_t, parse_payload, status_t, } break; } - case CONFIGURATION_ATTRIBUTE_LENGTH: + case ATTRIBUTE_LENGTH: { if (!parse_uint16(this, rule_number, output + rule->offset)) { -- cgit v1.2.3