diff options
Diffstat (limited to 'main/strongswan/0003-ike-cfg-Add-helper-function-to-determine-address-fam.patch')
-rw-r--r-- | main/strongswan/0003-ike-cfg-Add-helper-function-to-determine-address-fam.patch | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/main/strongswan/0003-ike-cfg-Add-helper-function-to-determine-address-fam.patch b/main/strongswan/0003-ike-cfg-Add-helper-function-to-determine-address-fam.patch new file mode 100644 index 0000000000..0cf63a3f76 --- /dev/null +++ b/main/strongswan/0003-ike-cfg-Add-helper-function-to-determine-address-fam.patch @@ -0,0 +1,106 @@ +From 6bfa66069304c1fc1345b4e72762a3b1a80e4338 Mon Sep 17 00:00:00 2001 +From: Tobias Brunner <tobias@strongswan.org> +Date: Thu, 11 Jun 2015 15:42:54 +0200 +Subject: [PATCH] ike-cfg: Add helper function to determine address family of + IP addresses + +All configured static addresses (hostnames, ranges or subnets are not +considered) must be of the same family, otherwise AF_UNSPEC is returned. +--- + src/libcharon/config/ike_cfg.c | 47 ++++++++++++++++++++++++++++++++++++++++++ + src/libcharon/config/ike_cfg.h | 13 +++++++++++- + 2 files changed, 59 insertions(+), 1 deletion(-) + +diff --git a/src/libcharon/config/ike_cfg.c b/src/libcharon/config/ike_cfg.c +index 9464ceb..dee9e4c 100644 +--- a/src/libcharon/config/ike_cfg.c ++++ b/src/libcharon/config/ike_cfg.c +@@ -1,4 +1,5 @@ + /* ++ * Copyright (C) 2012-2015 Tobias Brunner + * Copyright (C) 2005-2007 Martin Willi + * Copyright (C) 2005 Jan Hutter + * Hochschule fuer Technik Rapperswil +@@ -513,6 +514,52 @@ static void parse_addresses(char *str, linked_list_t *hosts, + /** + * Described in header. + */ ++int ike_cfg_get_family(ike_cfg_t *cfg, bool local) ++{ ++ private_ike_cfg_t *this = (private_ike_cfg_t*)cfg; ++ enumerator_t *enumerator; ++ host_t *host; ++ char *str; ++ int family = AF_UNSPEC; ++ ++ if (local) ++ { ++ enumerator = this->my_hosts->create_enumerator(this->my_hosts); ++ } ++ else ++ { ++ enumerator = this->other_hosts->create_enumerator(this->other_hosts); ++ } ++ while (enumerator->enumerate(enumerator, &str)) ++ { ++ if (streq(str, "%any")) ++ { /* ignore %any as its family is undetermined */ ++ continue; ++ } ++ host = host_create_from_string(str, 0); ++ if (host) ++ { ++ if (family == AF_UNSPEC) ++ { ++ family = host->get_family(host); ++ } ++ else if (family != host->get_family(host)) ++ { ++ /* more than one address family defined */ ++ family = AF_UNSPEC; ++ host->destroy(host); ++ break; ++ } ++ } ++ DESTROY_IF(host); ++ } ++ enumerator->destroy(enumerator); ++ return family; ++} ++ ++/** ++ * Described in header. ++ */ + ike_cfg_t *ike_cfg_create(ike_version_t version, bool certreq, bool force_encap, + char *me, u_int16_t my_port, + char *other, u_int16_t other_port, +diff --git a/src/libcharon/config/ike_cfg.h b/src/libcharon/config/ike_cfg.h +index adfcabf..62f5b74 100644 +--- a/src/libcharon/config/ike_cfg.h ++++ b/src/libcharon/config/ike_cfg.h +@@ -1,5 +1,5 @@ + /* +- * Copyright (C) 2012 Tobias Brunner ++ * Copyright (C) 2012-2015 Tobias Brunner + * Copyright (C) 2005-2007 Martin Willi + * Copyright (C) 2005 Jan Hutter + * Hochschule fuer Technik Rapperswil +@@ -254,4 +254,15 @@ ike_cfg_t *ike_cfg_create(ike_version_t version, bool certreq, bool force_encap, + char *other, u_int16_t other_port, + fragmentation_t fragmentation, u_int8_t dscp); + ++/** ++ * Determine the address family of the local or remtoe address(es). If multiple ++ * families are configured AF_UNSPEC is returned. %any is ignored (%any4|6 are ++ * not though). ++ * ++ * @param local TRUE to check local addresses, FALSE for remote ++ * @return address family of address(es) if distinct ++ */ ++int ike_cfg_get_family(ike_cfg_t *this, bool local); ++ ++ + #endif /** IKE_CFG_H_ @}*/ +-- +2.4.6 + |