diff options
author | Jan Hutter <jhutter@hsr.ch> | 2005-11-29 12:23:40 +0000 |
---|---|---|
committer | Jan Hutter <jhutter@hsr.ch> | 2005-11-29 12:23:40 +0000 |
commit | 346af6f3de4735b2c7c8b6abf824bd0258c4be6c (patch) | |
tree | 0a87d2b7aee3c3ce663c745bf58423b0ec3d1bfb /Source/charon/encoding/payloads/transform_substructure.c | |
parent | e85220af90ac154e9badeece3aaaab30973f648f (diff) | |
download | strongswan-346af6f3de4735b2c7c8b6abf824bd0258c4be6c.tar.bz2 strongswan-346af6f3de4735b2c7c8b6abf824bd0258c4be6c.tar.xz |
- fixed bug in diffie hellman exchange (no public value was written)
Diffstat (limited to 'Source/charon/encoding/payloads/transform_substructure.c')
-rw-r--r-- | Source/charon/encoding/payloads/transform_substructure.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/Source/charon/encoding/payloads/transform_substructure.c b/Source/charon/encoding/payloads/transform_substructure.c index 4e3655b15..3c91b257c 100644 --- a/Source/charon/encoding/payloads/transform_substructure.c +++ b/Source/charon/encoding/payloads/transform_substructure.c @@ -148,7 +148,10 @@ encoding_rule_t transform_substructure_encodings[] = { */ static status_t verify(private_transform_substructure_t *this) { - if ((this->next_payload != NO_PAYLOAD) && (this->next_payload != TRANSFORM_SUBSTRUCTURE)) + status_t status = SUCCESS; + iterator_t *iterator; + + if ((this->next_payload != NO_PAYLOAD) && (this->next_payload != 3)) { /* must be 0 or 3 */ return FAILED; @@ -218,9 +221,25 @@ static status_t verify(private_transform_substructure_t *this) return FAILED; } } + iterator = this->attributes->create_iterator(this->attributes,TRUE); + + while(iterator->has_next(iterator)) + { + payload_t *current_attributes; + iterator->current(iterator,(void **)¤t_attributes); + + status = current_attributes->verify(current_attributes); + if (status != SUCCESS) + { + break; + } + } + + iterator->destroy(iterator); + /* proposal number is checked in SA payload */ - return SUCCESS; + return status; } /** |