diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-04-04 11:46:59 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2012-04-16 13:44:27 +0200 |
commit | 4b32bde48ef02775b3fb00c4ccfeef8bb929cea2 (patch) | |
tree | d7a1bb55b4368b998ebabc8913a3b99829cde51c /src | |
parent | 7b910ce274066706e29f7a63d953fa5cc49a97ce (diff) | |
download | strongswan-4b32bde48ef02775b3fb00c4ccfeef8bb929cea2.tar.bz2 strongswan-4b32bde48ef02775b3fb00c4ccfeef8bb929cea2.tar.xz |
Fixed IDi in case neither left nor leftid is configured.
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/sa/tasks/ike_auth.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/libcharon/sa/tasks/ike_auth.c b/src/libcharon/sa/tasks/ike_auth.c index af2c30f71..1ef216272 100644 --- a/src/libcharon/sa/tasks/ike_auth.c +++ b/src/libcharon/sa/tasks/ike_auth.c @@ -422,6 +422,27 @@ METHOD(task_t, build_i, status_t, DBG1(DBG_CFG, "configuration misses IDi"); return FAILED; } + else if (idi->get_type(idi) == ID_ANY) + { /* ID_ANY is invalid as IDi, use local IP address instead */ + enumerator_t *enumerator; + auth_rule_t rule; + host_t *me; + void *data; + + me = this->ike_sa->get_my_host(this->ike_sa); + idi = identification_create_from_sockaddr(me->get_sockaddr(me)); + enumerator = cfg->create_enumerator(cfg); + while (enumerator->enumerate(enumerator, &rule, &data)) + { + if (rule == AUTH_RULE_IDENTITY) + { + cfg->replace(cfg, enumerator, AUTH_RULE_IDENTITY, + idi); + break; + } + } + enumerator->destroy(enumerator); + } this->ike_sa->set_my_id(this->ike_sa, idi->clone(idi)); id_payload = id_payload_create_from_identification(ID_INITIATOR, idi); get_reserved_id_bytes(this, id_payload); |