diff options
Diffstat (limited to 'src/libcharon/plugins/ha')
-rw-r--r-- | src/libcharon/plugins/ha/ha_dispatcher.c | 6 | ||||
-rw-r--r-- | src/libcharon/plugins/ha/ha_ike.c | 16 |
2 files changed, 13 insertions, 9 deletions
diff --git a/src/libcharon/plugins/ha/ha_dispatcher.c b/src/libcharon/plugins/ha/ha_dispatcher.c index 98055fa7e..8b6ec9180 100644 --- a/src/libcharon/plugins/ha/ha_dispatcher.c +++ b/src/libcharon/plugins/ha/ha_dispatcher.c @@ -525,8 +525,10 @@ static void process_ike_iv(private_ha_dispatcher_t *this, ha_message_t *message) keymat_v1_t *keymat; keymat = (keymat_v1_t*)ike_sa->get_keymat(ike_sa); - keymat->update_iv(keymat, 0, iv); - keymat->confirm_iv(keymat, 0); + if (keymat->update_iv(keymat, 0, iv)) + { + keymat->confirm_iv(keymat, 0); + } } } this->cache->cache(this->cache, ike_sa, message); diff --git a/src/libcharon/plugins/ha/ha_ike.c b/src/libcharon/plugins/ha/ha_ike.c index 2819b9dd5..2d02917e5 100644 --- a/src/libcharon/plugins/ha/ha_ike.c +++ b/src/libcharon/plugins/ha/ha_ike.c @@ -302,13 +302,15 @@ METHOD(listener_t, message_hook, bool, if (mid == 0) { keymat = (keymat_v1_t*)ike_sa->get_keymat(ike_sa); - iv = keymat->get_iv(keymat, mid); - m = ha_message_create(HA_IKE_IV); - m->add_attribute(m, HA_IKE_ID, ike_sa->get_id(ike_sa)); - m->add_attribute(m, HA_IV, iv); - free(iv.ptr); - this->socket->push(this->socket, m); - this->cache->cache(this->cache, ike_sa, m); + if (keymat->get_iv(keymat, mid, &iv)) + { + m = ha_message_create(HA_IKE_IV); + m->add_attribute(m, HA_IKE_ID, ike_sa->get_id(ike_sa)); + m->add_attribute(m, HA_IV, iv); + free(iv.ptr); + this->socket->push(this->socket, m); + this->cache->cache(this->cache, ike_sa, m); + } } if (!incoming && message->get_exchange_type(message) == TRANSACTION) { |