fixing IKE_SA rekeying if charon.ikesa_table_size > 1

This commit is contained in:
Tobias Brunner
2009-04-17 16:58:11 +00:00
parent a376e44577
commit c889ce80ab
2 changed files with 21 additions and 8 deletions
+18 -8
View File
@@ -901,25 +901,35 @@ static ike_sa_t* checkout(private_ike_sa_manager_t *this, ike_sa_id_t *ike_sa_id
*/
static ike_sa_t *checkout_new(private_ike_sa_manager_t* this, bool initiator)
{
ike_sa_id_t *ike_sa_id;
ike_sa_t *ike_sa;
entry_t *entry;
u_int segment;
entry = entry_create();
if (initiator)
{
entry->ike_sa_id = ike_sa_id_create(get_next_spi(this), 0, TRUE);
ike_sa_id = ike_sa_id_create(get_next_spi(this), 0, TRUE);
}
else
{
entry->ike_sa_id = ike_sa_id_create(0, get_next_spi(this), FALSE);
ike_sa_id = ike_sa_id_create(0, get_next_spi(this), FALSE);
}
entry->ike_sa = ike_sa_create(entry->ike_sa_id);
segment = put_entry(this, entry);
entry->checked_out = TRUE;
unlock_single_segment(this, segment);
ike_sa = ike_sa_create(ike_sa_id);
DBG2(DBG_MGR, "created IKE_SA");
if (!initiator)
{
ike_sa_id->destroy(ike_sa_id);
return ike_sa;
}
entry = entry_create();
entry->ike_sa_id = ike_sa_id;
entry->ike_sa = ike_sa;
segment = put_entry(this, entry);
entry->checked_out = TRUE;
unlock_single_segment(this, segment);
return entry->ike_sa;
}
+3
View File
@@ -53,6 +53,9 @@ struct ike_sa_manager_t {
/**
* Create and check out a new IKE_SA.
*
* @note If initiator equals FALSE, the returned IKE_SA is not registered
* in the manager.
*
* @param initiator TRUE for initiator, FALSE otherwise
* @returns created and checked out IKE_SA