aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-04-04 11:46:59 +0200
committerTobias Brunner <tobias@strongswan.org>2012-04-16 13:44:27 +0200
commit4b32bde48ef02775b3fb00c4ccfeef8bb929cea2 (patch)
treed7a1bb55b4368b998ebabc8913a3b99829cde51c /src
parent7b910ce274066706e29f7a63d953fa5cc49a97ce (diff)
downloadstrongswan-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.c21
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);