aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2013-01-21 12:14:50 +0100
committerMartin Willi <martin@revosec.ch>2013-01-21 12:15:51 +0100
commit325efdaca8f78ce2e6df004559ed3200a335fc6c (patch)
tree3a5e70bc4273f9f8aee5ea0103b40c74f5b7a3ed
parentae82265a4695a58b16893e3dc2d3c616907a2a9a (diff)
downloadstrongswan-325efdaca8f78ce2e6df004559ed3200a335fc6c.tar.bz2
strongswan-325efdaca8f78ce2e6df004559ed3200a335fc6c.tar.xz
Filter TS list for Split-Includes before printing them to debug log
-rw-r--r--src/libcharon/plugins/unity/unity_provider.c44
1 files changed, 34 insertions, 10 deletions
diff --git a/src/libcharon/plugins/unity/unity_provider.c b/src/libcharon/plugins/unity/unity_provider.c
index d4d374f1b..655b8724a 100644
--- a/src/libcharon/plugins/unity/unity_provider.c
+++ b/src/libcharon/plugins/unity/unity_provider.c
@@ -58,16 +58,9 @@ METHOD(enumerator_t, attribute_enumerate, bool,
{
return FALSE;
}
- if (ts->get_type(ts) == TS_IPV4_ADDR_RANGE &&
- !ts->is_dynamic(ts) &&
- ts->to_subnet(ts, &net, &mask))
+ if (ts->to_subnet(ts, &net, &mask))
{
- if (mask > 0)
- {
- ts->destroy(ts);
- break;
- }
- net->destroy(net);
+ break;
}
ts->destroy(ts);
}
@@ -99,6 +92,30 @@ METHOD(enumerator_t, attribute_destroy, void,
free(this);
}
+/**
+ * Check if we should send a configured TS as Split-Include attribute
+ */
+static bool use_ts(traffic_selector_t *ts)
+{
+ u_int8_t mask;
+ host_t *net;
+
+ if (ts->get_type(ts) != TS_IPV4_ADDR_RANGE)
+ {
+ return FALSE;
+ }
+ if (ts->is_dynamic(ts))
+ {
+ return FALSE;
+ }
+ if (!ts->to_subnet(ts, &net, &mask))
+ {
+ return FALSE;
+ }
+ net->destroy(net);
+ return mask > 0;
+}
+
METHOD(attribute_provider_t, create_attribute_enumerator, enumerator_t*,
private_unity_provider_t *this, linked_list_t *pools, identification_t *id,
linked_list_t *vips)
@@ -127,7 +144,14 @@ METHOD(attribute_provider_t, create_attribute_enumerator, enumerator_t*,
current = child_cfg->get_traffic_selectors(child_cfg, TRUE, NULL, NULL);
while (current->remove_first(current, (void**)&ts) == SUCCESS)
{
- list->insert_last(list, ts);
+ if (use_ts(ts))
+ {
+ list->insert_last(list, ts);
+ }
+ else
+ {
+ ts->destroy(ts);
+ }
}
current->destroy(current);
}