Compare commits

..

2 Commits

Author SHA1 Message Date
7ee24810b2 Bump epoch 2019-12-31 11:33:53 +01:00
4401ae909d Patch vici for NHRP 2019-12-31 09:55:38 +01:00
9 changed files with 649 additions and 122 deletions

4
.gitignore vendored
View File

@@ -1,3 +1 @@
/strongswan-5.7.2.tar.bz2
/strongswan-5.8.1.tar.bz2
/strongswan-5.8.2.tar.bz2
/strongswan-5.6.3.tar.bz2

View File

@@ -1,16 +1,16 @@
From 1d669ed02aca9e797db9fbca3eb1198dc19c292e Mon Sep 17 00:00:00 2001
From 9d85d221f1bf330d31fa334d1bb7760fee90317e Mon Sep 17 00:00:00 2001
From: Tobias Brunner <tobias@strongswan.org>
Date: Fri, 17 Jul 2015 11:53:58 +0200
Subject: [PATCH 1/4] ike: Adhere to IKE_SA limit when checking out by config
Subject: [PATCH 1/6] ike: Adhere to IKE_SA limit when checking out by config
This prevents new SAs from getting created if we hit the global IKE_SA
limit (we still allow checkout_new(), which is used for rekeying).
---
src/libcharon/sa/ike_sa_manager.c | 73 ++++++++++++++++---------------
1 file changed, 38 insertions(+), 35 deletions(-)
src/libcharon/sa/ike_sa_manager.c | 71 ++++++++++++++++---------------
1 file changed, 37 insertions(+), 34 deletions(-)
diff --git a/src/libcharon/sa/ike_sa_manager.c b/src/libcharon/sa/ike_sa_manager.c
index 101d98678..5ac534b6c 100644
index 2a499db40..74f2a933c 100644
--- a/src/libcharon/sa/ike_sa_manager.c
+++ b/src/libcharon/sa/ike_sa_manager.c
@@ -1419,48 +1419,51 @@ METHOD(ike_sa_manager_t, checkout_by_config, ike_sa_t*,
@@ -37,10 +37,25 @@ index 101d98678..5ac534b6c 100644
- if (entry->ike_sa->get_state(entry->ike_sa) == IKE_DELETING ||
- entry->ike_sa->get_state(entry->ike_sa) == IKE_REKEYED)
- { /* skip IKE_SAs which are not usable, wake other waiting threads */
- entry->condvar->signal(entry->condvar);
- continue;
- }
-
- current_peer = entry->ike_sa->get_peer_cfg(entry->ike_sa);
- if (current_peer && current_peer->equals(current_peer, peer_cfg))
- {
- current_ike = current_peer->get_ike_cfg(current_peer);
- if (current_ike->equals(current_ike, peer_cfg->get_ike_cfg(peer_cfg)))
+ if (!wait_for_entry(this, entry, segment))
+ {
{
- entry->checked_out = thread_current();
- ike_sa = entry->ike_sa;
- DBG2(DBG_MGR, "found existing IKE_SA %u with a '%s' config",
- ike_sa->get_unique_id(ike_sa),
- current_peer->get_name(current_peer));
- break;
+ continue;
+ }
}
+ if (entry->ike_sa->get_state(entry->ike_sa) == IKE_DELETING ||
+ entry->ike_sa->get_state(entry->ike_sa) == IKE_REKEYED)
+ { /* skip IKE_SAs which are not usable, wake other waiting threads */
@@ -63,24 +78,8 @@ index 101d98678..5ac534b6c 100644
+ }
+ }
+ /* other threads might be waiting for this entry */
entry->condvar->signal(entry->condvar);
- continue;
+ entry->condvar->signal(entry->condvar);
}
-
- current_peer = entry->ike_sa->get_peer_cfg(entry->ike_sa);
- if (current_peer && current_peer->equals(current_peer, peer_cfg))
- {
- current_ike = current_peer->get_ike_cfg(current_peer);
- if (current_ike->equals(current_ike, peer_cfg->get_ike_cfg(peer_cfg)))
- {
- entry->checked_out = thread_current();
- ike_sa = entry->ike_sa;
- DBG2(DBG_MGR, "found existing IKE_SA %u with a '%s' config",
- ike_sa->get_unique_id(ike_sa),
- current_peer->get_name(current_peer));
- break;
- }
- }
- /* other threads might be waiting for this entry */
- entry->condvar->signal(entry->condvar);
+ enumerator->destroy(enumerator);
@@ -101,5 +100,5 @@ index 101d98678..5ac534b6c 100644
}
charon->bus->set_sa(charon->bus, ike_sa);
--
2.21.0
2.24.1

View File

