aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/config/backend_manager.c
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2008-06-06 15:05:54 +0000
committerMartin Willi <martin@strongswan.org>2008-06-06 15:05:54 +0000
commit5a22a02156816fc9f56ca56c70fbfda6574b285d (patch)
tree061ab063820d3db0272c55083ff26ac6d170ce51 /src/charon/config/backend_manager.c
parent1e9c46f13daced3199953f4d1758c7e03c935083 (diff)
downloadstrongswan-5a22a02156816fc9f56ca56c70fbfda6574b285d.tar.bz2
strongswan-5a22a02156816fc9f56ca56c70fbfda6574b285d.tar.xz
DNS resolving of ike_cfg hosts dynamically on demand
Diffstat (limited to 'src/charon/config/backend_manager.c')
-rw-r--r--src/charon/config/backend_manager.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/charon/config/backend_manager.c b/src/charon/config/backend_manager.c
index 7b2ddca90..41c26e1af 100644
--- a/src/charon/config/backend_manager.c
+++ b/src/charon/config/backend_manager.c
@@ -138,9 +138,13 @@ static ike_cfg_t *get_ike_cfg(private_backend_manager_t *this,
while (enumerator->enumerate(enumerator, (void**)&current))
{
prio = MATCH_NONE;
- my_candidate = current->get_my_host(current);
- other_candidate = current->get_other_host(current);
+ my_candidate = host_create_from_dns(current->get_my_addr(current),
+ me->get_family(me), 0);
+ if (!my_candidate)
+ {
+ continue;
+ }
if (my_candidate->ip_equals(my_candidate, me))
{
prio += MATCH_ME;
@@ -149,6 +153,14 @@ static ike_cfg_t *get_ike_cfg(private_backend_manager_t *this,
{
prio += MATCH_ANY;
}
+ my_candidate->destroy(my_candidate);
+
+ other_candidate = host_create_from_dns(current->get_other_addr(current),
+ other->get_family(other), 0);
+ if (!other_candidate)
+ {
+ continue;
+ }
if (other_candidate->ip_equals(other_candidate, other))
{
prio += MATCH_OTHER;
@@ -157,9 +169,11 @@ static ike_cfg_t *get_ike_cfg(private_backend_manager_t *this,
{
prio += MATCH_ANY;
}
+ other_candidate->destroy(other_candidate);
- DBG2(DBG_CFG, " candidate: %H...%H, prio %d",
- my_candidate, other_candidate, prio);
+ DBG2(DBG_CFG, " candidate: %s...%s, prio %d",
+ current->get_my_addr(current), current->get_other_addr(current),
+ prio);
/* we require at least two MATCH_ANY */
if (prio > best)