diff options
author | Tobias Brunner <tobias@strongswan.org> | 2014-10-16 16:10:41 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2014-12-05 09:32:38 +0100 |
commit | bf5d0693efe8aca8c1b87457ed2da322d72a23fa (patch) | |
tree | e46cd8cd81ff7ddd7b6f82f3aab6e8d09da5594b /src | |
parent | 7459f3a5ac80b48f25a43570d695c586684e849e (diff) | |
download | strongswan-bf5d0693efe8aca8c1b87457ed2da322d72a23fa.tar.bz2 strongswan-bf5d0693efe8aca8c1b87457ed2da322d72a23fa.tar.xz |
id-payload: Enable multiple calls to get_ts() for subnet traffic selectors
The second call resulted in a /32 subnet previously.
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/encoding/payloads/id_payload.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/libcharon/encoding/payloads/id_payload.c b/src/libcharon/encoding/payloads/id_payload.c index a002a8f21..bb8aab748 100644 --- a/src/libcharon/encoding/payloads/id_payload.c +++ b/src/libcharon/encoding/payloads/id_payload.c @@ -258,17 +258,20 @@ static traffic_selector_t *get_ts_from_range(private_id_payload_t *this, static traffic_selector_t *get_ts_from_subnet(private_id_payload_t *this, ts_type_t type) { + traffic_selector_t *ts; chunk_t net, netmask; int i; net = chunk_create(this->id_data.ptr, this->id_data.len / 2); - netmask = chunk_skip(this->id_data, this->id_data.len / 2); + netmask = chunk_clone(chunk_skip(this->id_data, this->id_data.len / 2)); for (i = 0; i < net.len; i++) { netmask.ptr[i] = (netmask.ptr[i] ^ 0xFF) | net.ptr[i]; } - return traffic_selector_create_from_bytes(this->protocol_id, type, + ts = traffic_selector_create_from_bytes(this->protocol_id, type, net, this->port, netmask, this->port ?: 65535); + chunk_free(&netmask); + return ts; } /** |