Compare commits
No commits in common. 'c9' and 'c8' have entirely different histories.
@ -0,0 +1,31 @@
|
||||
From 1dddaa3226fe1b71b68ec9665d93864a5ec69801 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Mon, 9 Jan 2023 23:26:10 +0900
|
||||
Subject: [PATCH] libreswan-3.32-1861360-nodefault-rsa-pss.patch
|
||||
|
||||
---
|
||||
lib/libipsecconf/confread.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/lib/libipsecconf/confread.c b/lib/libipsecconf/confread.c
|
||||
index 0444118..ec87646 100644
|
||||
--- a/lib/libipsecconf/confread.c
|
||||
+++ b/lib/libipsecconf/confread.c
|
||||
@@ -1501,9 +1501,14 @@ static bool load_conn(struct starter_conn *conn,
|
||||
hunk_streq(val, "rsa")) {
|
||||
conn->authby.rsasig = true;
|
||||
conn->authby.rsasig_v1_5 = true;
|
||||
+ /*
|
||||
+ * These cause failure with RSA 1024 bits because it uses RSA-PSS
|
||||
+ */
|
||||
+#if 0
|
||||
conn->sighash_policy |= POL_SIGHASH_SHA2_256;
|
||||
conn->sighash_policy |= POL_SIGHASH_SHA2_384;
|
||||
conn->sighash_policy |= POL_SIGHASH_SHA2_512;
|
||||
+#endif
|
||||
} else if (hunk_streq(val, "never")) {
|
||||
conn->authby.never = true;
|
||||
/* everything else is only supported for IKEv2 */
|
||||
--
|
||||
2.39.0
|
||||
|
@ -0,0 +1,136 @@
|
||||
From a2cc5f8c80e8cb9be0b65f8e8544689e8b093c09 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Tue, 10 Jan 2023 00:18:48 +0900
|
||||
Subject: [PATCH] libreswan-4.1-maintain-obsolete-keywords.patch
|
||||
|
||||
---
|
||||
lib/libipsecconf/keywords.c | 28 ++++++++++++++++++++++++++++
|
||||
1 file changed, 28 insertions(+)
|
||||
|
||||
diff --git a/lib/libipsecconf/keywords.c b/lib/libipsecconf/keywords.c
|
||||
index fa8f0e0..03fb863 100644
|
||||
--- a/lib/libipsecconf/keywords.c
|
||||
+++ b/lib/libipsecconf/keywords.c
|
||||
@@ -343,6 +343,8 @@ const struct keyword_def ipsec_conf_keywords[] = {
|
||||
{ "ikev1-policy", kv_config, kt_enum, KBF_GLOBAL_IKEv1, kw_global_ikev1_list, NULL, },
|
||||
{ "curl-iface", kv_config, kt_string, KSF_CURLIFACE, NULL, NULL, },
|
||||
{ "curl-timeout", kv_config, kt_time, KBF_CURLTIMEOUT_MS, NULL, NULL, },
|
||||
+ { "curl_iface", kv_config | kv_alias, kt_string, KSF_CURLIFACE, NULL, NULL, }, /* obsolete _ */
|
||||
+ { "curl_timeout", kv_config | kv_alias, kt_time, KBF_CURLTIMEOUT_MS, NULL, NULL, }, /* obsolete _ */
|
||||
|
||||
{ "myvendorid", kv_config, kt_string, KSF_MYVENDORID, NULL, NULL, },
|
||||
{ "syslog", kv_config, kt_string, KSF_SYSLOG, NULL, NULL, },
|
||||
@@ -350,6 +352,7 @@ const struct keyword_def ipsec_conf_keywords[] = {
|
||||
{ "logfile", kv_config, kt_filename, KSF_LOGFILE, NULL, NULL, },
|
||||
{ "plutostderrlog", kv_config, kt_filename, KSF_LOGFILE, NULL, NULL, }, /* obsolete name, but very common :/ */
|
||||
{ "logtime", kv_config, kt_bool, KBF_LOGTIME, NULL, NULL, },
|
||||
+ { "plutostderrlogtime", kv_config | kv_alias, kt_bool, KBF_LOGTIME, NULL, NULL, }, /* obsolete */
|
||||
{ "logappend", kv_config, kt_bool, KBF_LOGAPPEND, NULL, NULL, },
|
||||
{ "logip", kv_config, kt_bool, KBF_LOGIP, NULL, NULL, },
|
||||
{ "audit-log", kv_config, kt_bool, KBF_AUDIT_LOG, NULL, NULL, },
|
||||
@@ -369,13 +372,20 @@ const struct keyword_def ipsec_conf_keywords[] = {
|
||||
{ "global-redirect-to", kv_config, kt_string, KSF_GLOBAL_REDIRECT_TO, NULL, NULL, },
|
||||
|
||||
{ "crl-strict", kv_config, kt_bool, KBF_CRL_STRICT, NULL, NULL, },
|
||||
+ { "crl_strict", kv_config | kv_alias, kt_bool, KBF_CRL_STRICT, NULL, NULL, }, /* obsolete _ */
|
||||
{ "crlcheckinterval", kv_config, kt_time, KBF_CRL_CHECKINTERVAL_MS, NULL, NULL, },
|
||||
+ { "strictcrlpolicy", kv_config | kv_alias, kt_bool, KBF_CRL_STRICT, NULL, NULL, }, /* obsolete; used on openswan */
|
||||
|
||||
{ "ocsp-strict", kv_config, kt_bool, KBF_OCSP_STRICT, NULL, NULL, },
|
||||
+ { "ocsp_strict", kv_config | kv_alias, kt_bool, KBF_OCSP_STRICT, NULL, NULL, }, /* obsolete _ */
|
||||
{ "ocsp-enable", kv_config, kt_bool, KBF_OCSP_ENABLE, NULL, NULL, },
|
||||
+ { "ocsp_enable", kv_config | kv_alias, kt_bool, KBF_OCSP_ENABLE, NULL, NULL, }, /* obsolete _ */
|
||||
{ "ocsp-uri", kv_config, kt_string, KSF_OCSP_URI, NULL, NULL, },
|
||||
+ { "ocsp_uri", kv_config | kv_alias, kt_string, KSF_OCSP_URI, NULL, NULL, }, /* obsolete _ */
|
||||
{ "ocsp-timeout", kv_config, kt_number, KBF_OCSP_TIMEOUT, NULL, NULL, },
|
||||
+ { "ocsp_timeout", kv_config | kv_alias, kt_number, KBF_OCSP_TIMEOUT, NULL, NULL, }, /* obsolete _ */
|
||||
{ "ocsp-trustname", kv_config, kt_string, KSF_OCSP_TRUSTNAME, NULL, NULL, },
|
||||
+ { "ocsp_trust_name", kv_config | kv_alias, kt_string, KSF_OCSP_TRUSTNAME, NULL, NULL, }, /* obsolete _ */
|
||||
{ "ocsp-cache-size", kv_config, kt_number, KBF_OCSP_CACHE_SIZE, NULL, NULL, },
|
||||
{ "ocsp-cache-min-age", kv_config, kt_time, KBF_OCSP_CACHE_MIN_AGE_MS, NULL, NULL, },
|
||||
{ "ocsp-cache-max-age", kv_config, kt_time, KBF_OCSP_CACHE_MAX_AGE_MS, NULL, NULL, },
|
||||
@@ -399,6 +409,7 @@ const struct keyword_def ipsec_conf_keywords[] = {
|
||||
{ "virtual_private", kv_config, kt_string, KSF_VIRTUALPRIVATE, NULL, NULL, }, /* obsolete variant, very common */
|
||||
{ "seedbits", kv_config, kt_number, KBF_SEEDBITS, NULL, NULL, },
|
||||
{ "keep-alive", kv_config, kt_number, KBF_KEEPALIVE, NULL, NULL, },
|
||||
+ { "keep_alive", kv_config | kv_alias, kt_number, KBF_KEEPALIVE, NULL, NULL, }, /* obsolete _ */
|
||||
|
||||
{ "listen-tcp", kv_config, kt_bool, KBF_LISTEN_TCP, NULL, NULL },
|
||||
{ "listen-udp", kv_config, kt_bool, KBF_LISTEN_UDP, NULL, NULL },
|
||||
@@ -410,6 +421,8 @@ const struct keyword_def ipsec_conf_keywords[] = {
|
||||
#ifdef HAVE_LABELED_IPSEC
|
||||
{ "ikev1-secctx-attr-type", kv_config, kt_number, KBF_SECCTX, NULL, NULL, }, /* obsolete: not a value, a type */
|
||||
{ "secctx-attr-type", kv_config | kv_alias, kt_number, KBF_SECCTX, NULL, NULL, },
|
||||
+ { "secctx_attr_value", kv_config | kv_alias, kt_number, KBF_SECCTX, NULL, NULL, }, /* obsolete _ */
|
||||
+ { "secctx-attr-value", kv_config, kt_number, KBF_SECCTX, NULL, NULL, }, /* obsolete: not a value, a type */
|
||||
#endif
|
||||
{ "interfaces", kv_config, kt_obsolete, KNCF_WARNIGNORE, NULL, NULL, }, /* obsoleted but often present keyword */
|
||||
|
||||
@@ -446,6 +459,7 @@ const struct keyword_def ipsec_conf_keywords[] = {
|
||||
{ "username", kv_conn | kv_leftright, kt_string, KSCF_USERNAME, NULL, NULL, },
|
||||
/* xauthusername is still used in NetworkManager-libreswan :/ */
|
||||
{ "xauthusername", kv_conn | kv_leftright, kt_string, KSCF_USERNAME, NULL, NULL, }, /* old alias */
|
||||
+ { "xauthname", kv_conn | kv_leftright, kt_string, KSCF_USERNAME, NULL, NULL, }, /* old alias */
|
||||
{ "addresspool", kv_conn | kv_leftright, kt_range, KSCF_ADDRESSPOOL, NULL, NULL, },
|
||||
{ "auth", kv_conn | kv_leftright, kt_enum, KNCF_AUTH, kw_auth_list, NULL, },
|
||||
#ifdef HAVE_IPTABLES
|
||||
@@ -471,6 +485,8 @@ const struct keyword_def ipsec_conf_keywords[] = {
|
||||
{ "esn", kv_conn | kv_processed, kt_enum, KNCF_ESN, kw_esn_list, NULL, },
|
||||
{ "decap-dscp", kv_conn | kv_processed, kt_bool, KNCF_DECAP_DSCP, NULL, NULL, },
|
||||
{ "nopmtudisc", kv_conn | kv_processed, kt_bool, KNCF_NOPMTUDISC, NULL, NULL, },
|
||||
+ { "ike_frag", kv_conn | kv_processed | kv_alias, kt_enum, KNCF_IKE_FRAG, kw_ynf_list, NULL, }, /* obsolete _ */
|
||||
+ { "ike-frag", kv_conn | kv_processed | kv_alias, kt_enum, KNCF_IKE_FRAG, kw_ynf_list, NULL, }, /* obsolete name */
|
||||
{ "fragmentation", kv_conn | kv_processed, kt_enum, KNCF_IKE_FRAG, kw_ynf_list, NULL, },
|
||||
{ "mobike", kv_conn, kt_bool, KNCF_MOBIKE, NULL, NULL, },
|
||||
{ "narrowing", kv_conn, kt_bool, KNCF_IKEv2_ALLOW_NARROWING, NULL, NULL, },
|
||||
@@ -481,13 +497,18 @@ const struct keyword_def ipsec_conf_keywords[] = {
|
||||
{ "accept-redirect-to", kv_conn, kt_string, KSCF_ACCEPT_REDIRECT_TO, NULL, NULL, },
|
||||
{ "pfs", kv_conn, kt_bool, KNCF_PFS, NULL, NULL, },
|
||||
|
||||
+ { "nat_keepalive", kv_conn | kv_alias, kt_bool, KNCF_NAT_KEEPALIVE, NULL, NULL, }, /* obsolete _ */
|
||||
{ "nat-keepalive", kv_conn, kt_bool, KNCF_NAT_KEEPALIVE, NULL, NULL, },
|
||||
|
||||
+ { "initial_contact", kv_conn | kv_alias, kt_bool, KNCF_INITIAL_CONTACT, NULL, NULL, }, /* obsolete _ */
|
||||
{ "initial-contact", kv_conn, kt_bool, KNCF_INITIAL_CONTACT, NULL, NULL, },
|
||||
+ { "cisco_unity", kv_conn | kv_alias, kt_bool, KNCF_CISCO_UNITY, NULL, NULL, }, /* obsolete _ */
|
||||
{ "cisco-unity", kv_conn, kt_bool, KNCF_CISCO_UNITY, NULL, NULL, },
|
||||
{ "send-no-esp-tfc", kv_conn, kt_bool, KNCF_NO_ESP_TFC, NULL, NULL, },
|
||||
{ "fake-strongswan", kv_conn, kt_bool, KNCF_VID_STRONGSWAN, NULL, NULL, },
|
||||
+ { "send_vendorid", kv_conn | kv_alias, kt_bool, KNCF_SEND_VENDORID, NULL, NULL, }, /* obsolete _ */
|
||||
{ "send-vendorid", kv_conn, kt_bool, KNCF_SEND_VENDORID, NULL, NULL, },
|
||||
+ { "sha2_truncbug", kv_conn | kv_alias, kt_bool, KNCF_SHA2_TRUNCBUG, NULL, NULL, }, /* obsolete _ */
|
||||
{ "sha2-truncbug", kv_conn, kt_bool, KNCF_SHA2_TRUNCBUG, NULL, NULL, },
|
||||
{ "ms-dh-downgrade", kv_conn, kt_bool, KNCF_MSDH_DOWNGRADE, NULL, NULL, },
|
||||
{ "require-id-on-certificate", kv_conn, kt_bool, KNCF_SAN_ON_CERT, NULL, NULL, },
|
||||
@@ -505,7 +526,10 @@ const struct keyword_def ipsec_conf_keywords[] = {
|
||||
{"ikepad", kv_conn, kt_bool, KNCF_IKEPAD, NULL, NULL, },
|
||||
{ "nat-ikev1-method", kv_conn | kv_processed, kt_enum, KNCF_IKEV1_NATT, kw_ikev1natt_list, NULL, },
|
||||
|
||||
+ { "labeled_ipsec", kv_conn, kt_obsolete, KNCF_WARNIGNORE, NULL, NULL, }, /* obsolete */
|
||||
+ { "labeled-ipsec", kv_conn, kt_obsolete, KNCF_WARNIGNORE, NULL, NULL, }, /* obsolete */
|
||||
{ "policy-label", kv_conn, kt_string, KSCF_SA_SEC_LABEL, NULL, NULL, }, /* obsolete variant */
|
||||
+ { "policy_label", kv_conn, kt_string, KSCF_SA_SEC_LABEL, NULL, NULL, }, /* obsolete variant */
|
||||
{ "sec-label", kv_conn, kt_string, KSCF_SA_SEC_LABEL, NULL, NULL, }, /* really stored into struct end */
|
||||
|
||||
/* Cisco interop: remote peer type */
|
||||
@@ -516,13 +540,17 @@ const struct keyword_def ipsec_conf_keywords[] = {
|
||||
/* Network Manager support */
|
||||
#ifdef HAVE_NM
|
||||
{ "nm-configured", kv_conn, kt_bool, KNCF_NMCONFIGURED, NULL, NULL, },
|
||||
+ { "nm_configured", kv_conn, kt_bool, KNCF_NMCONFIGURED, NULL, NULL, }, /* obsolete _ */
|
||||
#endif
|
||||
|
||||
{ "xauthby", kv_conn, kt_enum, KNCF_XAUTHBY, kw_xauthby_list, NULL, },
|
||||
{ "xauthfail", kv_conn, kt_enum, KNCF_XAUTHFAIL, kw_xauthfail_list, NULL, },
|
||||
{ "modecfgpull", kv_conn, kt_invertbool, KNCF_MODECONFIGPULL, NULL, NULL, },
|
||||
{ "modecfgdns", kv_conn, kt_string, KSCF_MODECFGDNS, NULL, NULL, },
|
||||
+ { "modecfgdns1", kv_conn | kv_alias, kt_string, KSCF_MODECFGDNS, NULL, NULL, }, /* obsolete */
|
||||
+ { "modecfgdns2", kv_conn, kt_obsolete, KNCF_WARNIGNORE, NULL, NULL, }, /* obsolete */
|
||||
{ "modecfgdomains", kv_conn, kt_string, KSCF_MODECFGDOMAINS, NULL, NULL, },
|
||||
+ { "modecfgdomain", kv_conn | kv_alias, kt_string, KSCF_MODECFGDOMAINS, NULL, NULL, }, /* obsolete */
|
||||
{ "modecfgbanner", kv_conn, kt_string, KSCF_MODECFGBANNER, NULL, NULL, },
|
||||
{ "ignore-peer-dns", kv_conn, kt_bool, KNCF_IGNORE_PEER_DNS, NULL, NULL, },
|
||||
{ "mark", kv_conn, kt_string, KSCF_CONN_MARK_BOTH, NULL, NULL, },
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,198 +0,0 @@
|
||||
From 474d75be074799efa9e38f346d3fdb76dec3eead Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Cagney <cagney@gnu.org>
|
||||
Date: Tue, 5 Dec 2023 13:55:37 -0500
|
||||
Subject: [PATCH] x509: unpack IPv6 general names based on length
|
||||
|
||||
fix #1321
|
||||
---
|
||||
programs/pluto/x509.c | 35 +++++++++++++++++++++++++++++------
|
||||
1 file changed, 29 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/programs/pluto/x509.c b/programs/pluto/x509.c
|
||||
index fbbf5a553e..f7e97b9979 100644
|
||||
--- a/programs/pluto/x509.c
|
||||
+++ b/programs/pluto/x509.c
|
||||
@@ -336,7 +336,7 @@ generalName_t *collect_rw_ca_candidates(struct msg_digest *md)
|
||||
*/
|
||||
static void gntoid(struct id *id, const generalName_t *gn, struct logger *logger)
|
||||
{
|
||||
- *id = empty_id;
|
||||
+ *id = empty_id; /* aka ID_NONE */
|
||||
|
||||
switch (gn->kind) {
|
||||
case GN_DNS_NAME: /* ID type: ID_FQDN */
|
||||
@@ -345,18 +345,37 @@ static void gntoid(struct id *id, const generalName_t *gn, struct logger *logger
|
||||
break;
|
||||
case GN_IP_ADDRESS: /* ID type: ID_IPV4_ADDR */
|
||||
{
|
||||
+ const struct ip_info *afi = NULL;
|
||||
+ for (enum ip_index i = 0; i < IP_INDEX_ROOF; i++) {
|
||||
+ if (ip_families[i].ip_size == gn->name.len) {
|
||||
+ afi = &ip_families[i];
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ if (afi == NULL) {
|
||||
+ llog(RC_LOG, logger,
|
||||
+ "warning: invalid IP_ADDRESS general name: %zu byte length is not valid",
|
||||
+ gn->name.len);
|
||||
+ PEXPECT(logger, id->kind == ID_NONE);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* XXX: why could this fail; and what happens when it
|
||||
* is ignored?
|
||||
*/
|
||||
- const struct ip_info *afi = &ipv4_info;
|
||||
- id->kind = afi->id_ip_addr;
|
||||
- err_t ugh = hunk_to_address(gn->name, afi, &id->ip_addr);
|
||||
+ ip_address addr;
|
||||
+ err_t ugh = hunk_to_address(gn->name, afi, &addr);
|
||||
if (ugh != NULL) {
|
||||
llog(RC_LOG, logger,
|
||||
- "warning: gntoid() failed to initaddr(): %s",
|
||||
- ugh);
|
||||
+ "warning: invalid IP_ADDRESS general name: %s",
|
||||
+ ugh);
|
||||
+ PEXPECT(logger, id->kind == ID_NONE);
|
||||
+ return;
|
||||
}
|
||||
+
|
||||
+ id->kind = afi->id_ip_addr;
|
||||
+ id->ip_addr = addr;
|
||||
break;
|
||||
}
|
||||
case GN_RFC822_NAME: /* ID type: ID_USER_FQDN */
|
||||
@@ -464,14 +483,18 @@ bool add_pubkey_from_nss_cert(struct pubkey_list **pubkey_db,
|
||||
return false;
|
||||
}
|
||||
|
||||
+ ldbg(logger, "adding cert using subject name");
|
||||
replace_public_key(pubkey_db, &pk);
|
||||
passert(pk == NULL); /*stolen*/
|
||||
|
||||
+ ldbg(logger, "adding cert using general names");
|
||||
add_cert_san_pubkeys(pubkey_db, cert, logger);
|
||||
|
||||
if (keyid != NULL && keyid->kind != ID_DER_ASN1_DN &&
|
||||
keyid->kind != ID_NONE &&
|
||||
keyid->kind != ID_FROMCERT) {
|
||||
+ id_buf idb;
|
||||
+ ldbg(logger, "adding cert using keyid %s", str_id(keyid, &idb));
|
||||
struct pubkey *pk2 = NULL;
|
||||
diag_t d = create_pubkey_from_cert(keyid, cert, &pk2, logger);
|
||||
if (d != NULL) {
|
||||
--
|
||||
2.44.0
|
||||
|
||||
From 1e27be95cd710a840681d1a51913e6a32ce75a2a Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Cagney <cagney@gnu.org>
|
||||
Date: Mon, 11 Mar 2024 17:18:51 -0400
|
||||
Subject: [PATCH] building: back-port ip_families[] and ip_index
|
||||
|
||||
---
|
||||
include/ip_index.h | 27 +++++++++++++++++++++++++++
|
||||
include/ip_info.h | 7 +++++--
|
||||
lib/libswan/ip_info.c | 9 ++++++---
|
||||
3 files changed, 38 insertions(+), 5 deletions(-)
|
||||
create mode 100644 include/ip_index.h
|
||||
|
||||
diff --git a/include/ip_index.h b/include/ip_index.h
|
||||
new file mode 100644
|
||||
index 0000000000..508589b05e
|
||||
--- /dev/null
|
||||
+++ b/include/ip_index.h
|
||||
@@ -0,0 +1,27 @@
|
||||
+/* ip address type index, for libreswan
|
||||
+ *
|
||||
+ * Copyright (C) 2022 Andrew Cagney
|
||||
+ *
|
||||
+ * This library is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU Library General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or (at your
|
||||
+ * option) any later version. See <https://www.gnu.org/licenses/lgpl-2.1.txt>.
|
||||
+ *
|
||||
+ * This library is distributed in the hope that it will be useful, but
|
||||
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
|
||||
+ * License for more details.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#ifndef IP_INDEX_H
|
||||
+#define IP_INDEX_H
|
||||
+
|
||||
+enum ip_index {
|
||||
+ IPv4_INDEX,
|
||||
+ IPv6_INDEX,
|
||||
+};
|
||||
+
|
||||
+#define IP_INDEX_ROOF (IPv6_INDEX+1)
|
||||
+
|
||||
+#endif
|
||||
diff --git a/include/ip_info.h b/include/ip_info.h
|
||||
index 40e99ef687..c1329a8569 100644
|
||||
--- a/include/ip_info.h
|
||||
+++ b/include/ip_info.h
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "ip_subnet.h"
|
||||
#include "ip_selector.h"
|
||||
#include "ip_sockaddr.h"
|
||||
+#include "ip_index.h"
|
||||
|
||||
struct ip_info {
|
||||
/*
|
||||
@@ -113,8 +114,10 @@ struct ip_info {
|
||||
|
||||
};
|
||||
|
||||
-extern const struct ip_info ipv4_info;
|
||||
-extern const struct ip_info ipv6_info;
|
||||
+extern const struct ip_info ip_families[IP_INDEX_ROOF];
|
||||
+
|
||||
+#define ipv4_info ip_families[IPv4_INDEX]
|
||||
+#define ipv6_info ip_families[IPv6_INDEX]
|
||||
|
||||
extern const struct ip_info *aftoinfo(int af);
|
||||
|
||||
diff --git a/lib/libswan/ip_info.c b/lib/libswan/ip_info.c
|
||||
index 70cd6a368f..97296d3a11 100644
|
||||
--- a/lib/libswan/ip_info.c
|
||||
+++ b/lib/libswan/ip_info.c
|
||||
@@ -158,7 +158,9 @@ static ip_port port_from_ipv6_sockaddr(const ip_sockaddr sa)
|
||||
|
||||
#define IPv4_FF { { 255, 255, 255, 255, }, }
|
||||
|
||||
-const struct ip_info ipv4_info = {
|
||||
+const struct ip_info ip_families[IP_INDEX_ROOF] = {
|
||||
+
|
||||
+ [IPv4_INDEX] = {
|
||||
|
||||
.ip_version = IPv4,
|
||||
.ip_size = sizeof(struct in_addr),
|
||||
@@ -210,11 +212,11 @@ const struct ip_info ipv4_info = {
|
||||
.id_ip_addr = ID_IPV4_ADDR,
|
||||
.id_ip_addr_subnet = ID_IPV4_ADDR_SUBNET,
|
||||
.id_ip_addr_range = ID_IPV4_ADDR_RANGE,
|
||||
-};
|
||||
+ },
|
||||
|
||||
#define IPv6_FF { { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, }, }
|
||||
|
||||
-const struct ip_info ipv6_info = {
|
||||
+ [IPv6_INDEX] = {
|
||||
|
||||
.ip_version = IPv6,
|
||||
.ip_size = sizeof(struct in6_addr),
|
||||
@@ -266,6 +268,7 @@ const struct ip_info ipv6_info = {
|
||||
.id_ip_addr = ID_IPV6_ADDR,
|
||||
.id_ip_addr_subnet = ID_IPV6_ADDR_SUBNET,
|
||||
.id_ip_addr_range = ID_IPV6_ADDR_RANGE,
|
||||
+ }
|
||||
};
|
||||
|
||||
const struct ip_info *aftoinfo(int af)
|
||||
--
|
||||
2.44.0
|
||||
|
@ -0,0 +1,11 @@
|
||||
diff -Naur libreswan-4.3-orig/configs/ipsec.conf.in libreswan-4.3/configs/ipsec.conf.in
|
||||
--- libreswan-4.3-orig/configs/ipsec.conf.in 2021-03-04 14:29:50.591912834 -0500
|
||||
+++ libreswan-4.3/configs/ipsec.conf.in 2021-03-04 14:30:27.227389433 -0500
|
||||
@@ -32,6 +32,7 @@
|
||||
# listen-tcp=yes
|
||||
# To enable IKE and IPsec over TCP for VPN client, also specify
|
||||
# tcp-remote-port=4500 in the client's conn section.
|
||||
+ virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v4:100.64.0.0/10,%v6:fd00::/8,%v6:fe80::/10
|
||||
|
||||
# if it exists, include system wide crypto-policy defaults
|
||||
# include /etc/crypto-policies/back-ends/libreswan.config
|
@ -0,0 +1,85 @@
|
||||
From 83487373fdd77437e51cfccd41532e270e279e05 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Tue, 10 Jan 2023 00:11:26 +0900
|
||||
Subject: [PATCH] libreswan-4.3-maintain-different-v1v2-split.patch
|
||||
|
||||
---
|
||||
configs/d.ipsec.conf/ikev2.xml | 14 +++++++-------
|
||||
lib/libipsecconf/confread.c | 8 +++++++-
|
||||
programs/whack/whack.c | 4 ++--
|
||||
3 files changed, 16 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/configs/d.ipsec.conf/ikev2.xml b/configs/d.ipsec.conf/ikev2.xml
|
||||
index 3d03825..285db1b 100644
|
||||
--- a/configs/d.ipsec.conf/ikev2.xml
|
||||
+++ b/configs/d.ipsec.conf/ikev2.xml
|
||||
@@ -2,14 +2,14 @@
|
||||
<term><emphasis remap='B'>ikev2</emphasis></term>
|
||||
<listitem>
|
||||
<para>Whether to use IKEv2 (RFC 7296) or IKEv1 (RFC 4301).
|
||||
-Currently the accepted values are <emphasis remap='B'>yes</emphasis> (the default),
|
||||
-signifying only IKEv2 is accepted, or <emphasis remap='B'>no</emphasis>,
|
||||
+Currently the accepted values are <emphasis remap='B'>insist</emphasis> (the default),
|
||||
+signifying only IKEv2 is accepted, or <emphasis remap='B'>no</emphasis> (or <emphasis remap='B'>never</emphasis>),
|
||||
signifying only IKEv1 is accepted. Previous versions allowed the keywords
|
||||
-<emphasis remap='B'>propose</emphasis> or <emphasis remap='B'>permit</emphasis>
|
||||
-that would allow either IKEv1 or IKEv2, but this is no longer supported. The
|
||||
-permit option is interpreted as no and the propose option is interpreted as
|
||||
-yes. Older versions also supported keyword
|
||||
-<emphasis remap='B'>insist</emphasis> which is now interpreted as yes.
|
||||
+<emphasis remap='B'>propose</emphasis>, <emphasis remap='B'>yes</emphasis> or <emphasis remap='B'>permit</emphasis>
|
||||
+that would allow either IKEv1 or IKEv2, but this is no longer supported and both options
|
||||
+now cause the connection to fail to load. <emphasis remap='B'>WARNING:</emphasis> This behaviour differs from upstream
|
||||
+libreswan, which only accepts <emphasis remap='B'>yes</emphasis> or <emphasis remap='B'>no</emphasis> where yes means
|
||||
+the same as insist.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
diff --git a/lib/libipsecconf/confread.c b/lib/libipsecconf/confread.c
|
||||
index b95c90a..e752441 100644
|
||||
--- a/lib/libipsecconf/confread.c
|
||||
+++ b/lib/libipsecconf/confread.c
|
||||
@@ -1340,11 +1340,17 @@ static bool load_conn(struct starter_conn *conn,
|
||||
|
||||
switch (conn->options[KNCF_IKEv2]) {
|
||||
case fo_never:
|
||||
- case fo_permit:
|
||||
conn->ike_version = IKEv1;
|
||||
break;
|
||||
|
||||
+ case fo_permit:
|
||||
+ starter_error_append(perrl, "ikev2=permit is no longer accepted. Use ikev2=insist or ikev2=no|never");
|
||||
+ return true;
|
||||
+
|
||||
case fo_propose:
|
||||
+ starter_error_append(perrl, "ikev2=propose or ikev2=yes is no longer accepted. Use ikev2=insist or ikev2=no|never");
|
||||
+ return true;
|
||||
+
|
||||
case fo_insist:
|
||||
conn->ike_version = IKEv2;
|
||||
break;
|
||||
diff --git a/programs/whack/whack.c b/programs/whack/whack.c
|
||||
index b512b04..3de020e 100644
|
||||
--- a/programs/whack/whack.c
|
||||
+++ b/programs/whack/whack.c
|
||||
@@ -815,7 +815,7 @@ static const struct option long_opts[] = {
|
||||
{ "ikev1-allow", no_argument, NULL, CD_IKEv1 + OO }, /* obsolete name */
|
||||
{ "ikev2", no_argument, NULL, CD_IKEv2 +OO },
|
||||
{ "ikev2-allow", no_argument, NULL, CD_IKEv2 +OO }, /* obsolete name */
|
||||
- { "ikev2-propose", no_argument, NULL, CD_IKEv2 +OO }, /* obsolete, map onto allow */
|
||||
+ /* not in RHEL8 { "ikev2-propose", no_argument, NULL, CD_IKEv2 +OO }, */
|
||||
|
||||
PS("allow-narrowing", IKEV2_ALLOW_NARROWING),
|
||||
#ifdef AUTH_HAVE_PAM
|
||||
@@ -1802,7 +1802,7 @@ int main(int argc, char **argv)
|
||||
end_seen = LEMPTY;
|
||||
continue;
|
||||
|
||||
- /* --ikev1 --ikev2 --ikev2-propose */
|
||||
+ /* --ikev1 --ikev2 */
|
||||
case CD_IKEv1:
|
||||
case CD_IKEv2:
|
||||
{
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,63 +0,0 @@
|
||||
From 13720e0dedcab1eaf3334a73a42b68581acd9f3b Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Fri, 7 Jan 2022 18:36:47 -0500
|
||||
Subject: [PATCH] ikev1-policy defaults to drop
|
||||
|
||||
IKEv2 has been available for 16 years (RFC 4306 was published December
|
||||
2005). At some point, we should be discouraging IKEv1 adoption.
|
||||
|
||||
To the extent that a user needs IKEv1, they can manually add
|
||||
ikev1-policy=accept to /etc/ipsec.conf.
|
||||
---
|
||||
configs/d.ipsec.conf/ikev1-policy.xml | 7 ++++---
|
||||
include/ipsecconf/keywords.h | 2 +-
|
||||
lib/libipsecconf/confread.c | 1 +
|
||||
programs/pluto/server.c | 5 -----
|
||||
4 files changed, 6 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/configs/d.ipsec.conf/ikev1-policy.xml b/configs/d.ipsec.conf/ikev1-policy.xml
|
||||
index 17d1747e3b..3bd6702564 100644
|
||||
--- a/configs/d.ipsec.conf/ikev1-policy.xml
|
||||
+++ b/configs/d.ipsec.conf/ikev1-policy.xml
|
||||
@@ -3,9 +3,10 @@
|
||||
<listitem>
|
||||
<para>
|
||||
What to do with received IKEv1 packets. Valid options are
|
||||
-<emphasis remap='B'>accept</emphasis> (default), <emphasis remap='B'>reject</emphasis> which
|
||||
-will reply with an error, and <emphasis remap='B'>drop</emphasis> which will silently drop
|
||||
-any received IKEv1 packet. If this option is set to drop or reject, an attempt to load an
|
||||
+<emphasis remap='B'>drop</emphasis> (default) which will silently drop
|
||||
+any received IKEv1 packet, <emphasis remap='B'>accept</emphasis>, and
|
||||
+<emphasis remap='B'>reject</emphasis> which will reply with an error.
|
||||
+If this option is set to drop or reject, an attempt to load an
|
||||
IKEv1 connection will fail, as these connections would never be able to receive a packet
|
||||
for processing.
|
||||
</para>
|
||||
diff --git a/include/ipsecconf/keywords.h b/include/ipsecconf/keywords.h
|
||||
index 660847733c..31b519242a 100644
|
||||
--- a/include/ipsecconf/keywords.h
|
||||
+++ b/include/ipsecconf/keywords.h
|
||||
@@ -111,7 +111,7 @@ enum keyword_numeric_config_field {
|
||||
|
||||
KBF_LISTEN_TCP, /* listen on TCP port 4500 - default no */
|
||||
KBF_LISTEN_UDP, /* listen on UDP port 500/4500 - default yes */
|
||||
- KBF_GLOBAL_IKEv1, /* global ikev1 policy - default accept */
|
||||
+ KBF_GLOBAL_IKEv1, /* global ikev1 policy - default drop */
|
||||
KBF_ROOF
|
||||
};
|
||||
|
||||
diff --git a/lib/libipsecconf/confread.c b/lib/libipsecconf/confread.c
|
||||
index 5b5aba723f..68fbccf442 100644
|
||||
--- a/lib/libipsecconf/confread.c
|
||||
+++ b/lib/libipsecconf/confread.c
|
||||
@@ -95,6 +95,7 @@ static void ipsecconf_default_values(struct starter_config *cfg)
|
||||
/* Don't inflict BSI requirements on everyone */
|
||||
SOPT(KBF_SEEDBITS, 0);
|
||||
SOPT(KBF_DROP_OPPO_NULL, false);
|
||||
+ SOPT(KBF_GLOBAL_IKEv1, GLOBAL_IKEv1_DROP);
|
||||
|
||||
#ifdef HAVE_LABELED_IPSEC
|
||||
SOPT(KBF_SECCTX, SECCTX);
|
||||
--
|
||||
2.34.1
|
||||
|
@ -0,0 +1,52 @@
|
||||
From 000b230258dd272ab15b384c330c31f996d0ba18 Mon Sep 17 00:00:00 2001
|
||||
From: Daiki Ueno <dueno@redhat.com>
|
||||
Date: Fri, 14 Apr 2023 14:10:47 +0900
|
||||
Subject: [PATCH] Ignore system crypto-policies for SHA-1 for legacy
|
||||
authby=rsa-sha1
|
||||
|
||||
Signed-off-by: Daiki Ueno <dueno@redhat.com>
|
||||
---
|
||||
lib/libswan/pubkey_rsa.c | 24 ++++++++++++++++++++++++
|
||||
1 file changed, 24 insertions(+)
|
||||
|
||||
diff --git a/lib/libswan/pubkey_rsa.c b/lib/libswan/pubkey_rsa.c
|
||||
index 38b44ab61d..9a7c0bc6a8 100644
|
||||
--- a/lib/libswan/pubkey_rsa.c
|
||||
+++ b/lib/libswan/pubkey_rsa.c
|
||||
@@ -501,9 +501,33 @@ static struct hash_signature RSA_sign_hash_pkcs1_1_5_rsa(const struct secret_stu
|
||||
* used to generate the signature.
|
||||
*/
|
||||
SECItem signature_result = {0};
|
||||
+
|
||||
+ /* ignore system crypto-policies for the hash algorithm */
|
||||
+ PRUint32 saved_policy;
|
||||
+
|
||||
+ if (NSS_GetAlgorithmPolicy(hash_algo->nss.oid_tag, &saved_policy) != SECSuccess) {
|
||||
+ /* PR_GetError() returns the thread-local error */
|
||||
+ enum_buf tb;
|
||||
+ llog_nss_error(RC_LOG_SERIOUS, logger,
|
||||
+ "NSS_SetAlgorithmPolicy(%s) function failed",
|
||||
+ str_nss_oid(hash_algo->nss.oid_tag, &tb));
|
||||
+ return (struct hash_signature) { .len = 0, };
|
||||
+ }
|
||||
+
|
||||
+ if (!(saved_policy & NSS_USE_ALG_IN_SIGNATURE)) {
|
||||
+ (void)NSS_SetAlgorithmPolicy(hash_algo->nss.oid_tag,
|
||||
+ NSS_USE_ALG_IN_SIGNATURE, 0);
|
||||
+ }
|
||||
+
|
||||
SECStatus s = SGN_Digest(pks->u.pubkey.private_key,
|
||||
hash_algo->nss.oid_tag,
|
||||
&signature_result, &digest);
|
||||
+
|
||||
+ if (!(saved_policy & NSS_USE_ALG_IN_SIGNATURE)) {
|
||||
+ (void)NSS_SetAlgorithmPolicy(hash_algo->nss.oid_tag,
|
||||
+ saved_policy, ~saved_policy);
|
||||
+ }
|
||||
+
|
||||
if (s != SECSuccess) {
|
||||
/* PR_GetError() returns the thread-local error */
|
||||
enum_buf tb;
|
||||
--
|
||||
2.40.0
|
||||
|
Loading…
Reference in new issue