diff --git a/src/charon/config/policies/policy.c b/src/charon/config/policies/policy.c index b853a5a1e..363d1609f 100644 --- a/src/charon/config/policies/policy.c +++ b/src/charon/config/policies/policy.c @@ -317,19 +317,28 @@ static linked_list_t *select_traffic_selectors(private_policy_t *this, { while (i2->iterate(i2, (void**)&ts2)) { - if (ts1 != ts2 && ts2->is_contained_in(ts2, ts1)) + if (ts1 != ts2) { - i2->remove(i2); - ts2->destroy(ts2); - i1->reset(i1); - break; + if (ts2->is_contained_in(ts2, ts1)) + { + i2->remove(i2); + ts2->destroy(ts2); + i1->reset(i1); + break; + } + if (ts1->is_contained_in(ts1, ts2)) + { + i1->remove(i1); + ts1->destroy(ts1); + i2->reset(i2); + break; + } } } } i1->destroy(i1); i2->destroy(i2); - return selected; } diff --git a/src/charon/config/traffic_selector.c b/src/charon/config/traffic_selector.c index cee45c287..2fb012e16 100644 --- a/src/charon/config/traffic_selector.c +++ b/src/charon/config/traffic_selector.c @@ -7,7 +7,7 @@ /* * Copyright (C) 2007 Tobias Brunner - * Copyright (C) 2005-2006 Martin Willi + * Copyright (C) 2005-2007 Martin Willi * Copyright (C) 2005 Jan Hutter * Hochschule fuer Technik Rapperswil * @@ -30,6 +30,7 @@ #include "traffic_selector.h" +#include #include #include