aboutsummaryrefslogtreecommitdiffstats
path: root/Source/charon/encoding/payloads/transform_substructure.c
diff options
context:
space:
mode:
authorJan Hutter <jhutter@hsr.ch>2005-11-29 12:23:40 +0000
committerJan Hutter <jhutter@hsr.ch>2005-11-29 12:23:40 +0000
commit346af6f3de4735b2c7c8b6abf824bd0258c4be6c (patch)
tree0a87d2b7aee3c3ce663c745bf58423b0ec3d1bfb /Source/charon/encoding/payloads/transform_substructure.c
parente85220af90ac154e9badeece3aaaab30973f648f (diff)
downloadstrongswan-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.c23
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 **)&current_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;
}
/**