@@ -1,7 +1,7 @@
From ea546194df7e5d181cdfc1b236e21f973080be51 Mon Sep 17 00:00:00 2001
From bf75041bd4a2c0f18b1db80f5cf9124a4b0538a0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
Date: Mon, 21 Sep 2015 13:41:58 +0300
Subject: [PATCH 2/4] charon: add optional source and remote overrides for
Subject: [PATCH 2/6] charon: add optional source and remote overrides for
initiate
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
@@ -26,12 +26,12 @@ Signed-off-by: Timo Teräs <timo.teras@iki.fi>
.../processing/jobs/start_action_job.c | 2 +-
src/libcharon/sa/ike_sa_manager.c | 51 ++++++++++++++-
src/libcharon/sa/ike_sa_manager.h | 8 ++-
src/libcharon/sa/trap_manager.c | 49 ++++++---------
src/libcharon/sa/trap_manager.c | 45 ++++++-------
src/swanctl/commands/initiate.c | 40 +++++++++++-
12 files changed, 220 insertions(+), 50 deletions(-)
12 files changed, 218 insertions(+), 48 deletions(-)
diff --git a/src/charon-cmd/cmd/cmd_connection.c b/src/charon-cmd/cmd/cmd_connection.c
index 71df92f7e..13b31de8a 100644
index 1cf431ff2..ae406393f 100644
--- a/src/charon-cmd/cmd/cmd_connection.c
+++ b/src/charon-cmd/cmd/cmd_connection.c
@@ -436,7 +436,7 @@ static job_requeue_t initiate(private_cmd_connection_t *this)
@@ -44,10 +44,10 @@ index 71df92f7e..13b31de8a 100644
terminate(pid);
}
diff --git a/src/charon-nm/nm/nm_service.c b/src/charon-nm/nm/nm_service.c
index 3e8392a57..4b7468a97 100644
index a12f008a7..59e053318 100644
--- a/src/charon-nm/nm/nm_service.c
+++ b/src/charon-nm/nm/nm_service.c
@@ -634,7 +634,7 @@ static gboolean connect_(NMVPNPlugin *plugin, NMConnection *connection,
@@ -622,7 +622,7 @@ static gboolean connect_(NMVpnServicePlugin *plugin, NMConnection *connection,
* Prepare IKE_SA
*/
ike_sa = charon->ike_sa_manager->checkout_by_config(charon->ike_sa_manager,
@@ -57,7 +57,7 @@ index 3e8392a57..4b7468a97 100644
{
peer_cfg->destroy(peer_cfg);
diff --git a/src/libcharon/control/controller.c b/src/libcharon/control/controller.c
index 44a4d0aa8..88c04b16c 100644
index 589c536d2..037e6a72d 100644
--- a/src/libcharon/control/controller.c
+++ b/src/libcharon/control/controller.c
@@ -15,6 +15,28 @@
@@ -106,7 +106,7 @@ index 44a4d0aa8..88c04b16c 100644
/**
* unique ID, used for various methods
*/
@@ -402,9 +434,14 @@ METHOD(job_t, initiate_execute, job_requeue_t,
@@ -409,9 +441,14 @@ METHOD(job_t, initiate_execute, job_requeue_t,
ike_sa_t *ike_sa;
interface_listener_t *listener = &job->listener;
peer_cfg_t *peer_cfg = listener->peer_cfg;
@@ -122,7 +122,7 @@ index 44a4d0aa8..88c04b16c 100644
if (!ike_sa)
{
listener->child_cfg->destroy(listener->child_cfg);
@@ -413,6 +450,7 @@ METHOD(job_t, initiate_execute, job_requeue_t,
@@ -420,6 +457,7 @@ METHOD(job_t, initiate_execute, job_requeue_t,
listener_done(listener);
return JOB_REQUEUE_NONE;
}
@@ -130,7 +130,7 @@ index 44a4d0aa8..88c04b16c 100644
listener->lock->lock(listener->lock);
listener->ike_sa = ike_sa;
listener->lock->unlock(listener->lock);
@@ -485,6 +523,7 @@ METHOD(job_t, initiate_execute, job_requeue_t,
@@ -492,6 +530,7 @@ METHOD(job_t, initiate_execute, job_requeue_t,
METHOD(controller_t, initiate, status_t,
private_controller_t *this, peer_cfg_t *peer_cfg, child_cfg_t *child_cfg,
@@ -138,17 +138,17 @@ index 44a4d0aa8..88c04b16c 100644
controller_cb_t callback, void *param, u_int timeout, bool limits)
{
interface_job_t *job;
@@ -507,6 +546,8 @@ METHOD(controller_t, initiate, status_t,
@@ -514,6 +553,8 @@ METHOD(controller_t, initiate, status_t,
.status = FAILED,
.child_cfg = child_cfg,
.peer_cfg = peer_cfg,
+ .my_host = my_host ? my_host->clone(my_host) : NULL,
+ .other_host = other_host ? other_host->clone(other_host) : NULL,
.lock = spinlock_create(),
.limits = limits,
.options.limits = limits,
},
diff --git a/src/libcharon/control/controller.h b/src/libcharon/control/controller.h
index 9524f53b9..7c51ba4ca 100644
index af9baca01..02f17a8e3 100644
--- a/src/libcharon/control/controller.h
+++ b/src/libcharon/control/controller.h
@@ -79,6 +79,8 @@ struct controller_t {
@@ -169,7 +169,7 @@ index 9524f53b9..7c51ba4ca 100644
bool limits);
diff --git a/src/libcharon/plugins/stroke/stroke_control.c b/src/libcharon/plugins/stroke/stroke_control.c
index ee8306772..0736a6427 100644
index 8d84b934e..b00d0e62d 100644
--- a/src/libcharon/plugins/stroke/stroke_control.c
+++ b/src/libcharon/plugins/stroke/stroke_control.c
@@ -108,7 +108,7 @@ static void charon_initiate(private_stroke_control_t *this, peer_cfg_t *peer_cfg
@@ -192,10 +192,10 @@ index ee8306772..0736a6427 100644
switch (status)
{
diff --git a/src/libcharon/plugins/vici/vici_config.c b/src/libcharon/plugins/vici/vici_config.c
index e0e2955e2..b3e835f59 100644
index f4e9e33ee..56292696b 100644
--- a/src/libcharon/plugins/vici/vici_config.c
+++ b/src/libcharon/plugins/vici/vici_config.c
@@ -2000,7 +2000,7 @@ static void run_start_action(private_vici_config_t *this, peer_cfg_t *peer_cfg,
@@ -1978,7 +1978,7 @@ static void run_start_action(private_vici_config_t *this, peer_cfg_t *peer_cfg,
DBG1(DBG_CFG, "initiating '%s'", child_cfg->get_name(child_cfg));
charon->controller->initiate(charon->controller,
peer_cfg->get_ref(peer_cfg), child_cfg->get_ref(child_cfg),
@@ -205,7 +205,7 @@ index e0e2955e2..b3e835f59 100644
case ACTION_ROUTE:
DBG1(DBG_CFG, "installing '%s'", child_cfg->get_name(child_cfg));
diff --git a/src/libcharon/plugins/vici/vici_control.c b/src/libcharon/plugins/vici/vici_control.c
index afee649f7..94bb2eecb 100644
index ce19608dc..e378ca2e7 100644
--- a/src/libcharon/plugins/vici/vici_control.c
+++ b/src/libcharon/plugins/vici/vici_control.c
@@ -16,6 +16,28 @@
@@ -316,7 +316,7 @@ index afee649f7..94bb2eecb 100644
CALLBACK(terminate, vici_message_t*,
diff --git a/src/libcharon/processing/jobs/start_action_job.c b/src/libcharon/processing/jobs/start_action_job.c
index 654ec6abe..3d5a48cb8 100644
index 3a0ed879f..e3399007b 100644
--- a/src/libcharon/processing/jobs/start_action_job.c
+++ b/src/libcharon/processing/jobs/start_action_job.c
@@ -61,7 +61,7 @@ METHOD(job_t, execute, job_requeue_t,
@@ -329,7 +329,7 @@ index 654ec6abe..3d5a48cb8 100644
case ACTION_ROUTE:
DBG1(DBG_JOB, "start action: route '%s'", name);
diff --git a/src/libcharon/sa/ike_sa_manager.c b/src/libcharon/sa/ike_sa_manager.c
index 5ac534b6c..2a5beb94b 100644
index 74f2a933c..93de04d3d 100644
--- a/src/libcharon/sa/ike_sa_manager.c
+++ b/src/libcharon/sa/ike_sa_manager.c
@@ -17,6 +17,28 @@
@@ -448,10 +448,10 @@ index efad2e4d6..c43edabbb 100644
/**
* Reset initiator SPI.
diff --git a/src/libcharon/sa/trap_manager.c b/src/libcharon/sa/trap_manager.c
index 6436a2549..b54089a63 100644
index 979f9290a..b727370ed 100644
--- a/src/libcharon/sa/trap_manager.c
+++ b/src/libcharon/sa/trap_manager.c
@@ -448,7 +448,7 @@ METHOD(trap_manager_t, acquire, void,
@@ -421,7 +421,7 @@ METHOD(trap_manager_t, acquire, void,
peer_cfg_t *peer;
child_cfg_t *child;
ike_sa_t *ike_sa;
@@ -460,7 +460,7 @@ index 6436a2549..b54089a63 100644
bool wildcard, ignore = FALSE;
this->lock->read_lock(this->lock);
@@ -524,36 +524,27 @@ METHOD(trap_manager_t, acquire, void,
@@ -497,36 +497,27 @@ METHOD(trap_manager_t, acquire, void,
this->lock->unlock(this->lock);
if (wildcard)
@@ -475,34 +475,32 @@ index 6436a2549..b54089a63 100644
-
- ike_sa->set_peer_cfg(ike_sa, peer);
- ike_cfg = ike_sa->get_ike_cfg(ike_sa);
-
+ {
+ ike_cfg_t *ike_cfg;
+ uint16_t port;
+ uint8_t mask;
- port = ike_cfg->get_other_port(ike_cfg);
- dst->to_subnet(dst, &host, &mask);
- host->set_port(host, port);
- ike_sa->set_other_host(ike_sa, host);
-
+ ike_cfg = peer->get_ike_cfg(peer);
- port = ike_cfg->get_my_port(ike_cfg);
- src->to_subnet(src, &host, &mask);
- host->set_port(host, port);
- ike_sa->set_my_host(ike_sa, host);
-
+ port = ike_cfg->get_other_port(ike_cfg);
+ dst->to_subnet(dst, &other_host, &mask);
+ other_host->set_port(other_host, port);
- charon->bus->set_sa(charon->bus, ike_sa);
- }
- }
- else
{
- {
- ike_sa = charon->ike_sa_manager->checkout_by_config(
- charon->ike_sa_manager, peer);
+ ike_cfg_t *ike_cfg;
+ uint16_t port;
+ uint8_t mask;
+
+ ike_cfg = peer->get_ike_cfg(peer);
+
+ port = ike_cfg->get_other_port(ike_cfg);
+ dst->to_subnet(dst, &other_host, &mask);
+ other_host->set_port(other_host, port);
+
+ port = ike_cfg->get_my_port(ike_cfg);
+ src->to_subnet(src, &my_host, &mask);
+ my_host->set_port(my_host, port);
@@ -596,5 +594,5 @@ index 8e452a6f6..b27bb8194 100644
{"raw", 'r', 0, "dump raw response message"},
{"pretty", 'P', 0, "dump raw response message in pretty print"},
--
2.21.0
2.24.1

View File

@@ -1,7 +1,7 @@
From 40790461360e930ffda5dce9e020e15d9ccfdd7a Mon Sep 17 00:00:00 2001
From b4aa8404810032287a01d599238ec3a0d43bd153 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
Date: Mon, 21 Sep 2015 13:42:05 +0300
Subject: [PATCH 3/4] vici: send certificates for ike-sa events
Subject: [PATCH 3/6] vici: send certificates for ike-sa events
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
@@ -12,7 +12,7 @@ Signed-off-by: Timo Teräs <timo.teras@iki.fi>
1 file changed, 41 insertions(+), 7 deletions(-)
diff --git a/src/libcharon/plugins/vici/vici_query.c b/src/libcharon/plugins/vici/vici_query.c
index 134ea375d..6a2d9d3dc 100644
index 82c3d7855..d3092270d 100644
--- a/src/libcharon/plugins/vici/vici_query.c
+++ b/src/libcharon/plugins/vici/vici_query.c
@@ -337,7 +337,7 @@ static void list_vips(private_vici_query_t *this, vici_builder_t *b,
@@ -86,7 +86,7 @@ index 134ea375d..6a2d9d3dc 100644
b->begin_section(b, "child-sas");
csas = ike_sa->create_child_sa_enumerator(ike_sa);
@@ -1607,7 +1641,7 @@ METHOD(listener_t, ike_updown, bool,
@@ -1624,7 +1658,7 @@ METHOD(listener_t, ike_updown, bool,
}
b->begin_section(b, ike_sa->get_name(ike_sa));
@@ -95,7 +95,7 @@ index 134ea375d..6a2d9d3dc 100644
b->end_section(b);
this->dispatcher->raise_event(this->dispatcher,
@@ -1632,10 +1666,10 @@ METHOD(listener_t, ike_rekey, bool,
@@ -1649,10 +1683,10 @@ METHOD(listener_t, ike_rekey, bool,
b = vici_builder_create();
b->begin_section(b, old->get_name(old));
b->begin_section(b, "old");
@@ -108,7 +108,7 @@ index 134ea375d..6a2d9d3dc 100644
b->end_section(b);
b->end_section(b);
@@ -1665,7 +1699,7 @@ METHOD(listener_t, child_updown, bool,
@@ -1682,7 +1716,7 @@ METHOD(listener_t, child_updown, bool,
}
b->begin_section(b, ike_sa->get_name(ike_sa));
@@ -117,7 +117,7 @@ index 134ea375d..6a2d9d3dc 100644
b->begin_section(b, "child-sas");
b->begin_section(b, child_sa->get_name(child_sa));
@@ -1697,7 +1731,7 @@ METHOD(listener_t, child_rekey, bool,
@@ -1714,7 +1748,7 @@ METHOD(listener_t, child_rekey, bool,
b = vici_builder_create();
b->begin_section(b, ike_sa->get_name(ike_sa));
@@ -127,5 +127,5 @@ index 134ea375d..6a2d9d3dc 100644
b->begin_section(b, old->get_name(old));
--
2.21.0
2.24.1

View File

@@ -1,7 +1,7 @@
From b08bc3334aa09841438123ce3ddd7f535350cb24 Mon Sep 17 00:00:00 2001
From a2c2426e64c34e81a81abd6fc6b358384593be96 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
Date: Mon, 21 Sep 2015 13:42:11 +0300
Subject: [PATCH 4/4] vici: add support for individual sa state changes
Subject: [PATCH 4/6] vici: add support for individual sa state changes
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
@@ -14,10 +14,10 @@ Signed-off-by: Timo Teräs <timo.teras@iki.fi>
1 file changed, 105 insertions(+)
diff --git a/src/libcharon/plugins/vici/vici_query.c b/src/libcharon/plugins/vici/vici_query.c
index 6a2d9d3dc..36802fcc4 100644
index d3092270d..8a5231473 100644
--- a/src/libcharon/plugins/vici/vici_query.c
+++ b/src/libcharon/plugins/vici/vici_query.c
@@ -1607,8 +1607,16 @@ static void manage_commands(private_vici_query_t *this, bool reg)
@@ -1624,8 +1624,16 @@ static void manage_commands(private_vici_query_t *this, bool reg)
this->dispatcher->manage_event(this->dispatcher, "list-cert", reg);
this->dispatcher->manage_event(this->dispatcher, "ike-updown", reg);
this->dispatcher->manage_event(this->dispatcher, "ike-rekey", reg);
@@ -34,7 +34,7 @@ index 6a2d9d3dc..36802fcc4 100644
manage_command(this, "list-sas", list_sas, reg);
manage_command(this, "list-policies", list_policies, reg);
manage_command(this, "list-conns", list_conns, reg);
@@ -1679,6 +1687,45 @@ METHOD(listener_t, ike_rekey, bool,
@@ -1696,6 +1704,45 @@ METHOD(listener_t, ike_rekey, bool,
return TRUE;
}
@@ -80,7 +80,7 @@ index 6a2d9d3dc..36802fcc4 100644
METHOD(listener_t, child_updown, bool,
private_vici_query_t *this, ike_sa_t *ike_sa, child_sa_t *child_sa, bool up)
{
@@ -1754,6 +1801,62 @@ METHOD(listener_t, child_rekey, bool,
@@ -1771,6 +1818,62 @@ METHOD(listener_t, child_rekey, bool,
return TRUE;
}
@@ -143,7 +143,7 @@ index 6a2d9d3dc..36802fcc4 100644
METHOD(vici_query_t, destroy, void,
private_vici_query_t *this)
{
@@ -1773,8 +1876,10 @@ vici_query_t *vici_query_create(vici_dispatcher_t *dispatcher)
@@ -1790,8 +1893,10 @@ vici_query_t *vici_query_create(vici_dispatcher_t *dispatcher)
.listener = {
.ike_updown = _ike_updown,
.ike_rekey = _ike_rekey,
@@ -155,5 +155,5 @@ index 6a2d9d3dc..36802fcc4 100644
.destroy = _destroy,
},
--
2.21.0
2.24.1

View File

@@ -0,0 +1,49 @@
From a2ff6e9951a784d192ec7f7abd48a9e3da01e2bd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
Date: Mon, 21 Sep 2015 13:42:15 +0300
Subject: [PATCH 5/6] vici: add (deprecated) async parameter
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This is obsoleted by the new "timeout=-1" option that achieves
the same. Only for compatibility with old versions of quagga-nhrp.
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
---
src/libcharon/plugins/vici/vici_control.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/libcharon/plugins/vici/vici_control.c b/src/libcharon/plugins/vici/vici_control.c
index e378ca2e7..dcc6c853f 100644
--- a/src/libcharon/plugins/vici/vici_control.c
+++ b/src/libcharon/plugins/vici/vici_control.c
@@ -197,7 +197,7 @@ CALLBACK(initiate, vici_message_t*,
host_t *my_host = NULL, *other_host = NULL;
char *child, *ike, *my_host_str, *other_host_str;
int timeout;
- bool limits;
+ bool limits, async;
controller_cb_t log_cb = NULL;
log_info_t log = {
.dispatcher = this->dispatcher,
@@ -208,6 +208,7 @@ CALLBACK(initiate, vici_message_t*,
ike = request->get_str(request, NULL, "ike");
timeout = request->get_int(request, 0, "timeout");
limits = request->get_bool(request, FALSE, "init-limits");
+ async = request->get_bool(request, FALSE, "async");
log.level = request->get_int(request, 1, "loglevel");
my_host_str = request->get_str(request, NULL, "my-host");
other_host_str = request->get_str(request, NULL, "other-host");
@@ -216,7 +217,7 @@ CALLBACK(initiate, vici_message_t*,
{
return send_reply(this, "missing configuration name");
}
- if (timeout >= 0)
+ if (timeout >= 0 && !async)
{
log_cb = (controller_cb_t)log_vici;
}
--
2.24.1

View File

@@ -0,0 +1,507 @@
From a88eece36be240bb0240760a0b2a9056a69a3e71 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
Date: Mon, 21 Sep 2015 13:42:18 +0300
Subject: [PATCH 6/6] support gre key in ikev1
this implements gre key negotiation in ikev1 similarly to the
ipsec-tools patch in alpine.
the from/to port pair is internally used as gre key for gre
protocol traffic selectors. since from/to pairs 0/0xffff and
0xffff/0 have special meaning, the gre keys 0xffff and 0xffff0000
will not work.
this is not standard compliant, and should probably not be upstreamed
or used widely, but it is applied for interoperability with alpine
racoon for the time being.
---
src/libcharon/encoding/payloads/id_payload.c | 68 ++++++++++++++-----
src/libcharon/encoding/payloads/id_payload.h | 6 +-
.../kernel_netlink/kernel_netlink_ipsec.c | 40 ++++++++---
src/libcharon/plugins/stroke/stroke_config.c | 5 ++
src/libcharon/plugins/unity/unity_narrow.c | 2 +-
src/libcharon/plugins/vici/vici_config.c | 9 ++-
src/libcharon/sa/ikev1/tasks/quick_mode.c | 16 +++--
.../selectors/traffic_selector.c | 33 ++++++++-
.../selectors/traffic_selector.h | 31 +++++++++
9 files changed, 171 insertions(+), 39 deletions(-)
diff --git a/src/libcharon/encoding/payloads/id_payload.c b/src/libcharon/encoding/payloads/id_payload.c
index b2f1adbbc..6b44d0cf6 100644
--- a/src/libcharon/encoding/payloads/id_payload.c
+++ b/src/libcharon/encoding/payloads/id_payload.c
@@ -245,18 +245,20 @@ METHOD(id_payload_t, get_identification, identification_t*,
* Create a traffic selector from an range ID
*/
static traffic_selector_t *get_ts_from_range(private_id_payload_t *this,
- ts_type_t type)
+ ts_type_t type,
+ uint16_t from_port, uint16_t to_port)
{
return traffic_selector_create_from_bytes(this->protocol_id, type,
- chunk_create(this->id_data.ptr, this->id_data.len / 2), this->port,
- chunk_skip(this->id_data, this->id_data.len / 2), this->port ?: 65535);
+ chunk_create(this->id_data.ptr, this->id_data.len / 2), from_port,
+ chunk_skip(this->id_data, this->id_data.len / 2), to_port);
}
/**
* Create a traffic selector from an subnet ID
*/
static traffic_selector_t *get_ts_from_subnet(private_id_payload_t *this,
- ts_type_t type)
+ ts_type_t type,
+ uint16_t from_port, uint16_t to_port)
{
traffic_selector_t *ts;
chunk_t net, netmask;
@@ -269,7 +271,7 @@ static traffic_selector_t *get_ts_from_subnet(private_id_payload_t *this,
netmask.ptr[i] = (netmask.ptr[i] ^ 0xFF) | net.ptr[i];
}
ts = traffic_selector_create_from_bytes(this->protocol_id, type,
- net, this->port, netmask, this->port ?: 65535);
+ net, from_port, netmask, to_port);
chunk_free(&netmask);
return ts;
}
@@ -278,51 +280,76 @@ static traffic_selector_t *get_ts_from_subnet(private_id_payload_t *this,
* Create a traffic selector from an IP ID
*/
static traffic_selector_t *get_ts_from_ip(private_id_payload_t *this,
- ts_type_t type)
+ ts_type_t type,
+ uint16_t from_port, uint16_t to_port)
{
return traffic_selector_create_from_bytes(this->protocol_id, type,
- this->id_data, this->port, this->id_data, this->port ?: 65535);
+ this->id_data, from_port, this->id_data, to_port);
}
METHOD(id_payload_t, get_ts, traffic_selector_t*,
- private_id_payload_t *this)
+ private_id_payload_t *this, id_payload_t *other_, bool initiator)
{
+ private_id_payload_t *other = (private_id_payload_t *) other_;
+ uint16_t from_port, to_port;
+
+ if (other && this->protocol_id == IPPROTO_GRE && other->protocol_id == IPPROTO_GRE)
+ {
+ if (initiator)
+ {
+ from_port = this->port;
+ to_port = other->port;
+ }
+ else
+ {
+ from_port = other->port;
+ to_port = this->port;
+ }
+ if (from_port == 0 && to_port == 0)
+ to_port = 0xffff;
+ }
+ else
+ {
+ from_port = this->port;
+ to_port = this->port ?: 0xffff;
+ }
+
switch (this->id_type)
{
case ID_IPV4_ADDR_SUBNET:
if (this->id_data.len == 8)
{
- return get_ts_from_subnet(this, TS_IPV4_ADDR_RANGE);
+ return get_ts_from_subnet(this, TS_IPV4_ADDR_RANGE, from_port, to_port);
}
break;
case ID_IPV6_ADDR_SUBNET:
if (this->id_data.len == 32)
{
- return get_ts_from_subnet(this, TS_IPV6_ADDR_RANGE);
+ return get_ts_from_subnet(this, TS_IPV6_ADDR_RANGE, from_port, to_port);
}
break;
case ID_IPV4_ADDR_RANGE:
if (this->id_data.len == 8)
{
- return get_ts_from_range(this, TS_IPV4_ADDR_RANGE);
+ return get_ts_from_range(this, TS_IPV4_ADDR_RANGE, from_port, to_port);
}
break;
case ID_IPV6_ADDR_RANGE:
if (this->id_data.len == 32)
{
- return get_ts_from_range(this, TS_IPV6_ADDR_RANGE);
+ return get_ts_from_range(this, TS_IPV6_ADDR_RANGE, from_port, to_port);
}
break;
case ID_IPV4_ADDR:
if (this->id_data.len == 4)
{
- return get_ts_from_ip(this, TS_IPV4_ADDR_RANGE);
+ return get_ts_from_ip(this, TS_IPV4_ADDR_RANGE, from_port, to_port);
}
break;
case ID_IPV6_ADDR:
if (this->id_data.len == 16)
{
- return get_ts_from_ip(this, TS_IPV6_ADDR_RANGE);
+ return get_ts_from_ip(this, TS_IPV6_ADDR_RANGE, from_port, to_port);
}
break;
default:
@@ -397,7 +424,7 @@ id_payload_t *id_payload_create_from_identification(payload_type_t type,
/*
* Described in header.
*/
-id_payload_t *id_payload_create_from_ts(traffic_selector_t *ts)
+id_payload_t *id_payload_create_from_ts(traffic_selector_t *ts, bool initiator)
{
private_id_payload_t *this;
uint8_t mask;
@@ -460,8 +487,17 @@ id_payload_t *id_payload_create_from_ts(traffic_selector_t *ts)
ts->get_from_address(ts), ts->get_to_address(ts));
net->destroy(net);
}
- this->port = ts->get_from_port(ts);
this->protocol_id = ts->get_protocol(ts);
+ if (initiator || this->protocol_id != IPPROTO_GRE)
+ {
+ this->port = ts->get_from_port(ts);
+ }
+ else
+ {
+ this->port = ts->get_to_port(ts);
+ if (this->port == 0xffff && ts->get_from_port(ts) == 0)
+ this->port = 0;
+ }
this->payload_length += this->id_data.len;
return &this->public;
diff --git a/src/libcharon/encoding/payloads/id_payload.h b/src/libcharon/encoding/payloads/id_payload.h
index 283780624..fafeca8bc 100644
--- a/src/libcharon/encoding/payloads/id_payload.h
+++ b/src/libcharon/encoding/payloads/id_payload.h
@@ -48,11 +48,11 @@ struct id_payload_t {
identification_t *(*get_identification) (id_payload_t *this);
/**
- * Creates a traffic selector form a ID_ADDR_SUBNET/RANGE identity.
+ * Creates a traffic selector form a ID_ADDR_SUBNET/RANGE identity pair.
*
* @return traffic selector, NULL on failure
*/
- traffic_selector_t* (*get_ts)(id_payload_t *this);
+ traffic_selector_t* (*get_ts)(id_payload_t *this, id_payload_t *other, bool initiator);
/**
* Get encoded payload without fixed payload header (used for IKEv1).
@@ -91,6 +91,6 @@ id_payload_t *id_payload_create_from_identification(payload_type_t type,
* @param ts traffic selector
* @return PLV1_ID id_paylad_t object.
*/
-id_payload_t *id_payload_create_from_ts(traffic_selector_t *ts);
+id_payload_t *id_payload_create_from_ts(traffic_selector_t *ts, bool initiator);
#endif /** ID_PAYLOAD_H_ @}*/
diff --git a/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c b/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c
index 4926c3de8..820780f3c 100644
--- a/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c
+++ b/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c
@@ -869,7 +869,18 @@ static struct xfrm_selector ts2selector(traffic_selector_t *src,
ts2subnet(src, &sel.saddr, &sel.prefixlen_s);
ts2ports(dst, &sel.dport, &sel.dport_mask);
ts2ports(src, &sel.sport, &sel.sport_mask);
- if ((sel.proto == IPPROTO_ICMP || sel.proto == IPPROTO_ICMPV6) &&
+ if (sel.proto == IPPROTO_GRE)
+ {
+ sel.sport = htons(src->get_from_port(src));
+ sel.dport = htons(src->get_to_port(src));
+ sel.sport_mask = ~0;
+ sel.dport_mask = ~0;
+ if (sel.sport == htons(0) && sel.dport == htons(0xffff))
+ {
+ sel.sport = sel.dport = sel.sport_mask = sel.dport_mask = 0;
+ }
+ }
+ else if ((sel.proto == IPPROTO_ICMP || sel.proto == IPPROTO_ICMPV6) &&
(sel.dport || sel.sport))
{
/* the kernel expects the ICMP type and code in the source and
@@ -893,7 +904,7 @@ static traffic_selector_t* selector2ts(struct xfrm_selector *sel, bool src)
{
u_char *addr;
uint8_t prefixlen;
- uint16_t port = 0;
+ uint16_t from_port = 0, to_port = 65535;
host_t *host = NULL;
if (src)
@@ -902,7 +913,7 @@ static traffic_selector_t* selector2ts(struct xfrm_selector *sel, bool src)
prefixlen = sel->prefixlen_s;
if (sel->sport_mask)
{
- port = ntohs(sel->sport);
+ from_port = to_port = ntohs(sel->sport);
}
}
else
@@ -911,14 +922,27 @@ static traffic_selector_t* selector2ts(struct xfrm_selector *sel, bool src)
prefixlen = sel->prefixlen_d;
if (sel->dport_mask)
{
- port = ntohs(sel->dport);
+ from_port = to_port = ntohs(sel->dport);
+ }
+ }
+ if (sel->proto == IPPROTO_GRE)
+ {
+ if (sel->sport_mask)
+ {
+ from_port = ntohs(sel->sport);
+ to_port = ntohs(sel->dport);
+ }
+ else
+ {
+ from_port = 0;
+ to_port = 0xffff;
}
}
- if (sel->proto == IPPROTO_ICMP || sel->proto == IPPROTO_ICMPV6)
+ else if (sel->proto == IPPROTO_ICMP || sel->proto == IPPROTO_ICMPV6)
{ /* convert ICMP[v6] message type and code as supplied by the kernel in
* source and destination ports (both in network order) */
- port = (sel->sport >> 8) | (sel->dport & 0xff00);
- port = ntohs(port);
+ from_port = (sel->sport >> 8) | (sel->dport & 0xff00);
+ from_port = to_port = ntohs(from_port);
}
/* The Linux 2.6 kernel does not set the selector's family field,
* so as a kludge we additionally test the prefix length.
@@ -935,7 +959,7 @@ static traffic_selector_t* selector2ts(struct xfrm_selector *sel, bool src)
if (host)
{
return traffic_selector_create_from_subnet(host, prefixlen,
- sel->proto, port, port ?: 65535);
+ sel->proto, from_port, to_port);
}
return NULL;
}
diff --git a/src/libcharon/plugins/stroke/stroke_config.c b/src/libcharon/plugins/stroke/stroke_config.c
index 8cdb5ef48..a81949c09 100644
--- a/src/libcharon/plugins/stroke/stroke_config.c
+++ b/src/libcharon/plugins/stroke/stroke_config.c
@@ -936,6 +936,11 @@ static bool parse_protoport(char *token, uint16_t *from_port,
*from_port = 0xffff;
*to_port = 0;
}
+ else if (*port && *protocol == IPPROTO_GRE)
+ {
+ p = strtol(port, &endptr, 0);
+ traffic_selector_split_grekey(p, from_port, to_port);
+ }
else if (*port)
{
svc = getservbyname(port, NULL);
diff --git a/src/libcharon/plugins/unity/unity_narrow.c b/src/libcharon/plugins/unity/unity_narrow.c
index 05ae8d504..8545c415d 100644
--- a/src/libcharon/plugins/unity/unity_narrow.c
+++ b/src/libcharon/plugins/unity/unity_narrow.c
@@ -247,7 +247,7 @@ METHOD(listener_t, message, bool,
if (!first)
{
id_payload = (id_payload_t*)payload;
- tsr = id_payload->get_ts(id_payload);
+ tsr = id_payload->get_ts(id_payload, NULL, FALSE);
break;
}
first = FALSE;
diff --git a/src/libcharon/plugins/vici/vici_config.c b/src/libcharon/plugins/vici/vici_config.c
index 56292696b..214ed9b52 100644
--- a/src/libcharon/plugins/vici/vici_config.c
+++ b/src/libcharon/plugins/vici/vici_config.c
@@ -680,8 +680,13 @@ CALLBACK(parse_ts, bool,
}
else if (*port && !streq(port, "any"))
{
- svc = getservbyname(port, NULL);
- if (svc)
+ if (proto == IPPROTO_GRE)
+ {
+ p = strtol(port, &end, 0);
+ if (*end) return FALSE;
+ traffic_selector_split_grekey(p, &from, &to);
+ }
+ else if ((svc = getservbyname(port, NULL)) != NULL)
{
from = to = ntohs(svc->s_port);
}
diff --git a/src/libcharon/sa/ikev1/tasks/quick_mode.c b/src/libcharon/sa/ikev1/tasks/quick_mode.c
index 5e5b61e7f..1027e3006 100644
--- a/src/libcharon/sa/ikev1/tasks/quick_mode.c
+++ b/src/libcharon/sa/ikev1/tasks/quick_mode.c
@@ -567,9 +567,9 @@ static void add_ts(private_quick_mode_t *this, message_t *message)
{
id_payload_t *id_payload;
- id_payload = id_payload_create_from_ts(this->tsi);
+ id_payload = id_payload_create_from_ts(this->tsi, TRUE);
message->add_payload(message, &id_payload->payload_interface);
- id_payload = id_payload_create_from_ts(this->tsr);
+ id_payload = id_payload_create_from_ts(this->tsr, FALSE);
message->add_payload(message, &id_payload->payload_interface);
}
@@ -580,7 +580,7 @@ static bool get_ts(private_quick_mode_t *this, message_t *message)
{
traffic_selector_t *tsi = NULL, *tsr = NULL;
enumerator_t *enumerator;
- id_payload_t *id_payload;
+ id_payload_t *idi = NULL, *idr = NULL;
payload_t *payload;
host_t *hsi, *hsr;
bool first = TRUE;
@@ -590,20 +590,22 @@ static bool get_ts(private_quick_mode_t *this, message_t *message)
{
if (payload->get_type(payload) == PLV1_ID)
{
- id_payload = (id_payload_t*)payload;
-
if (first)
{
- tsi = id_payload->get_ts(id_payload);
+ idi = (id_payload_t*)payload;
first = FALSE;
}
else
{
- tsr = id_payload->get_ts(id_payload);
+ idr = (id_payload_t*)payload;
break;
}
}
}
+ if (idi && idr) {
+ tsi = idi->get_ts(idi, idr, TRUE);
+ tsr = idr->get_ts(idr, idi, FALSE);
+ }
enumerator->destroy(enumerator);
/* create host2host selectors if ID payloads missing */
diff --git a/src/libstrongswan/selectors/traffic_selector.c b/src/libstrongswan/selectors/traffic_selector.c
index cfd2b029d..d01e2ccec 100644
--- a/src/libstrongswan/selectors/traffic_selector.c
+++ b/src/libstrongswan/selectors/traffic_selector.c
@@ -198,6 +198,14 @@ static int print_icmp(printf_hook_data_t *data, uint16_t port)
return print_in_hook(data, "%d", type);
}
+/**
+ * Print GRE key
+ */
+static int print_grekey(printf_hook_data_t *data, uint16_t from_port, uint16_t to_port)
+{
+ return print_in_hook(data, "%d", traffic_selector_grekey(from_port, to_port));
+}
+
/**
* Described in header.
*/
@@ -303,7 +311,11 @@ int traffic_selector_printf_hook(printf_hook_data_t *data,
{
written += print_in_hook(data, "/");
- if (this->from_port == this->to_port)
+ if (this->protocol == IPPROTO_GRE)
+ {
+ written += print_grekey(data, this->from_port, this->to_port);
+ }
+ else if (this->from_port == this->to_port)
{
struct servent *serv;
@@ -377,7 +389,24 @@ METHOD(traffic_selector_t, get_subset, traffic_selector_t*,
/* select protocol, which is not zero */
protocol = max(this->protocol, other->protocol);
- if ((is_opaque(this) && is_opaque(other)) ||
+ if (this->protocol == IPPROTO_GRE)
+ {
+ if (is_any(this))
+ {
+ from_port = other->from_port;
+ to_port = other->to_port;
+ }
+ else if (is_any(other) ||
+ (this->from_port == other->from_port &&
+ this->to_port == other->to_port))
+ {
+ from_port = this->from_port;
+ to_port = this->to_port;
+ }
+ else
+ return NULL;
+ }
+ else if ((is_opaque(this) && is_opaque(other)) ||
(is_opaque(this) && is_any(other)) ||
(is_opaque(other) && is_any(this)))
{
diff --git a/src/libstrongswan/selectors/traffic_selector.h b/src/libstrongswan/selectors/traffic_selector.h
index dd9ad7e1b..9ea360d90 100644
--- a/src/libstrongswan/selectors/traffic_selector.h
+++ b/src/libstrongswan/selectors/traffic_selector.h
@@ -120,6 +120,9 @@ struct traffic_selector_t {
* 8 bits and the code in the least significant 8 bits. Use the utility
* functions to extract them.
*
+ * If the protocol is GRE, the high 16-bits of the 32-bit GRE key is stored
+ * in the from port. Use the utility function to merge and split them.
+ *
* @return port
*/
uint16_t (*get_from_port)(traffic_selector_t *this);
@@ -134,6 +137,9 @@ struct traffic_selector_t {
* 8 bits and the code in the least significant 8 bits. Use the utility
* functions to extract them.
*
+ * If the protocol is GRE, the low 16-bits of the 32-bit GRE key is stored
+ * in the to port. Use the utility function to merge and split them.
+ *
* @return port
*/
uint16_t (*get_to_port)(traffic_selector_t *this);
@@ -277,6 +283,31 @@ static inline uint8_t traffic_selector_icmp_code(uint16_t port)
int traffic_selector_cmp(traffic_selector_t *a, traffic_selector_t *b,
void *opts);
+/**
+ * Reconstruct the 32-bit GRE KEY in host order from a from/to ports.
+ *
+ * @param from_port port number in host order
+ * @param to_port port number in host order
+ * @return GRE KEY in host order
+ */
+static inline uint32_t traffic_selector_grekey(uint16_t from_port, uint16_t to_port)
+{
+ return (from_port << 16) | to_port;
+}
+
+/**
+ * Split 32-bit GRE KEY in host order to from/to ports.
+ *
+ * @param grekey grekey in host order
+ * @param from_port from port in host order
+ * @param to_port to port in host order
+ */
+static inline void traffic_selector_split_grekey(uint32_t grekey, uint16_t *from_port, uint16_t *to_port)
+{
+ *from_port = grekey >> 16;
+ *to_port = grekey & 0xffff;
+}
+
/**
* Create a new traffic selector using human readable params.
*
--
2.24.1

View File

@@ -1 +1 @@
SHA512 (strongswan-5.8.2.tar.bz2) = 423e7924acfe8a03ad7d4359ae9086fd516798fcf5eb948a27b52ea719f4d8954b83ea30ce94191ea1647616611df8a1215cb4d5c7ec48676624df6c41853e1d
SHA512 (strongswan-5.6.3.tar.bz2) = 080402640952b1a08e95bfe9c7f33c6a7dd01ac401b5e7e2e78257c0f2bf0a4d6078141232ac62abfacef892c493f6824948b3165d54d72b4e436ed564fd2609

View File

@@ -1,9 +1,10 @@
%global _hardened_build 1
#%%define prerelease dr1
Epoch: 1
Name: strongswan
Version: 5.8.2
Release: 2%{?dist}
Version: 5.6.3
Release: 3%{?dist}
Summary: An OpenSource IPsec-based VPN and TNC solution
License: GPLv2+
URL: http://www.strongswan.org/
@@ -15,6 +16,8 @@ Patch10: 0001-ike-Adhere-to-IKE_SA-limit-when-checking-out-by-conf.patch
Patch11: 0002-charon-add-optional-source-and-remote-overrides-for-.patch
Patch12: 0003-vici-send-certificates-for-ike-sa-events.patch
Patch13: 0004-vici-add-support-for-individual-sa-state-changes.patch
Patch14: 0005-vici-add-deprecated-async-parameter.patch
Patch15: 0006-support-gre-key-in-ikev1.patch
# only needed for pre-release versions
#BuildRequires: autoconf automake
@@ -87,10 +90,11 @@ PT-TLS to support TNC over TLS.
%patch3 -p1
%patch10 -p1
%patch11 -p1 -F3
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
%build
# only for snapshots
@@ -106,7 +110,6 @@ PT-TLS to support TNC over TLS.
--with-ipsecdir=%{_libexecdir}/strongswan \
--bindir=%{_libexecdir}/strongswan \
--with-ipseclibdir=%{_libdir}/strongswan \
--with-piddir=%{_rundir}/strongswan \
--with-fips-mode=2 \
--enable-bypass-lan \
--enable-tss-trousers \
@@ -191,6 +194,7 @@ make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
mv %{buildroot}%{_sysconfdir}/strongswan/dbus-1 %{buildroot}%{_sysconfdir}/
# prefix man pages
for i in %{buildroot}%{_mandir}/*/*; do
if echo "$i" | grep -vq '/strongswan[^\/]*$'; then
@@ -208,7 +212,6 @@ install -d -m 700 %{buildroot}%{_sysconfdir}/strongswan/ipsec.d
for i in aacerts acerts certs cacerts crls ocspcerts private reqs; do
install -d -m 700 %{buildroot}%{_sysconfdir}/strongswan/ipsec.d/${i}
done
install -d -m 0700 %{buildroot}%{_rundir}/strongswan
%post
%systemd_post %{name}.service
@@ -229,7 +232,7 @@ install -d -m 0700 %{buildroot}%{_rundir}/strongswan
%dir %{_libdir}/strongswan/plugins
%dir %{_libexecdir}/strongswan
%{_unitdir}/strongswan.service
%{_unitdir}/strongswan-starter.service
%{_unitdir}/strongswan-swanctl.service
%{_sbindir}/charon-cmd
%{_sbindir}/charon-systemd
%{_sbindir}/strongswan
@@ -250,7 +253,6 @@ install -d -m 0700 %{buildroot}%{_rundir}/strongswan
%{_mandir}/man?/*.gz
%{_datadir}/strongswan/templates/config/
%{_datadir}/strongswan/templates/database/
%attr(0755,root,root) %dir %{_rundir}/strongswan
%files sqlite
%{_libdir}/strongswan/plugins/libstrongswan-sqlite.so
@@ -274,36 +276,10 @@ install -d -m 0700 %{buildroot}%{_rundir}/strongswan
%files charon-nm
%doc COPYING
%{_datadir}/dbus-1/system.d/nm-strongswan-service.conf
%{_sysconfdir}/dbus-1/system.d/nm-strongswan-service.conf
%{_libexecdir}/strongswan/charon-nm
%changelog
* Sat Dec 28 2019 Paul Wouters <pwouters@redhat.com> - 5.8.2-2
- Use /run/strongswan as rundir to support strongswans in namespaces
* Tue Dec 17 2019 Mikhail Zabaluev <mikhail.zabaluev@gmail.com> - 5.8.2-1
- Update to 5.8.2 (#1784457)
- The D-Bus config file moved under datadir
* Mon Sep 02 2019 Mikhail Zabaluev <mikhail.zabaluev@gmail.com> - 5.8.1-1
- Update to 5.8.1 (#1711920)
- No more separate strongswan-swanctl.service to start out of order (#1775548)
- Added strongswan-starter.service
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 5.7.2-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 5.7.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Wed Jan 09 2019 Paul Wouters <pwouters@redhat.com> - 5.7.2-1
- Updated to 5.7.2
* Thu Oct 04 2018 Mikhail Zabaluev <mikhail.zabaluev@gmail.com> - 5.7.1-1
- Updated to 5.7.1
- Resolves rhbz#1635872 CVE-2018-16152
- Resolves rhbz#1635875 CVE-2018-16151
* Thu Aug 23 2018 Mikhail Zabaluev <mikhail.zabaluev@gmail.com> - 5.6.3-3
- Add plugin bypass-lan, disabled by default
- Resolves rhbz#1554479 Update to strongswan-charon-nm fails
@@ -651,10 +627,10 @@ install -d -m 0700 %{buildroot}%{_rundir}/strongswan
* Mon Mar 11 2013 Avesh Agarwal <avagarwa@redhat.com> - 5.0.2-1
- Update to upstream release 5.0.2
- Created sub package strongswan-tnc-imcvs that provides trusted network
connect's IMC and IMV funtionality. Specifically it includes PTS
based IMC/IMV for TPM based remote attestation and scanner and test
IMCs and IMVs. The Strongswan's IMC/IMV dynamic libraries can be used
by any third party TNC Client/Server implementation possessing a
connect's IMC and IMV funtionality. Specifically it includes PTS
based IMC/IMV for TPM based remote attestation and scanner and test
IMCs and IMVs. The Strongswan's IMC/IMV dynamic libraries can be used
by any third party TNC Client/Server implementation possessing a
standard IF-IMC/IMV interface.
* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 5.0.1-2