ike: Store unhandled attributes on IKE_SA as well

This commit is contained in:
Martin Willi 2014-02-11 09:19:45 +01:00
parent b16e177e06
commit 5ae3221075
4 changed files with 12 additions and 12 deletions

View File

@ -2150,8 +2150,11 @@ METHOD(ike_sa_t, destroy, void,
/* remove attributes first, as we pass the IKE_SA to the handler */
while (array_remove(this->attributes, ARRAY_TAIL, &entry))
{
hydra->attributes->release(hydra->attributes, entry.handler,
this->other_id, entry.type, entry.data);
if (entry.handler)
{
hydra->attributes->release(hydra->attributes, entry.handler,
this->other_id, entry.type, entry.data);
}
free(entry.data.ptr);
}
/* uninstall CHILD_SAs before virtual IPs, otherwise we might kill

View File

@ -978,6 +978,9 @@ struct ike_sa_t {
* registered at the IKE_SA. Attributes are inherit()ed and get released
* when the IKE_SA is closed.
*
* Unhandled attributes are passed as well, but with a NULL handler. They
* do not get released.
*
* @param handler handler installed the attribute, use for release()
* @param type configuration attribute type
* @param data associated attribute data

View File

@ -139,11 +139,8 @@ static void handle_attribute(private_mode_config_t *this,
handler = hydra->attributes->handle(hydra->attributes,
this->ike_sa->get_other_id(this->ike_sa), handler,
ca->get_type(ca), ca->get_chunk(ca));
if (handler)
{
this->ike_sa->add_configuration_attribute(this->ike_sa,
handler, ca->get_type(ca), ca->get_chunk(ca));
}
this->ike_sa->add_configuration_attribute(this->ike_sa,
handler, ca->get_type(ca), ca->get_chunk(ca));
}
/**

View File

@ -130,11 +130,8 @@ static void handle_attribute(private_ike_config_t *this,
handler = hydra->attributes->handle(hydra->attributes,
this->ike_sa->get_other_id(this->ike_sa), handler,
ca->get_type(ca), ca->get_chunk(ca));
if (handler)
{
this->ike_sa->add_configuration_attribute(this->ike_sa,
handler, ca->get_type(ca), ca->get_chunk(ca));
}
this->ike_sa->add_configuration_attribute(this->ike_sa,
handler, ca->get_type(ca), ca->get_chunk(ca));
}
/**