Compare commits

..

40 Commits

Author SHA1 Message Date
f975bfb84f Support GRE key in selectors 2024-05-19 20:39:30 +02:00
d423b730e9 Patch vici for NHRP 2024-05-19 20:39:30 +02:00
Fedora Release Engineering
19c48bd52d Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-27 04:30:59 +00:00
Fedora Release Engineering
c14cb600a0 Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-07-22 02:39:37 +00:00
Paul Wouters
9e397bfc7d new sources 2023-07-17 17:14:14 -04:00
Paul Wouters
9d159bf0d0 - Resolves: rhbz#2214186 strongswan-5.9.11 is available 2023-07-14 13:45:25 -04:00
Python Maint
f779b6c7bb Rebuilt for Python 3.12 2023-06-13 23:05:47 +02:00
Paul Wouters
9d642ad352 no longer use patches merged upstream 2023-03-02 11:02:38 -05:00
Paul Wouters
0132cc5668 - Update to 5.9.10 2023-03-02 10:24:58 -05:00
Paul Wouters
33fb3b13a3 - Resolves: CVE-2023-26463 authorization bypass in TLS-based EAP methods 2023-02-28 17:38:50 -05:00
Petr Menšík
6000262f47 Use configure paths in manual pages (#2106120) 2023-01-16 19:46:37 +01:00
Petr Menšík
d7206ab591 Switch all URLs to https
Include also github repository link in package to simplify upstream
changes tracking.
2023-01-16 14:04:39 +01:00
Petr Menšík
585aca3015 Update to 5.9.9 (#2157850) 2023-01-15 15:33:16 +01:00
Jitka Plesnikova
ea8056eb33 Add BR perl-generators to automatically generates run-time dependencies
for installed Perl files
2022-12-08 16:46:43 +01:00
Paul Wouters
199f1d8708 fixup systemd build requires 2022-10-16 22:42:15 -04:00
Paul Wouters
243ac7aa4a remove obsoleted --enable-imc-swid, --enable-imv-swid 2022-10-16 21:55:29 -04:00
Arne Reiter
d8e91f4aa4 Resolves rhbz#2112274 strongswan-5.9.8 is available
Patch1 removes CFLAGS -Wno-format which interferes with -Werror=format-security
Add BuildRequire for autoconf and automake, now required for release
Remove obsolete patches
2022-10-16 11:47:16 +02:00
Fedora Release Engineering
27a4aa8167 Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-07-23 09:32:45 +00:00
Petr Menšík
ea8baece11 fixup! Remove signature key from a cache, include it inside git 2022-06-23 19:41:55 +02:00
Petr Menšík
de70bbe3c5 Remove signature key from a cache, include it inside git
Key should be tracked by git. It is small and should not change very
often. Ensure signature has trust anchor.
2022-06-23 17:15:48 +02:00
Arne Reiter
271d4eca54 Resolves rhbz#2080070 strongswan-5.9.6 is available 2022-06-23 08:54:21 +02:00
Arne Reiter
9f5e4942d3 Resolves rhbz#2080070 strongswan-5.9.6 is available 2022-06-22 18:02:45 +02:00
Python Maint
15e47bc297 Rebuilt for Python 3.11 2022-06-13 17:17:06 +02:00
Davide Cavalca
c164f65462 Fix changelog entry 2022-03-04 20:49:42 -08:00
reitear
29f8c752f8 Resolves: rhbz#048108 - segfault at 18 ip 00007f4c7c0d841c sp 00007ffe49f61b70 error 4 in libc.so.6 2022-03-04 23:44:00 +01:00
Paul Wouters
e2ccbbed7e - Use newly published/cleaned strongswan gpg key 2022-01-25 09:14:37 -05:00
Paul Wouters
3f12242eea - Resolves rhbz#2044361 strongswan-5.9.5 is available (CVE-2021-45079) 2022-01-24 22:05:17 -05:00
Fedora Release Engineering
3067ecdcc7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-01-22 01:46:58 +00:00
Neal Gompa
2f04e6389f Disable TPM/TSS 1.2 support for F36+ / RHEL9+
TPM/TSS 1.2 has long since been superseded by TPM/TSS 2.0,
and trousers is more or less dead and replaced by the tpm-tss toolkit
for TPM/TSS 2.0.

Resolves: rhbz#2033299
2021-12-16 08:22:26 -05:00
Petr Menšík
b7c6e022d4 Add timeout and verbosity to tests
In case any test hangs, ensure it would release builder.
Increase verbosity to know more about possible failures. Interactive
debugging is not possible on builders.
2021-11-12 21:12:04 +01:00
Petr Menšík
0e9ffbc66d Enable additional module for testing 2021-11-12 21:12:04 +01:00
Petr Menšík
f751d41f23 Add quirks needed for python install
--enable-python-eggs is required to provide correct version. But
otherwise does different thing than is required for python bindings
package. Rebuild python after installation of main package, because it
changed destination directory used later by install.

Related: rhbz#1419441
2021-11-12 21:12:04 +01:00
Petr Menšík
3d925e79dd Add optional support for tests running
Now my tests did not finish successfully even on local build. Not
enabling them by default.
2021-11-12 21:12:02 +01:00
Petr Menšík
b097119cff Add pytest 2021-11-12 21:10:01 +01:00
Petr Menšík
a894518822 Add python3 and perl vici bindings
Work in progress to enable vici bindings. It seems they are not under
active support, because changes required for python3 are not in upstream
code.
2021-11-12 21:09:58 +01:00
Paul Wouters
8d04445d34 strongswan: don't use RuntimeDirectory in systemd service file
Because there are two services, strongswan and strongswan-starter
that use this directory. Otherwise when stopping a service, the
directory is removed from /run and the other service that does
not start anymore.

Also cleanup old patches that are obsolete.
2021-11-08 20:45:23 -05:00
Paul Wouters
28ee63eed5 * Wed Oct 20 2021 Paul Wouters <paul.wouters@aiven.io> - 5.9.4-1
- Resolves: rhbz#2015165 strongswan-5.9.4 is available
- Resolves: rhbz#2015611 CVE-2021-41990 strongswan: gmp plugin: integer overflow via a crafted certificate with an RSASSA-PSS signature
- Resolves: rhbz#2015614 CVE-2021-41991 strongswan: integer overflow when replacing certificates in cache
- Add BuildRequire for tpm2-tss-devel and weak dependency for tpm2-tools
2021-10-20 17:47:06 -04:00
Sahana Prasad
23b5b73cd8 Rebuilt with OpenSSL 3.0.0 2021-09-14 19:15:51 +02:00
Fedora Release Engineering
48629b5950 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-07-23 18:23:56 +00:00
Björn Esser
8ce4072e4d Rebuild for versioned symbols in json-c 2021-07-10 11:58:08 +02:00
13 changed files with 731 additions and 364 deletions

14
.gitignore vendored
View File

@@ -3,3 +3,17 @@
/strongswan-5.9.1.tar.bz2
/strongswan-5.9.2.tar.bz2
/strongswan-5.9.3.tar.bz2
/strongswan-5.9.4.tar.bz2
/948F158A4E76A27BF3D07532DF42C170B34DBA77
/strongswan-5.9.5.tar.bz2
/strongswan-5.9.5.tar.bz2.sig
/strongswan-5.9.6.tar.bz2
/strongswan-5.9.6.tar.bz2.sig
/strongswan-5.9.8.tar.bz2
/strongswan-5.9.8.tar.bz2.sig
/strongswan-5.9.9.tar.bz2
/strongswan-5.9.9.tar.bz2.sig
/strongswan-5.9.10.tar.bz2
/strongswan-5.9.10.tar.bz2.sig
/strongswan-5.9.11.tar.bz2
/strongswan-5.9.11.tar.bz2.sig

View File

@@ -1,7 +1,7 @@
From c2e02e7aa1aead5f5c9c6ceef7f3569d90deb20f Mon Sep 17 00:00:00 2001
From ec53b2914730f08d151d14e9b48557196ec0cc49 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 1/4] charon: add optional source and remote overrides for
Subject: [PATCH 1/3] charon: add optional source and remote overrides for
initiate
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
@@ -19,44 +19,42 @@ Signed-off-by: Timo Teräs <timo.teras@iki.fi>
src/charon-cmd/cmd/cmd_connection.c | 2 +-
src/charon-nm/nm/nm_service.c | 2 +-
src/conftest/actions.c | 2 +-
.../backend/android_service.c | 2 +-
src/frontends/osx/charon-xpc/xpc_dispatch.c | 1 +
src/libcharon/control/controller.c | 44 ++++++++++++-
src/libcharon/control/controller.c | 43 +++++++++++++-
src/libcharon/control/controller.h | 3 +
.../plugins/load_tester/load_tester_control.c | 1 +
.../plugins/load_tester/load_tester_plugin.c | 1 +
src/libcharon/plugins/medcli/medcli_config.c | 3 +-
src/libcharon/plugins/medcli/medcli_config.c | 2 +-
src/libcharon/plugins/smp/smp.c | 3 +-
src/libcharon/plugins/stroke/stroke_control.c | 5 +-
src/libcharon/plugins/uci/uci_control.c | 1 +
src/libcharon/plugins/uci/uci_control.c | 3 +-
src/libcharon/plugins/vici/vici_config.c | 2 +-
src/libcharon/plugins/vici/vici_control.c | 61 ++++++++++++++++---
src/libcharon/plugins/vici/vici_control.c | 59 +++++++++++++++++--
.../processing/jobs/initiate_mediation_job.c | 1 +
.../processing/jobs/start_action_job.c | 2 +-
src/libcharon/sa/ike_sa_manager.c | 49 ++++++++++++++-
src/libcharon/sa/ike_sa_manager.h | 8 ++-
src/libcharon/sa/trap_manager.c | 44 ++++++-------
src/swanctl/commands/initiate.c | 40 +++++++++++-
21 files changed, 227 insertions(+), 50 deletions(-)
src/libcharon/sa/trap_manager.c | 44 ++++++--------
src/swanctl/commands/initiate.c | 40 ++++++++++++-
21 files changed, 225 insertions(+), 50 deletions(-)
diff --git a/src/charon-cmd/cmd/cmd_connection.c b/src/charon-cmd/cmd/cmd_connection.c
index 0481d78d4..805d6f198 100644
index 2e2cb3ca2..b9369a8a2 100644
--- a/src/charon-cmd/cmd/cmd_connection.c
+++ b/src/charon-cmd/cmd/cmd_connection.c
@@ -438,7 +438,7 @@ static job_requeue_t initiate(private_cmd_connection_t *this)
@@ -439,7 +439,7 @@ static job_requeue_t initiate(private_cmd_connection_t *this)
child_cfg = create_child_cfg(this, peer_cfg);
if (charon->controller->initiate(charon->controller, peer_cfg, child_cfg,
- controller_cb_empty, NULL, 0, FALSE) != SUCCESS)
+ NULL, NULL, controller_cb_empty, NULL, 0, FALSE) != SUCCESS)
- controller_cb_empty, NULL, LEVEL_SILENT, 0, FALSE) != SUCCESS)
+ NULL, NULL, controller_cb_empty, NULL, LEVEL_SILENT, 0, FALSE) != SUCCESS)
{
terminate(pid);
}
diff --git a/src/charon-nm/nm/nm_service.c b/src/charon-nm/nm/nm_service.c
index 2d93b2fae..482170d76 100644
index 7f88514a7..4c3491984 100644
--- a/src/charon-nm/nm/nm_service.c
+++ b/src/charon-nm/nm/nm_service.c
@@ -883,7 +883,7 @@ static gboolean connect_(NMVpnServicePlugin *plugin, NMConnection *connection,
@@ -942,7 +942,7 @@ static gboolean connect_(NMVpnServicePlugin *plugin, NMConnection *connection,
* Prepare IKE_SA
*/
ike_sa = charon->ike_sa_manager->checkout_by_config(charon->ike_sa_manager,
@@ -66,20 +64,20 @@ index 2d93b2fae..482170d76 100644
if (!ike_sa)
{
diff --git a/src/conftest/actions.c b/src/conftest/actions.c
index 66e41f743..64ef8e9ee 100644
index b6b186117..21e329e3e 100644
--- a/src/conftest/actions.c
+++ b/src/conftest/actions.c
@@ -65,7 +65,7 @@ static job_requeue_t initiate(char *config)
@@ -66,7 +66,7 @@ static job_requeue_t initiate(char *config)
{
DBG1(DBG_CFG, "initiating IKE_SA for CHILD_SA config '%s'", config);
charon->controller->initiate(charon->controller, peer_cfg, child_cfg,
- NULL, NULL, 0, FALSE);
+ NULL, NULL, NULL, NULL, 0, FALSE);
- NULL, NULL, 0, 0, FALSE);
+ NULL, NULL, NULL, NULL, 0, 0, FALSE);
}
else
{
diff --git a/src/libcharon/control/controller.c b/src/libcharon/control/controller.c
index 46b065e3f..fbaff8730 100644
index 027f48e93..9109b20e4 100644
--- a/src/libcharon/control/controller.c
+++ b/src/libcharon/control/controller.c
@@ -15,6 +15,28 @@
@@ -111,7 +109,7 @@ index 46b065e3f..fbaff8730 100644
#include "controller.h"
#include <sys/types.h>
@@ -102,6 +124,16 @@ struct interface_listener_t {
@@ -107,6 +129,16 @@ struct interface_listener_t {
*/
ike_sa_t *ike_sa;
@@ -128,7 +126,7 @@ index 46b065e3f..fbaff8730 100644
/**
* unique ID, used for various methods
*/
@@ -414,10 +446,16 @@ METHOD(job_t, initiate_execute, job_requeue_t,
@@ -417,10 +449,16 @@ 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;
@@ -146,23 +144,15 @@ index 46b065e3f..fbaff8730 100644
if (!ike_sa)
{
DESTROY_IF(listener->child_cfg);
@@ -425,6 +463,7 @@ METHOD(job_t, initiate_execute, job_requeue_t,
listener_done(listener);
return JOB_REQUEUE_NONE;
}
+
listener->lock->lock(listener->lock);
listener->ike_sa = ike_sa;
listener->lock->unlock(listener->lock);
@@ -492,6 +531,7 @@ METHOD(job_t, initiate_execute, job_requeue_t,
@@ -499,6 +537,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,
+ host_t *my_host, host_t *other_host,
controller_cb_t callback, void *param, u_int timeout, bool limits)
controller_cb_t callback, void *param, level_t max_level, u_int timeout,
bool limits)
{
interface_job_t *job;
@@ -514,6 +554,8 @@ METHOD(controller_t, initiate, status_t,
@@ -523,6 +562,8 @@ METHOD(controller_t, initiate, status_t,
.status = FAILED,
.child_cfg = child_cfg,
.peer_cfg = peer_cfg,
@@ -172,10 +162,10 @@ index 46b065e3f..fbaff8730 100644
.options.limits = limits,
},
diff --git a/src/libcharon/control/controller.h b/src/libcharon/control/controller.h
index b4ccfced2..7a088b122 100644
index 36a1d4631..a130fbb6b 100644
--- a/src/libcharon/control/controller.h
+++ b/src/libcharon/control/controller.h
@@ -79,6 +79,8 @@ struct controller_t {
@@ -81,6 +81,8 @@ struct controller_t {
*
* @param peer_cfg peer_cfg to use for IKE_SA setup
* @param child_cfg optional child_cfg to set up CHILD_SA from
@@ -183,120 +173,121 @@ index b4ccfced2..7a088b122 100644
+ * @param other_host optional address hint for destination
* @param cb logging callback
* @param param parameter to include in each call of cb
* @param timeout timeout in ms to wait for callbacks, 0 to disable
@@ -92,6 +94,7 @@ struct controller_t {
* @param max_level maximum log level for which cb is invoked
@@ -95,6 +97,7 @@ struct controller_t {
*/
status_t (*initiate)(controller_t *this,
peer_cfg_t *peer_cfg, child_cfg_t *child_cfg,
+ host_t *my_host, host_t *other_host,
controller_cb_t callback, void *param, u_int timeout,
bool limits);
controller_cb_t callback, void *param,
level_t max_level, u_int timeout, bool limits);
diff --git a/src/libcharon/plugins/load_tester/load_tester_control.c b/src/libcharon/plugins/load_tester/load_tester_control.c
index 8e89ab435..9dfd415ca 100644
index b5356289a..ddef85b4a 100644
--- a/src/libcharon/plugins/load_tester/load_tester_control.c
+++ b/src/libcharon/plugins/load_tester/load_tester_control.c
@@ -239,6 +239,7 @@ static bool on_accept(private_load_tester_control_t *this, stream_t *io)
@@ -240,6 +240,7 @@ static bool on_accept(private_load_tester_control_t *this, stream_t *io)
switch (charon->controller->initiate(charon->controller,
peer_cfg, child_cfg->get_ref(child_cfg),
+ NULL, NULL,
(void*)initiate_cb, listener, 0, FALSE))
peer_cfg, child_cfg->get_ref(child_cfg),
+ NULL, NULL,
(void*)initiate_cb, listener, LEVEL_CTRL, 0, FALSE))
{
case NEED_MORE:
diff --git a/src/libcharon/plugins/load_tester/load_tester_plugin.c b/src/libcharon/plugins/load_tester/load_tester_plugin.c
index 961c10406..f59294d88 100644
index 695e75b83..e3f740281 100644
--- a/src/libcharon/plugins/load_tester/load_tester_plugin.c
+++ b/src/libcharon/plugins/load_tester/load_tester_plugin.c
@@ -151,6 +151,7 @@ static job_requeue_t do_load_test(private_load_tester_plugin_t *this)
@@ -152,6 +152,7 @@ static job_requeue_t do_load_test(private_load_tester_plugin_t *this)
charon->controller->initiate(charon->controller,
peer_cfg, child_cfg->get_ref(child_cfg),
+ NULL, NULL,
NULL, NULL, 0, FALSE);
NULL, NULL, 0, 0, FALSE);
if (s)
{
diff --git a/src/libcharon/plugins/medcli/medcli_config.c b/src/libcharon/plugins/medcli/medcli_config.c
index e88c11d3a..d4ce4f203 100644
index 3211a49f1..f98b3eac8 100644
--- a/src/libcharon/plugins/medcli/medcli_config.c
+++ b/src/libcharon/plugins/medcli/medcli_config.c
@@ -349,7 +349,8 @@ static job_requeue_t initiate_config(peer_cfg_t *peer_cfg)
@@ -350,7 +350,7 @@ static job_requeue_t initiate_config(peer_cfg_t *peer_cfg)
peer_cfg->get_ref(peer_cfg);
enumerator->destroy(enumerator);
charon->controller->initiate(charon->controller,
- peer_cfg, child_cfg, NULL, NULL, 0, FALSE);
+ peer_cfg, child_cfg, NULL, NULL,
+ NULL, NULL, 0, FALSE);
charon->controller->initiate(charon->controller, peer_cfg, child_cfg,
- NULL, NULL, 0, 0, FALSE);
+ NULL, NULL, NULL, NULL, 0, 0, FALSE);
}
else
{
diff --git a/src/libcharon/plugins/smp/smp.c b/src/libcharon/plugins/smp/smp.c
index 2953a603b..f028406fb 100644
index 91dddfeaa..1e9326822 100644
--- a/src/libcharon/plugins/smp/smp.c
+++ b/src/libcharon/plugins/smp/smp.c
@@ -493,7 +493,8 @@ static void request_control_initiate(xmlTextReaderPtr reader,
@@ -494,7 +494,8 @@ static void request_control_initiate(xmlTextReaderPtr reader,
if (child)
{
status = charon->controller->initiate(charon->controller,
- peer, child, (controller_cb_t)xml_callback,
+ peer, child, NULL, NULL,
+ (controller_cb_t)xml_callback,
writer, 0, FALSE);
writer, LEVEL_CTRL, 0, FALSE);
}
else
diff --git a/src/libcharon/plugins/stroke/stroke_control.c b/src/libcharon/plugins/stroke/stroke_control.c
index 8d84b934e..b00d0e62d 100644
index 2824c93cb..21ff6b31f 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
@@ -109,7 +109,7 @@ static void charon_initiate(private_stroke_control_t *this, peer_cfg_t *peer_cfg
if (msg->output_verbosity < 0)
{
charon->controller->initiate(charon->controller, peer_cfg, child_cfg,
- NULL, NULL, 0, FALSE);
+ NULL, NULL, NULL, NULL, 0, FALSE);
- NULL, NULL, 0, 0, FALSE);
+ NULL, NULL, NULL, NULL, 0, 0, FALSE);
}
else
{
@@ -116,7 +116,8 @@ static void charon_initiate(private_stroke_control_t *this, peer_cfg_t *peer_cfg
@@ -117,7 +117,8 @@ static void charon_initiate(private_stroke_control_t *this, peer_cfg_t *peer_cfg
status_t status;
status = charon->controller->initiate(charon->controller,
- peer_cfg, child_cfg, (controller_cb_t)stroke_log,
+ peer_cfg, child_cfg, NULL, NULL,
+ (controller_cb_t)stroke_log,
&info, this->timeout, FALSE);
&info, msg->output_verbosity, this->timeout, FALSE);
switch (status)
{
diff --git a/src/libcharon/plugins/uci/uci_control.c b/src/libcharon/plugins/uci/uci_control.c
index b6cfda082..115e0a82e 100644
index b033c832c..f8d1be745 100644
--- a/src/libcharon/plugins/uci/uci_control.c
+++ b/src/libcharon/plugins/uci/uci_control.c
@@ -147,6 +147,7 @@ static void initiate(private_uci_control_t *this, char *name)
@@ -147,7 +147,8 @@ static void initiate(private_uci_control_t *this, char *name)
enumerator = peer_cfg->create_child_cfg_enumerator(peer_cfg);
if (enumerator->enumerate(enumerator, &child_cfg) &&
charon->controller->initiate(charon->controller, peer_cfg,
child_cfg->get_ref(child_cfg),
+ NULL, NULL,
controller_cb_empty, NULL, 0, FALSE) == SUCCESS)
- child_cfg->get_ref(child_cfg), controller_cb_empty,
+ child_cfg->get_ref(child_cfg), NULL, NULL,
+ controller_cb_empty,
NULL, LEVEL_SILENT, 0, FALSE) == SUCCESS)
{
write_fifo(this, "connection '%s' established\n", name);
diff --git a/src/libcharon/plugins/vici/vici_config.c b/src/libcharon/plugins/vici/vici_config.c
index 2a4d58eab..0e9d24d11 100644
index 522122562..b1486e337 100644
--- a/src/libcharon/plugins/vici/vici_config.c
+++ b/src/libcharon/plugins/vici/vici_config.c
@@ -2149,7 +2149,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,
@@ -2252,7 +2252,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),
- NULL, NULL, 0, FALSE);
+ NULL, NULL, NULL, NULL, 0, FALSE);
break;
case ACTION_ROUTE:
DBG1(DBG_CFG, "installing '%s'", child_cfg->get_name(child_cfg));
- NULL, NULL, 0, 0, FALSE);
+ NULL, NULL, NULL, NULL, 0, 0, FALSE);
}
}
diff --git a/src/libcharon/plugins/vici/vici_control.c b/src/libcharon/plugins/vici/vici_control.c
index 4c09b578d..4c00c2be5 100644
index 1c236d249..b3a76efa2 100644
--- a/src/libcharon/plugins/vici/vici_control.c
+++ b/src/libcharon/plugins/vici/vici_control.c
@@ -16,6 +16,28 @@
@@ -15,6 +15,28 @@
* for more details.
*/
@@ -325,7 +316,7 @@ index 4c09b578d..4c00c2be5 100644
#include "vici_control.h"
#include "vici_builder.h"
@@ -174,9 +196,12 @@ static child_cfg_t* find_child_cfg(char *name, char *pname, peer_cfg_t **out)
@@ -173,9 +195,12 @@ static child_cfg_t* find_child_cfg(char *name, char *pname, peer_cfg_t **out)
CALLBACK(initiate, vici_message_t*,
private_vici_control_t *this, char *name, u_int id, vici_message_t *request)
{
@@ -338,7 +329,7 @@ index 4c09b578d..4c00c2be5 100644
int timeout;
bool limits;
controller_cb_t log_cb = NULL;
@@ -190,6 +215,8 @@ CALLBACK(initiate, vici_message_t*,
@@ -189,6 +214,8 @@ CALLBACK(initiate, vici_message_t*,
timeout = request->get_int(request, 0, "timeout");
limits = request->get_bool(request, FALSE, "init-limits");
log.level = request->get_int(request, 1, "loglevel");
@@ -347,7 +338,7 @@ index 4c09b578d..4c00c2be5 100644
if (!child && !ike)
{
@@ -203,28 +230,48 @@ CALLBACK(initiate, vici_message_t*,
@@ -202,28 +229,48 @@ CALLBACK(initiate, vici_message_t*,
type = child ? "CHILD_SA" : "IKE_SA";
sa = child ?: ike;
@@ -371,10 +362,9 @@ index 4c09b578d..4c00c2be5 100644
+ msg = send_reply(this, "%s config '%s' not found", type, sa);
+ goto ret;
}
switch (charon->controller->initiate(charon->controller, peer_cfg,
- child_cfg, log_cb, &log, timeout, limits))
+ child_cfg, my_host, other_host,
+ log_cb, &log, timeout, limits))
switch (charon->controller->initiate(charon->controller, peer_cfg, child_cfg,
+ my_host, other_host,
log_cb, &log, log.level, timeout, limits))
{
case SUCCESS:
- return send_reply(this, NULL);
@@ -402,37 +392,37 @@ index 4c09b578d..4c00c2be5 100644
+ return msg;
}
CALLBACK(terminate, vici_message_t*,
/**
diff --git a/src/libcharon/processing/jobs/initiate_mediation_job.c b/src/libcharon/processing/jobs/initiate_mediation_job.c
index 6a72499d3..eb0ad3846 100644
index ed493bc76..9a1cdcda4 100644
--- a/src/libcharon/processing/jobs/initiate_mediation_job.c
+++ b/src/libcharon/processing/jobs/initiate_mediation_job.c
@@ -137,6 +137,7 @@ METHOD(job_t, initiate, job_requeue_t,
@@ -138,6 +138,7 @@ METHOD(job_t, initiate, job_requeue_t,
mediation_cfg->get_ref(mediation_cfg);
if (charon->controller->initiate(charon->controller, mediation_cfg, NULL,
+ NULL, NULL,
(controller_cb_t)initiate_callback, this, 0, FALSE) != SUCCESS)
+ NULL, NULL,
(controller_cb_t)initiate_callback, this, LEVEL_CTRL,
0, FALSE) != SUCCESS)
{
mediation_cfg->destroy(mediation_cfg);
diff --git a/src/libcharon/processing/jobs/start_action_job.c b/src/libcharon/processing/jobs/start_action_job.c
index 3a0ed879f..e3399007b 100644
index 122e5cee9..dec458c84 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,
charon->controller->initiate(charon->controller,
peer_cfg->get_ref(peer_cfg),
child_cfg->get_ref(child_cfg),
- NULL, NULL, 0, FALSE);
+ NULL, NULL, NULL, NULL, 0, FALSE);
break;
case ACTION_ROUTE:
DBG1(DBG_JOB, "start action: route '%s'", name);
@@ -84,7 +84,7 @@ METHOD(job_t, execute, job_requeue_t,
charon->controller->initiate(charon->controller,
peer_cfg->get_ref(peer_cfg),
child_cfg->get_ref(child_cfg),
- NULL, NULL, 0, 0, FALSE);
+ NULL, NULL, NULL, NULL, 0, 0, FALSE);
}
}
children->destroy(children);
diff --git a/src/libcharon/sa/ike_sa_manager.c b/src/libcharon/sa/ike_sa_manager.c
index b6321cf16..a889b90ab 100644
index fc31c2a7c..0836b8c78 100644
--- a/src/libcharon/sa/ike_sa_manager.c
+++ b/src/libcharon/sa/ike_sa_manager.c
@@ -17,6 +17,28 @@
@@ -16,6 +16,28 @@
* for more details.
*/
@@ -461,7 +451,7 @@ index b6321cf16..a889b90ab 100644
#include <string.h>
#include <inttypes.h>
@@ -1485,7 +1507,8 @@ typedef struct {
@@ -1497,7 +1519,8 @@ typedef struct {
} config_entry_t;
METHOD(ike_sa_manager_t, checkout_by_config, ike_sa_t*,
@@ -471,7 +461,7 @@ index b6321cf16..a889b90ab 100644
{
enumerator_t *enumerator;
entry_t *entry;
@@ -1496,7 +1519,16 @@ METHOD(ike_sa_manager_t, checkout_by_config, ike_sa_t*,
@@ -1508,7 +1531,16 @@ METHOD(ike_sa_manager_t, checkout_by_config, ike_sa_t*,
u_int segment;
int i;
@@ -489,7 +479,7 @@ index b6321cf16..a889b90ab 100644
if (!this->reuse_ikesa && peer_cfg->get_ike_version(peer_cfg) != IKEV1)
{ /* IKE_SA reuse disabled by config (not possible for IKEv1) */
@@ -1554,6 +1586,15 @@ METHOD(ike_sa_manager_t, checkout_by_config, ike_sa_t*,
@@ -1566,6 +1598,15 @@ METHOD(ike_sa_manager_t, checkout_by_config, ike_sa_t*,
continue;
}
@@ -505,7 +495,7 @@ index b6321cf16..a889b90ab 100644
current_peer = entry->ike_sa->get_peer_cfg(entry->ike_sa);
if (current_peer && current_peer->equals(current_peer, peer_cfg))
{
@@ -1580,6 +1621,10 @@ METHOD(ike_sa_manager_t, checkout_by_config, ike_sa_t*,
@@ -1592,6 +1633,10 @@ METHOD(ike_sa_manager_t, checkout_by_config, ike_sa_t*,
{
ike_sa->set_peer_cfg(ike_sa, peer_cfg);
checkout_new(this, ike_sa);
@@ -517,10 +507,10 @@ index b6321cf16..a889b90ab 100644
}
charon->bus->set_sa(charon->bus, ike_sa);
diff --git a/src/libcharon/sa/ike_sa_manager.h b/src/libcharon/sa/ike_sa_manager.h
index 318620be0..f40eeb74e 100644
index 004cc2216..56ef869be 100644
--- a/src/libcharon/sa/ike_sa_manager.h
+++ b/src/libcharon/sa/ike_sa_manager.h
@@ -109,7 +109,8 @@ struct ike_sa_manager_t {
@@ -123,7 +123,8 @@ struct ike_sa_manager_t {
ike_sa_t* (*checkout_by_message) (ike_sa_manager_t* this, message_t *message);
/**
@@ -530,7 +520,7 @@ index 318620be0..f40eeb74e 100644
*
* To initiate, a CHILD_SA may be established within an existing IKE_SA.
* This call checks for an existing IKE_SA by comparing the configuration.
@@ -122,9 +123,12 @@ struct ike_sa_manager_t {
@@ -136,9 +137,12 @@ struct ike_sa_manager_t {
* @note The peer_config is always set on the returned IKE_SA.
*
* @param peer_cfg configuration used to find an existing IKE_SA
@@ -545,10 +535,10 @@ index 318620be0..f40eeb74e 100644
/**
* Reset initiator SPI.
diff --git a/src/libcharon/sa/trap_manager.c b/src/libcharon/sa/trap_manager.c
index f9f78acab..555e28ab6 100644
index d8d8a421a..f458ee0f1 100644
--- a/src/libcharon/sa/trap_manager.c
+++ b/src/libcharon/sa/trap_manager.c
@@ -432,7 +432,7 @@ METHOD(trap_manager_t, acquire, void,
@@ -523,7 +523,7 @@ METHOD(trap_manager_t, acquire, void,
peer_cfg_t *peer;
child_cfg_t *child;
ike_sa_t *ike_sa;
@@ -557,7 +547,7 @@ index f9f78acab..555e28ab6 100644
bool wildcard, ignore = FALSE;
this->lock->read_lock(this->lock);
@@ -508,36 +508,26 @@ METHOD(trap_manager_t, acquire, void,
@@ -600,36 +600,26 @@ METHOD(trap_manager_t, acquire, void,
this->lock->unlock(this->lock);
if (wildcard)
@@ -578,17 +568,17 @@ index f9f78acab..555e28ab6 100644
+ uint8_t mask;
- port = ike_cfg->get_other_port(ike_cfg);
- dst->to_subnet(dst, &host, &mask);
- data->dst->to_subnet(data->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);
- data->src->to_subnet(data->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);
+ data->dst->to_subnet(data->dst, &other_host, &mask);
+ other_host->set_port(other_host, port);
- charon->bus->set_sa(charon->bus, ike_sa);
@@ -599,7 +589,7 @@ index f9f78acab..555e28ab6 100644
- ike_sa = charon->ike_sa_manager->checkout_by_config(
- charon->ike_sa_manager, peer);
+ port = ike_cfg->get_my_port(ike_cfg);
+ src->to_subnet(src, &my_host, &mask);
+ data->src->to_subnet(data->src, &my_host, &mask);
+ my_host->set_port(my_host, port);
}
+ ike_sa = charon->ike_sa_manager->checkout_by_config(
@@ -611,10 +601,10 @@ index f9f78acab..555e28ab6 100644
if (ike_sa)
diff --git a/src/swanctl/commands/initiate.c b/src/swanctl/commands/initiate.c
index 8ade8bf41..03b2cb0f4 100644
index e0fffb907..dcaded59d 100644
--- a/src/swanctl/commands/initiate.c
+++ b/src/swanctl/commands/initiate.c
@@ -13,6 +13,28 @@
@@ -14,6 +14,28 @@
* for more details.
*/
@@ -643,7 +633,7 @@ index 8ade8bf41..03b2cb0f4 100644
#include "command.h"
#include <errno.h>
@@ -37,7 +59,7 @@ static int initiate(vici_conn_t *conn)
@@ -38,7 +60,7 @@ static int initiate(vici_conn_t *conn)
vici_req_t *req;
vici_res_t *res;
command_format_options_t format = COMMAND_FORMAT_NONE;
@@ -652,7 +642,7 @@ index 8ade8bf41..03b2cb0f4 100644
int ret = 0, timeout = 0, level = 1;
while (TRUE)
@@ -64,6 +86,12 @@ static int initiate(vici_conn_t *conn)
@@ -65,6 +87,12 @@ static int initiate(vici_conn_t *conn)
case 'l':
level = atoi(arg);
continue;
@@ -665,7 +655,7 @@ index 8ade8bf41..03b2cb0f4 100644
case EOF:
break;
default:
@@ -87,6 +115,14 @@ static int initiate(vici_conn_t *conn)
@@ -88,6 +116,14 @@ static int initiate(vici_conn_t *conn)
{
vici_add_key_valuef(req, "ike", "%s", ike);
}
@@ -680,7 +670,7 @@ index 8ade8bf41..03b2cb0f4 100644
if (timeout)
{
vici_add_key_valuef(req, "timeout", "%d", timeout * 1000);
@@ -133,6 +169,8 @@ static void __attribute__ ((constructor))reg()
@@ -134,6 +170,8 @@ static void __attribute__ ((constructor))reg()
{"help", 'h', 0, "show usage information"},
{"child", 'c', 1, "initiate a CHILD_SA configuration"},
{"ike", 'i', 1, "initiate an IKE_SA, or name of child's parent"},
@@ -690,5 +680,5 @@ index 8ade8bf41..03b2cb0f4 100644
{"raw", 'r', 0, "dump raw response message"},
{"pretty", 'P', 0, "dump raw response message in pretty print"},
--
2.31.1
2.41.0

View File

@@ -1,7 +1,7 @@
From e5589f7a7ddeac0de425783275d38327279eff4f Mon Sep 17 00:00:00 2001
From 0a1ee45f16f61cb68f526aeacd58ed275e7d8c48 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 2/4] vici: send certificates for ike-sa events
Subject: [PATCH 2/3] vici: send certificates for ike-sa events
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
@@ -12,10 +12,10 @@ Signed-off-by: Timo Teräs <timo.teras@iki.fi>
1 file changed, 42 insertions(+), 8 deletions(-)
diff --git a/src/libcharon/plugins/vici/vici_query.c b/src/libcharon/plugins/vici/vici_query.c
index fb65b1447..9a0dc1c8b 100644
index bacb7b101..19acc0789 100644
--- a/src/libcharon/plugins/vici/vici_query.c
+++ b/src/libcharon/plugins/vici/vici_query.c
@@ -379,7 +379,7 @@ static void list_vips(private_vici_query_t *this, vici_builder_t *b,
@@ -402,7 +402,7 @@ static void list_vips(private_vici_query_t *this, vici_builder_t *b,
* List details of an IKE_SA
*/
static void list_ike(private_vici_query_t *this, vici_builder_t *b,
@@ -24,7 +24,7 @@ index fb65b1447..9a0dc1c8b 100644
{
time_t t;
ike_sa_id_t *id;
@@ -388,6 +388,8 @@ static void list_ike(private_vici_query_t *this, vici_builder_t *b,
@@ -411,6 +411,8 @@ static void list_ike(private_vici_query_t *this, vici_builder_t *b,
uint32_t if_id;
uint16_t alg, ks;
host_t *host;
@@ -33,7 +33,7 @@ index fb65b1447..9a0dc1c8b 100644
b->add_kv(b, "uniqueid", "%u", ike_sa->get_unique_id(ike_sa));
b->add_kv(b, "version", "%u", ike_sa->get_version(ike_sa));
@@ -397,11 +399,43 @@ static void list_ike(private_vici_query_t *this, vici_builder_t *b,
@@ -420,11 +422,43 @@ static void list_ike(private_vici_query_t *this, vici_builder_t *b,
b->add_kv(b, "local-host", "%H", host);
b->add_kv(b, "local-port", "%d", host->get_port(host));
b->add_kv(b, "local-id", "%Y", ike_sa->get_my_id(ike_sa));
@@ -77,7 +77,7 @@ index fb65b1447..9a0dc1c8b 100644
eap = ike_sa->get_other_eap_id(ike_sa);
@@ -532,7 +566,7 @@ CALLBACK(list_sas, vici_message_t*,
@@ -556,7 +590,7 @@ CALLBACK(list_sas, vici_message_t*,
b = vici_builder_create();
b->begin_section(b, ike_sa->get_name(ike_sa));
@@ -86,7 +86,7 @@ index fb65b1447..9a0dc1c8b 100644
b->begin_section(b, "child-sas");
csas = ike_sa->create_child_sa_enumerator(ike_sa);
@@ -1719,7 +1753,7 @@ METHOD(listener_t, ike_updown, bool,
@@ -1774,7 +1808,7 @@ METHOD(listener_t, ike_updown, bool,
}
b->begin_section(b, ike_sa->get_name(ike_sa));
@@ -95,7 +95,7 @@ index fb65b1447..9a0dc1c8b 100644
b->end_section(b);
this->dispatcher->raise_event(this->dispatcher,
@@ -1744,10 +1778,10 @@ METHOD(listener_t, ike_rekey, bool,
@@ -1799,10 +1833,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 fb65b1447..9a0dc1c8b 100644
b->end_section(b);
b->end_section(b);
@@ -1778,7 +1812,7 @@ METHOD(listener_t, ike_update, bool,
@@ -1833,7 +1867,7 @@ METHOD(listener_t, ike_update, bool,
b->add_kv(b, "remote-port", "%d", remote->get_port(remote));
b->begin_section(b, ike_sa->get_name(ike_sa));
@@ -117,7 +117,7 @@ index fb65b1447..9a0dc1c8b 100644
b->end_section(b);
this->dispatcher->raise_event(this->dispatcher,
@@ -1808,7 +1842,7 @@ METHOD(listener_t, child_updown, bool,
@@ -1863,7 +1897,7 @@ METHOD(listener_t, child_updown, bool,
}
b->begin_section(b, ike_sa->get_name(ike_sa));
@@ -126,7 +126,7 @@ index fb65b1447..9a0dc1c8b 100644
b->begin_section(b, "child-sas");
snprintf(buf, sizeof(buf), "%s-%u", child_sa->get_name(child_sa),
@@ -1843,7 +1877,7 @@ METHOD(listener_t, child_rekey, bool,
@@ -1898,7 +1932,7 @@ METHOD(listener_t, child_rekey, bool,
b = vici_builder_create();
b->begin_section(b, ike_sa->get_name(ike_sa));
@@ -136,5 +136,5 @@ index fb65b1447..9a0dc1c8b 100644
b->begin_section(b, old->get_name(old));
--
2.31.1
2.41.0

View File

@@ -1,7 +1,7 @@
From faa75e58ec73dc70ba296a2ec534f2f87550c960 Mon Sep 17 00:00:00 2001
From 39f70df4d1846f9044c270fa8cb6149d42067736 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 3/4] vici: add support for individual sa state changes
Subject: [PATCH 3/3] 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, 106 insertions(+)
diff --git a/src/libcharon/plugins/vici/vici_query.c b/src/libcharon/plugins/vici/vici_query.c
index 9a0dc1c8b..b213ba432 100644
index 19acc0789..fa1aca953 100644
--- a/src/libcharon/plugins/vici/vici_query.c
+++ b/src/libcharon/plugins/vici/vici_query.c
@@ -1719,8 +1719,16 @@ static void manage_commands(private_vici_query_t *this, bool reg)
@@ -1774,8 +1774,16 @@ static void manage_commands(private_vici_query_t *this, bool reg)
this->dispatcher->manage_event(this->dispatcher, "ike-updown", reg);
this->dispatcher->manage_event(this->dispatcher, "ike-rekey", reg);
this->dispatcher->manage_event(this->dispatcher, "ike-update", reg);
@@ -34,7 +34,7 @@ index 9a0dc1c8b..b213ba432 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);
@@ -1821,6 +1829,46 @@ METHOD(listener_t, ike_update, bool,
@@ -1876,6 +1884,46 @@ METHOD(listener_t, ike_update, bool,
return TRUE;
}
@@ -81,7 +81,7 @@ index 9a0dc1c8b..b213ba432 100644
METHOD(listener_t, child_updown, bool,
private_vici_query_t *this, ike_sa_t *ike_sa, child_sa_t *child_sa, bool up)
{
@@ -1900,6 +1948,62 @@ METHOD(listener_t, child_rekey, bool,
@@ -1955,6 +2003,62 @@ METHOD(listener_t, child_rekey, bool,
return TRUE;
}
@@ -144,7 +144,7 @@ index 9a0dc1c8b..b213ba432 100644
METHOD(vici_query_t, destroy, void,
private_vici_query_t *this)
{
@@ -1920,8 +2024,10 @@ vici_query_t *vici_query_create(vici_dispatcher_t *dispatcher)
@@ -1975,8 +2079,10 @@ vici_query_t *vici_query_create(vici_dispatcher_t *dispatcher)
.ike_updown = _ike_updown,
.ike_rekey = _ike_rekey,
.ike_update = _ike_update,
@@ -156,5 +156,5 @@ index 9a0dc1c8b..b213ba432 100644
.destroy = _destroy,
},
--
2.31.1
2.41.0

View File

@@ -0,0 +1,258 @@
From 027c90f6808d451f3bbcd4b2dc4b8ad04806dc64 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zoran=20Peri=C4=8Di=C4=87?= <zoran.pericic@infomaas.com>
Date: Sun, 21 Jan 2024 03:11:32 +0100
Subject: [PATCH 4/4] Support GRE key in selectors.
---
.../kernel_netlink/kernel_netlink_ipsec.c | 12 +++++++++++
.../plugins/load_tester/load_tester_config.c | 16 ++++++++++++++
src/libcharon/plugins/stroke/stroke_config.c | 15 +++++++++++++
src/libcharon/plugins/vici/vici_config.c | 21 ++++++++++++++++++-
.../selectors/traffic_selector.c | 20 ++++++++++++++++++
.../selectors/traffic_selector.h | 12 +++++++++++
src/starter/confread.c | 18 ++++++++++++++++
7 files changed, 113 insertions(+), 1 deletion(-)
diff --git a/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c b/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c
index 7596f0c18..fdfc9d51e 100644
--- a/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c
+++ b/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c
@@ -864,6 +864,7 @@ static struct xfrm_selector ts2selector(traffic_selector_t *src,
{
struct xfrm_selector sel;
uint16_t port;
+ uint32_t gre_key;
memset(&sel, 0, sizeof(sel));
sel.family = (src->get_type(src) == TS_IPV4_ADDR_RANGE) ? AF_INET : AF_INET6;
@@ -884,6 +885,17 @@ static struct xfrm_selector ts2selector(traffic_selector_t *src,
sel.dport = htons(traffic_selector_icmp_code(port));
sel.dport_mask = sel.dport ? ~0 : 0;
}
+ if (sel.proto == IPPROTO_GRE)
+ {
+ /* the kernel expects the GRE key in the source and destination
+ * port fields, respectively. */
+ gre_key = htons(traffic_selector_gre_key(dst->get_from_port(dst), dst->get_to_port(dst)));
+ DBG2(DBG_KNL, "Policy GRE key: %d (%d-%d) %d", gre_key, dst->get_from_port(dst), dst->get_to_port(dst), traffic_selector_gre_key(dst->get_from_port(dst), dst->get_to_port(dst)));
+ sel.sport = gre_key >> 16;
+ sel.sport_mask = ~0;
+ sel.dport = gre_key & 0xffff;
+ sel.dport_mask = ~0;
+ }
sel.ifindex = interface ? if_nametoindex(interface) : 0;
sel.user = 0;
diff --git a/src/libcharon/plugins/load_tester/load_tester_config.c b/src/libcharon/plugins/load_tester/load_tester_config.c
index 58e1cd98a..436116361 100644
--- a/src/libcharon/plugins/load_tester/load_tester_config.c
+++ b/src/libcharon/plugins/load_tester/load_tester_config.c
@@ -16,6 +16,8 @@
#include "load_tester_config.h"
+#include <utils/utils.h>
+
#include <netdb.h>
#include <daemon.h>
@@ -512,6 +514,20 @@ static bool parse_protoport(char *token, uint16_t *from_port,
{
*from_port = *to_port = 0;
}
+ else if (*port && *protocol == IPPROTO_GRE)
+ {
+ p = strtol(port, &endptr, 0);
+ if (p < 0 || p > 0xffffffff)
+ {
+ return FALSE;
+ }
+ end->from_port = (p >> 16) & 0xffff;
+ end->to_port = p & 0xffff;
+ if (*endptr)
+ {
+ return FALSE;
+ }
+ }
else if (*port)
{
svc = getservbyname(port, NULL);
diff --git a/src/libcharon/plugins/stroke/stroke_config.c b/src/libcharon/plugins/stroke/stroke_config.c
index 55db379ff..9ee4c6463 100644
--- a/src/libcharon/plugins/stroke/stroke_config.c
+++ b/src/libcharon/plugins/stroke/stroke_config.c
@@ -20,6 +20,7 @@
#include <daemon.h>
#include <threading/mutex.h>
#include <utils/lexparser.h>
+#include <utils/utils.h>
#include <netdb.h>
@@ -937,6 +938,20 @@ 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);
+ if (p < 0 || p > 0xffffffff)
+ {
+ return FALSE;
+ }
+ *from_port = (p >> 16) & 0xffff;
+ *to_port = p & 0xffff;
+ if (*endptr)
+ {
+ return FALSE;
+ }
+ }
else if (*port)
{
svc = getservbyname(port, NULL);
diff --git a/src/libcharon/plugins/vici/vici_config.c b/src/libcharon/plugins/vici/vici_config.c
index b1486e337..35c4df1b0 100644
--- a/src/libcharon/plugins/vici/vici_config.c
+++ b/src/libcharon/plugins/vici/vici_config.c
@@ -718,7 +718,25 @@ CALLBACK(parse_ts, bool,
from = 0xffff;
to = 0;
}
- else if (*port && !streq(port, "any"))
+ else if (*port && !streq(port, "any") && proto == IPPROTO_GRE)
+ {
+ DBG2(DBG_CFG, " GRE key %s", port);
+ p = strtol(port, &end, 0);
+ if (p < 0 || p > 0xffffffff)
+ {
+ DBG2(DBG_CFG, " Invalid GRE key %s", port);
+ return FALSE;
+ }
+ from = (p >> 16) & 0xffff;
+ to = p & 0xffff;
+ DBG2(DBG_CFG, " Parsed GRE key %d-%d(%d)", from, to, p);
+ if (*end)
+ {
+ DBG2(DBG_CFG, " Invalid GRE key %s", port);
+ return FALSE;
+ }
+ }
+ else if (*port && !streq(port, "any") && proto != IPPROTO_GRE)
{
svc = getservbyname(port, NULL);
if (svc)
@@ -752,6 +770,7 @@ CALLBACK(parse_ts, bool,
}
if (streq(buf, "dynamic"))
{
+ DBG2(DBG_CFG, " Create dynamic selector GRE key proto=%d, from_port=%d, to_port=%d", proto, from, to);
ts = traffic_selector_create_dynamic(proto, from, to);
}
else if (strchr(buf, '-'))
diff --git a/src/libstrongswan/selectors/traffic_selector.c b/src/libstrongswan/selectors/traffic_selector.c
index fe61e3768..29ffbffbd 100644
--- a/src/libstrongswan/selectors/traffic_selector.c
+++ b/src/libstrongswan/selectors/traffic_selector.c
@@ -205,6 +205,18 @@ 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_gre(printf_hook_data_t *data, uint16_t from_port, uint16_t to_port)
+{
+ uint32_t gre_key;
+
+ gre_key = traffic_selector_gre_key(from_port, to_port);
+
+ return print_in_hook(data, "%d", gre_key);
+}
+
/**
* Described in header.
*/
@@ -319,6 +331,10 @@ int traffic_selector_printf_hook(printf_hook_data_t *data,
{
written += print_icmp(data, this->from_port);
}
+ else if (this->protocol == IPPROTO_GRE)
+ {
+ written += print_gre(data, this->from_port, this->to_port);
+ }
else
{
serv = getservbyport(htons(this->from_port), serv_proto);
@@ -343,6 +359,10 @@ int traffic_selector_printf_hook(printf_hook_data_t *data,
written += print_in_hook(data, "-");
written += print_icmp(data, this->to_port);
}
+ else if (this->protocol == IPPROTO_GRE)
+ {
+ written += print_gre(data, this->from_port, this->to_port);
+ }
else
{
written += print_in_hook(data, "%d-%d",
diff --git a/src/libstrongswan/selectors/traffic_selector.h b/src/libstrongswan/selectors/traffic_selector.h
index 367b4fff9..b7010e4a7 100644
--- a/src/libstrongswan/selectors/traffic_selector.h
+++ b/src/libstrongswan/selectors/traffic_selector.h
@@ -272,6 +272,18 @@ static inline uint8_t traffic_selector_icmp_code(uint16_t port)
return port & 0xff;
}
+/**
+ * Extract the GRE key from a source and destination port in host order
+ *
+ * @param from_port port number in host order
+ * @param to_port port number in host order
+ * @return GRE key
+ */
+static inline uint8_t traffic_selector_gre_key(uint16_t from_port, uint16_t to_port)
+{
+ return (from_port & 0xffff) << 16 | (to_port & 0xffff);
+}
+
/**
* Compare two traffic selectors, usable as sort function
*
diff --git a/src/starter/confread.c b/src/starter/confread.c
index 5065bc369..e2c03694d 100644
--- a/src/starter/confread.c
+++ b/src/starter/confread.c
@@ -25,6 +25,7 @@
#include <library.h>
#include <utils/debug.h>
+#include <utils/utils.h>
#include "keywords.h"
#include "confread.h"
@@ -335,6 +336,23 @@ static void kw_end(starter_conn_t *conn, starter_end_t *end, kw_token_t token,
end->from_port = 0xffff;
end->to_port = 0;
}
+ else if (*port && end->protocol == IPPROTO_GRE)
+ {
+ DBG1(DBG_APP, "# GRE key: %s=%s", key, port);
+ p = strtol(port, &endptr, 0);
+ if (p < 0 || p > 0xffffffff)
+ {
+ DBG1(DBG_APP, "# bad GRE key: %s=%s", key, port);
+ goto err;
+ }
+ end->from_port = (p >> 16) & 0xffff;
+ end->to_port = p & 0xffff;
+ if (*endptr)
+ {
+ DBG1(DBG_APP, "# bad GRE key: %s=%s", key, port);
+ goto err;
+ }
+ }
else if (*port)
{
svc = getservbyname(port, NULL);
--
2.43.0

View File

@@ -1,124 +0,0 @@
From 1057ecaa416c81b0e3fd4b26e1c8c301d1749ecb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zoran=20Peri=C4=8Di=C4=87?= <zpericic@netst.org>
Date: Wed, 22 Jan 2020 13:12:39 +0100
Subject: [PATCH 4/4] vyos-terminate-connections-source-dest
---
src/libcharon/plugins/vici/vici_control.c | 27 ++++++++++++++++++++---
src/swanctl/commands/terminate.c | 18 ++++++++++++++-
2 files changed, 41 insertions(+), 4 deletions(-)
diff --git a/src/libcharon/plugins/vici/vici_control.c b/src/libcharon/plugins/vici/vici_control.c
index 4c00c2be5..8936e93ae 100644
--- a/src/libcharon/plugins/vici/vici_control.c
+++ b/src/libcharon/plugins/vici/vici_control.c
@@ -278,12 +278,13 @@ CALLBACK(terminate, vici_message_t*,
private_vici_control_t *this, char *name, u_int id, vici_message_t *request)
{
enumerator_t *enumerator, *isas, *csas;
- char *child, *ike, *errmsg = NULL;
+ char *child, *ike, *errmsg = NULL, *my_host_str, *other_host_str;
u_int child_id, ike_id, current, *del, done = 0;
bool force;
int timeout;
ike_sa_t *ike_sa;
child_sa_t *child_sa;
+ host_t *my_host = NULL, *other_host = NULL;
array_t *ids;
vici_builder_t *builder;
controller_cb_t log_cb = NULL;
@@ -299,12 +300,23 @@ CALLBACK(terminate, vici_message_t*,
force = request->get_bool(request, FALSE, "force");
timeout = request->get_int(request, 0, "timeout");
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");
- if (!child && !ike && !ike_id && !child_id)
+ if (!child && !ike && !ike_id && !child_id && !my_host_str &&!other_host_str)
{
return send_reply(this, "missing terminate selector");
}
-
+ if (my_host_str && !other_host_str || other_host_str && !my_host_str)
+ {
+ return send_reply(this, "missing source or remote");
+ }
+ else
+ {
+ my_host = host_create_from_string(my_host_str, 0);
+ other_host = host_create_from_string(other_host_str, 0);
+ DBG1(DBG_CFG, "vici terminate with source me %H and other %H", my_host, other_host);
+ }
if (ike_id)
{
DBG1(DBG_CFG, "vici terminate IKE_SA #%d", ike_id);
@@ -367,6 +379,15 @@ CALLBACK(terminate, vici_message_t*,
{
array_insert(ids, ARRAY_TAIL, &ike_id);
}
+ else if (my_host && other_host)
+ {
+ if (!my_host->ip_equals(my_host, ike_sa->get_my_host(ike_sa)) || !other_host->ip_equals(other_host, ike_sa->get_other_host(ike_sa)))
+ {
+ continue;
+ }
+ current = ike_sa->get_unique_id(ike_sa);
+ array_insert(ids, ARRAY_TAIL, &current);
+ }
}
isas->destroy(isas);
diff --git a/src/swanctl/commands/terminate.c b/src/swanctl/commands/terminate.c
index 2309843b2..37d0bde3f 100644
--- a/src/swanctl/commands/terminate.c
+++ b/src/swanctl/commands/terminate.c
@@ -37,7 +37,7 @@ static int terminate(vici_conn_t *conn)
vici_req_t *req;
vici_res_t *res;
command_format_options_t format = COMMAND_FORMAT_NONE;
- char *arg, *child = NULL, *ike = NULL;
+ char *arg, *child = NULL, *ike = NULL, *my_host = NULL, *other_host = NULL;
int ret = 0, timeout = 0, level = 1, child_id = 0, ike_id = 0;
bool force = FALSE;
@@ -74,6 +74,12 @@ static int terminate(vici_conn_t *conn)
case 'l':
level = atoi(arg);
continue;
+ case 'S':
+ my_host = arg;
+ continue;
+ case 'R':
+ other_host = arg;
+ continue;
case EOF:
break;
default:
@@ -109,6 +115,14 @@ static int terminate(vici_conn_t *conn)
{
vici_add_key_valuef(req, "force", "yes");
}
+ if (my_host)
+ {
+ vici_add_key_valuef(req, "my-host", "%s", my_host);
+ }
+ if (other_host)
+ {
+ vici_add_key_valuef(req, "other-host", "%s", other_host);
+ }
if (timeout)
{
vici_add_key_valuef(req, "timeout", "%d", timeout * 1000);
@@ -155,6 +169,8 @@ static void __attribute__ ((constructor))reg()
{
{"help", 'h', 0, "show usage information"},
{"child", 'c', 1, "terminate by CHILD_SA name"},
+ {"source", 'S', 1, "override source address"},
+ {"remote", 'R', 1, "override remote address"},
{"ike", 'i', 1, "terminate by IKE_SA name"},
{"child-id", 'C', 1, "terminate by CHILD_SA reqid"},
{"ike-id", 'I', 1, "terminate by IKE_SA unique identifier"},
--
2.31.1

View File

@@ -0,0 +1,48 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=ze82
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -1 +1,2 @@
SHA512 (strongswan-5.9.3.tar.bz2) = 09bd78225415422c8f55c9f0dea2ca70111f42f0deacfaaac30c422109ff64180f6a6a47c6bc54238e8403f0b2f8520122c1eabbeda3f915427fadb838a5df51
SHA512 (strongswan-5.9.11.tar.bz2) = d500523215f5ec5c5550c4d2c49060b350ae396d8c60170792c46775d04fc7a132aa70a6242145477753668351d26ed957e08903683ecc340aa8d84fb2ae5498
SHA512 (strongswan-5.9.11.tar.bz2.sig) = a434dc338641c808d3461de17c893a0d3b761cdba6cea5db0551fc75df498cfae26db379a86fd2a0a0e7710676a1cd657c01da435054a6814ec4ce6099db2b68

View File

@@ -1,15 +0,0 @@
diff -Naur strongswan-5.6.2-orig/src/libcharon/plugins/stroke/stroke_socket.c strongswan-5.6.2/src/libcharon/plugins/stroke/stroke_socket.c
--- strongswan-5.6.2-orig/src/libcharon/plugins/stroke/stroke_socket.c 2017-11-09 10:57:30.000000000 -0500
+++ strongswan-5.6.2/src/libcharon/plugins/stroke/stroke_socket.c 2018-05-24 00:00:32.382953618 -0400
@@ -628,6 +628,11 @@
return FALSE;
}
+ if (len < offsetof(stroke_msg_t, buffer))
+ {
+ DBG1(DBG_CFG, "invalid stroke message length %d", len);
+ return FALSE;
+ }
/* read message (we need an additional byte to terminate the buffer) */
msg = malloc(len + 1);
msg->length = len;

View File

@@ -1,24 +0,0 @@
diff -ur strongswan-5.8.4.orig/init/systemd/strongswan.service.in strongswan-5.8.4/init/systemd/strongswan.service.in
--- strongswan-5.8.4.orig/init/systemd/strongswan.service.in 2019-08-27 16:26:53.000000000 +0300
+++ strongswan-5.8.4/init/systemd/strongswan.service.in 2020-04-12 12:05:57.383596844 +0300
@@ -9,6 +9,8 @@
ExecReload=@SBINDIR@/swanctl --reload
ExecReload=@SBINDIR@/swanctl --load-all --noprompt
Restart=on-abnormal
+RuntimeDirectory=strongswan
+RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
diff -ur strongswan-5.8.4.orig/init/systemd-starter/strongswan-starter.service.in strongswan-5.8.4/init/systemd-starter/strongswan-starter.service.in
--- strongswan-5.8.4.orig/init/systemd-starter/strongswan-starter.service.in 2019-08-27 16:26:53.000000000 +0300
+++ strongswan-5.8.4/init/systemd-starter/strongswan-starter.service.in 2020-04-12 12:05:51.810559482 +0300
@@ -6,6 +6,8 @@
ExecStart=@SBINDIR@/@IPSEC_SCRIPT@ start --nofork
StandardOutput=syslog
Restart=on-abnormal
+RuntimeDirectory=strongswan
+RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target

View File

@@ -1,12 +0,0 @@
diff -Naur strongswan-5.9.1-orig/init/systemd-starter/strongswan-starter.service.in strongswan-5.9.1/init/systemd-starter/strongswan-starter.service.in
--- strongswan-5.9.1-orig/init/systemd-starter/strongswan-starter.service.in 2020-10-16 08:36:37.000000000 -0400
+++ strongswan-5.9.1/init/systemd-starter/strongswan-starter.service.in 2021-02-12 14:06:09.985042362 -0500
@@ -5,6 +5,8 @@
[Service]
ExecStart=@SBINDIR@/@IPSEC_SCRIPT@ start --nofork
Restart=on-abnormal
+RuntimeDirectory=strongswan
+RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,12 @@
diff --git a/configure.ac b/configure.ac
index f9e6e55c2..247d055d8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1480,7 +1480,6 @@ else
fi
# disable some warnings, whether explicitly enabled above or by default
# these are not compatible with our custom printf specifiers
-WARN_CFLAGS="$WARN_CFLAGS -Wno-format"
WARN_CFLAGS="$WARN_CFLAGS -Wno-format-security"
# we generally use comments, but GCC doesn't seem to recognize many of them
WARN_CFLAGS="$WARN_CFLAGS -Wno-implicit-fallthrough"

View File

@@ -1,44 +1,77 @@
%global _hardened_build 1
#%%define prerelease dr1
%global dist .nhrp.9%{?dist}
%global dist .nhrp.11%{?dist}
%bcond_without python3
%bcond_without perl
%bcond_with check
%if (0%{?fedora} && 0%{?fedora} < 36) || (0%{?rhel} && 0%{?rhel} < 9)
# trousers was retired for F36+ and no longer available in RHEL with 9+
%bcond_without tss_trousers
%else
%bcond_with tss_trousers
%endif
%global forgeurl0 https://github.com/strongswan/strongswan
Name: strongswan
Version: 5.9.3
Release: 1%{?dist}
Version: 5.9.11
Release: 3%{?dist}
Summary: An OpenSource IPsec-based VPN and TNC solution
License: GPLv2+
URL: http://www.strongswan.org/
Source0: http://download.strongswan.org/%{name}-%{version}%{?prerelease}.tar.bz2
Source1: tmpfiles-strongswan.conf
Patch0: strongswan-5.9.1-runtime-dir.patch
Patch1: strongswan-5.6.0-uintptr_t.patch
Patch3: strongswan-5.6.2-CVE-2018-5388.patch
URL: https://www.strongswan.org/
VCS: git:%{forgeurl0}
Source0: https://download.strongswan.org/strongswan-%{version}%{?prerelease}.tar.bz2
Source1: https://download.strongswan.org/strongswan-%{version}%{?prerelease}.tar.bz2.sig
Source2: https://download.strongswan.org/STRONGSWAN-RELEASE-PGP-KEY
Source3: tmpfiles-strongswan.conf
Patch0: strongswan-5.6.0-uintptr_t.patch
# https://github.com/strongswan/strongswan/issues/1198
Patch1: strongswan-5.9.7-error-no-format.patch
Patch10: 0001-charon-add-optional-source-and-remote-overrides-for-.patch
Patch11: 0002-vici-send-certificates-for-ike-sa-events.patch
Patch12: 0003-vici-add-support-for-individual-sa-state-changes.patch
Patch13: 0004-vyos-terminate-connections-source-dest.patch
Patch13: 0004-Support-GRE-key-in-selectors.patch
# only needed for pre-release versions
#BuildRequires: autoconf automake
BuildRequires: make
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: gnupg2
BuildRequires: make
BuildRequires: gcc
BuildRequires: systemd
BuildRequires: systemd-devel
BuildRequires: systemd-rpm-macros
BuildRequires: gmp-devel
BuildRequires: libcurl-devel
BuildRequires: openldap-devel
BuildRequires: openssl-devel
BuildRequires: sqlite-devel
BuildRequires: gettext-devel
BuildRequires: trousers-devel
BuildRequires: libxml2-devel
BuildRequires: pam-devel
BuildRequires: json-c-devel
BuildRequires: libgcrypt-devel
BuildRequires: systemd-devel
BuildRequires: iptables-devel
BuildRequires: libcap-devel
BuildRequires: tpm2-tss-devel
Recommends: tpm2-tools
%if %{with python3}
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-pytest
%endif
%if %{with perl}
BuildRequires: perl-devel perl-generators
BuildRequires: perl(ExtUtils::MakeMaker)
%endif
%if %{with tss_trousers}
BuildRequires: trousers-devel
%endif
BuildRequires: NetworkManager-libnm-devel
Requires(post): systemd
@@ -59,8 +92,8 @@ in userland, using TUN devices and its own IPsec implementation libipsec.
%package charon-nm
Summary: NetworkManager plugin for Strongswan
Requires: dbus
Obsoletes: %{name}-NetworkManager < 0:5.0.4-5
Conflicts: %{name}-NetworkManager < 0:5.0.4-5
Obsoletes: strongswan-NetworkManager < 0:5.0.4-5
Conflicts: strongswan-NetworkManager < 0:5.0.4-5
Conflicts: NetworkManager-strongswan < 1.4.2-1
%description charon-nm
NetworkManager plugin integrates a subset of Strongswan capabilities
@@ -68,14 +101,14 @@ to NetworkManager.
%package sqlite
Summary: SQLite support for strongSwan
Requires: %{name} = %{version}-%{release}
Requires: strongswan = %{version}-%{release}
%description sqlite
The sqlite plugin adds an SQLite database backend to strongSwan.
%package tnc-imcvs
Summary: Trusted network connect (TNC)'s IMC/IMV functionality
Requires: %{name} = %{version}-%{release}
Requires: %{name}-sqlite = %{version}-%{release}
Requires: strongswan = %{version}-%{release}
Requires: strongswan-sqlite = %{version}-%{release}
%description tnc-imcvs
This package provides Trusted Network Connect's (TNC) architecture support.
It includes support for TNC client and server (IF-TNCCS), IMC and IMV message
@@ -86,16 +119,39 @@ modules can be used by any third party TNC Client/Server implementation
possessing a standard IF-IMC/IMV interface. In addition, it implements
PT-TLS to support TNC over TLS.
%prep
%setup -q -n %{name}-%{version}%{?prerelease}
%patch0 -p1
%patch1 -p1
%patch3 -p1
%if %{with python3}
%package -n python3-vici
Summary: Strongswan Versatile IKE Configuration Interface python bindings
BuildArch: noarch
%description -n python3-vici
VICI is an attempt to improve the situation for system integrators by providing
a stable IPC interface, allowing external tools to query, configure
and control the IKE daemon.
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
The Versatile IKE Configuration Interface (VICI) python bindings provides module
for Strongswan runtime configuration from python applications.
%endif
%if %{with perl}
%package -n perl-vici
Summary: Strongswan Versatile IKE Configuration Interface perl bindings
BuildArch: noarch
%description -n perl-vici
VICI is an attempt to improve the situation for system integrators by providing
a stable IPC interface, allowing external tools to query, configure
and control the IKE daemon.
The Versatile IKE Configuration Interface (VICI) perl bindings provides module
for Strongswan runtime configuration from perl applications.
%endif
# TODO: make also ruby-vici
%prep
%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
%autosetup -n %{name}-%{version}%{?prerelease} -p1
%build
# only for snapshots
@@ -114,7 +170,7 @@ PT-TLS to support TNC over TLS.
--with-piddir=%{_rundir}/strongswan \
--with-nm-ca-dir=%{_sysconfdir}/strongswan/ipsec.d/cacerts/ \
--enable-bypass-lan \
--enable-tss-trousers \
--enable-tss-tss2 \
--enable-nm \
--enable-systemd \
--enable-openssl \
@@ -169,8 +225,6 @@ PT-TLS to support TNC over TLS.
--enable-imv-attestation \
--enable-imv-os \
--enable-imc-os \
--enable-imc-swid \
--enable-imv-swid \
--enable-imc-swima \
--enable-imv-swima \
--enable-imc-hcd \
@@ -178,26 +232,77 @@ PT-TLS to support TNC over TLS.
--enable-curl \
--enable-cmd \
--enable-acert \
--enable-aikgen \
--enable-vici \
--enable-swanctl \
--enable-duplicheck \
%ifarch x86_64 %{ix86}
--enable-aesni \
%endif
%if %{with python3}
PYTHON=%{python3} --enable-python-eggs \
%endif
%if %{with perl}
--enable-perl-cpan \
%endif
%if %{with check}
--enable-test-vectors \
%endif
%if %{with tss_trousers}
--enable-tss-trousers \
--enable-aikgen \
%endif
--enable-kernel-libipsec \
--with-capabilities=libcap \
CPPFLAGS="-DSTARTER_ALLOW_NON_ROOT"
# TODO: --enable-python-eggs-install not python3 ready
# disable certain plugins in the daemon configuration by default
for p in bypass-lan; do
echo -e "\ncharon.plugins.${p}.load := no" >> conf/plugins/${p}.opt
done
make %{?_smp_mflags}
# ensure manual page is regenerated with local configuration
rm -f src/ipsec/_ipsec.8
%make_build
pushd src/libcharon/plugins/vici
%if %{with python3}
pushd python
%make_build
sed -e "s,/var/run/charon.vici,%{_rundir}/strongswan/charon.vici," -i vici/session.py
#py3_build
popd
%endif
%if %{with perl}
pushd perl/Vici-Session/
perl Makefile.PL INSTALLDIRS=vendor
%make_build
popd
%endif
popd
%install
make install DESTDIR=%{buildroot}
%make_install
pushd src/libcharon/plugins/vici
%if %{with python3}
pushd python
# TODO: --enable-python-eggs breaks our previous build. Do it now
# propose better way to upstream
%py3_build
%py3_install
popd
%endif
%if %{with perl}
%make_install -C perl/Vici-Session
rm -f %{buildroot}{%{perl_archlib}/perllocal.pod,%{perl_vendorarch}/auto/Vici/Session/.packlist}
%endif
popd
# prefix man pages
for i in %{buildroot}%{_mandir}/*/*; do
if echo "$i" | grep -vq '/strongswan[^\/]*$'; then
@@ -216,16 +321,31 @@ 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
install -D -m 0644 %{SOURCE1} %{buildroot}/%{_tmpfilesdir}/strongswan.conf
install -D -m 0644 %{SOURCE3} %{buildroot}/%{_tmpfilesdir}/strongswan.conf
install -D -m 0644 %{SOURCE3} %{buildroot}/%{_tmpfilesdir}/strongswan-starter.conf
%check
%if %{with check}
# Seen some tests hang. Ensure we do not block builder forever
export TESTS_VERBOSITY=1
timeout 600 %make_build check
%endif
%if %{with python}
pushd src/libcharon/plugins/vici
%pytest
popd
%endif
:
%post
%systemd_post %{name}.service
%systemd_post strongswan.service strongswan-starter.service
%preun
%systemd_preun %{name}.service
%systemd_preun strongswan.service strongswan-starter.service
%postun
%systemd_postun_with_restart %{name}.service
%systemd_postun_with_restart strongswan.service strongswan-starter.service
%files
%doc README NEWS TODO ChangeLog
@@ -260,6 +380,7 @@ install -D -m 0644 %{SOURCE1} %{buildroot}/%{_tmpfilesdir}/strongswan.conf
%{_datadir}/strongswan/templates/database/
%attr(0755,root,root) %dir %{_rundir}/strongswan
%attr(0644,root,root) %{_tmpfilesdir}/strongswan.conf
%attr(0644,root,root) %{_tmpfilesdir}/strongswan-starter.conf
%files sqlite
%{_libdir}/strongswan/plugins/libstrongswan-sqlite.so
@@ -286,7 +407,105 @@ install -D -m 0644 %{SOURCE1} %{buildroot}/%{_tmpfilesdir}/strongswan.conf
%{_datadir}/dbus-1/system.d/nm-strongswan-service.conf
%{_libexecdir}/strongswan/charon-nm
%if %{with python3}
%files -n python3-vici
%license COPYING
%doc src/libcharon/plugins/vici/python/README.rst
%{python3_sitelib}/vici
%{python3_sitelib}/vici-%{version}-py*.egg-info
%endif
%if %{with perl}
%license COPYING
%files -n perl-vici
%{perl_vendorlib}/Vici
%endif
%changelog
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.9.11-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sat Jul 22 2023 Fedora Release Engineering <releng@fedoraproject.org> - 5.9.11-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Fri Jul 14 2023 Paul Wouters <paul.wouters@aiven.io - 5.9.11-1
- Resolves: rhbz#2214186 strongswan-5.9.11 is available
* Tue Jun 13 2023 Python Maint <python-maint@redhat.com> - 5.9.10-2
- Rebuilt for Python 3.12
* Thu Mar 02 2023 Paul Wouters <paul.wouters@aiven.io - 5.9.10-1
- Update to 5.9.10
* Tue Feb 28 2023 Paul Wouters <paul.wouters@aiven.io - 5.9.9-3
- Resolves: CVE-2023-26463 authorization bypass in TLS-based EAP methods
* Mon Jan 16 2023 Petr Menšík <pemensik@redhat.com> - 5.9.9-2
- Use configure paths in manual pages (#2106120)
* Sun Jan 15 2023 Petr Menšík <pemensik@redhat.com> - 5.9.9-1
- Update to 5.9.9 (#2157850)
* Thu Dec 08 2022 Jitka Plesnikova <jplesnik@redhat.com> - 5.9.8-2
- Add BR perl-generators to automatically generates run-time dependencies
for installed Perl files
* Sun Oct 16 2022 Arne Reiter <redhat@arnereiter.de> - 5.9.8-1
- Resolves rhbz#2112274 strongswan-5.9.8 is available
- Patch1 removes CFLAGS -Wno-format which interferes with -Werror=format-security
- Add BuildRequire for autoconf and automake, now required for release
- Remove obsolete patches
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 5.9.6-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Wed Jun 22 2022 Arne Reiter <redhat@arnereiter.de> - 5.9.6-1
- Resolves rhbz#2080070 strongswan-5.9.6 is available
- Fixed missing format string in enum_flags_to_string()
* Mon Jun 13 2022 Python Maint <python-maint@redhat.com> - 5.9.5-4
- Rebuilt for Python 3.11
* Fri Feb 25 2022 Arne Reiter <redhat@arnereiter.de> - 5.9.5-3
- Resolves: rhbz#2048108 - segfault at 18 ip 00007f4c7c0d841c sp 00007ffe49f61b70 error 4 in libc.so.6
* Tue Jan 25 2022 Paul Wouters <paul.wouters@aiven.io> - 5.9.5-2
- Use newly published/cleaned strongswan gpg key
* Mon Jan 24 2022 Paul Wouters <paul.wouters@aiven.io> - 5.9.5-1
- Resolves rhbz#2044361 strongswan-5.9.5 is available (CVE-2021-45079)
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 5.9.4-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Thu Dec 16 2021 Neal Gompa <ngompa@datto.com> - 5.9.4-4
- Disable TPM/TSS 1.2 support for F36+ / RHEL9+
- Resolves: rhbz#2033299 Drop TPM/TSS 1.2 support (trousers)
* Thu Nov 11 2021 Petr Menšík <pemensik@redhat.com> - 5.9.4-3
- Resolves rhbz#1419441 Add python and perl vici bindings
- Adds optional tests run
* Tue Nov 09 2021 Paul Wouters <paul.wouters@aiven.io> - 5.9.4-2
- Resolves rhbz#2018547 'strongswan restart' breaks ipsec started with strongswan-starter
- Return to using tmpfiles, but extend to cover strongswan-starter service too
- Cleanup old patches
* Wed Oct 20 2021 Paul Wouters <paul.wouters@aiven.io> - 5.9.4-1
- Resolves: rhbz#2015165 strongswan-5.9.4 is available
- Resolves: rhbz#2015611 CVE-2021-41990 strongswan: gmp plugin: integer overflow via a crafted certificate with an RSASSA-PSS signature
- Resolves: rhbz#2015614 CVE-2021-41991 strongswan: integer overflow when replacing certificates in cache
- Add BuildRequire for tpm2-tss-devel and weak dependency for tpm2-tools
* Tue Sep 14 2021 Sahana Prasad <sahana@redhat.com> - 5.9.3-4
- Rebuilt with OpenSSL 3.0.0
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 5.9.3-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Sat Jul 10 2021 Björn Esser <besser82@fedoraproject.org> - 5.9.3-2
- Rebuild for versioned symbols in json-c
* Tue Jul 06 2021 Paul Wouters <paul.wouters@aiven.io> - 5.9.3-1
- Resolves: rhbz#1979574 strongswan-5.9.3 is available
- Make strongswan main dir world readable so apps can find strongswan.conf