diff options
Diffstat (limited to 'src/libcharon/sa/ikev1/phase1.c')
-rw-r--r-- | src/libcharon/sa/ikev1/phase1.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/libcharon/sa/ikev1/phase1.c b/src/libcharon/sa/ikev1/phase1.c index fee304e6f..e5a48ec49 100644 --- a/src/libcharon/sa/ikev1/phase1.c +++ b/src/libcharon/sa/ikev1/phase1.c @@ -587,14 +587,26 @@ METHOD(phase1_t, select_config, peer_cfg_t*, METHOD(phase1_t, get_id, identification_t*, private_phase1_t *this, peer_cfg_t *peer_cfg, bool local) { + identification_t *id = NULL; auth_cfg_t *auth; auth = get_auth_cfg(peer_cfg, local); if (auth) { - return auth->get(auth, AUTH_RULE_IDENTITY); + id = auth->get(auth, AUTH_RULE_IDENTITY); + if (local && (!id || id->get_type(id) == ID_ANY)) + { /* no ID configured, use local IP address */ + host_t *me; + + me = this->ike_sa->get_my_host(this->ike_sa); + if (!me->is_anyaddr(me)) + { + id = identification_create_from_sockaddr(me->get_sockaddr(me)); + auth->add(auth, AUTH_RULE_IDENTITY, id); + } + } } - return NULL; + return id; } METHOD(phase1_t, save_sa_payload, bool, |