From: Martin Willi Date: Thu, 13 Sep 2012 13:57:06 +0000 (+0200) Subject: As initiator, narrow received Unity attributes to configured TS X-Git-Tag: 5.0.1~82^2~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7a7deec2831f0abf1ec93b118ccdf5c7b10ce152;p=thirdparty%2Fstrongswan.git As initiator, narrow received Unity attributes to configured TS --- diff --git a/src/libcharon/plugins/unity/unity_narrow.c b/src/libcharon/plugins/unity/unity_narrow.c index ef8c59e170..e081cb7026 100644 --- a/src/libcharon/plugins/unity/unity_narrow.c +++ b/src/libcharon/plugins/unity/unity_narrow.c @@ -39,9 +39,10 @@ struct private_unity_narrow_t { * Narrow TS as initiator to Unity Split-Include/Local-LAN */ static void narrow_initiator(private_unity_narrow_t *this, ike_sa_t *ike_sa, - linked_list_t *remote) + child_cfg_t *cfg, linked_list_t *remote) { traffic_selector_t *current, *orig = NULL; + linked_list_t *received, *selected; enumerator_t *enumerator; enumerator = this->handler->create_include_enumerator(this->handler, @@ -55,11 +56,16 @@ static void narrow_initiator(private_unity_narrow_t *this, ike_sa_t *ike_sa, break; } } - current = orig->get_subset(orig, current); - if (current) + /* narrow received Unity TS with the child configuration */ + received = linked_list_create(); + received->insert_last(received, current); + selected = cfg->get_traffic_selectors(cfg, FALSE, received, NULL); + while (selected->remove_first(selected, (void**)¤t) == SUCCESS) { remote->insert_last(remote, current); } + selected->destroy(selected); + received->destroy(received); } enumerator->destroy(enumerator); if (orig) @@ -125,7 +131,8 @@ METHOD(listener_t, narrow, bool, narrow_pre(remote); break; case NARROW_INITIATOR_POST_AUTH: - narrow_initiator(this, ike_sa, remote); + narrow_initiator(this, ike_sa, + child_sa->get_config(child_sa), remote); break; case NARROW_RESPONDER: narrow_pre(local);