aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/charon/config/child_cfg.c2
-rw-r--r--src/charon/config/traffic_selector.c5
-rw-r--r--src/charon/config/traffic_selector.h2
-rw-r--r--src/charon/plugins/load_tester/load_tester_config.c4
-rw-r--r--src/charon/plugins/medcli/medcli_config.c2
-rw-r--r--src/charon/plugins/nm/nm_service.c2
-rw-r--r--src/charon/plugins/sql/sql_config.c2
-rw-r--r--src/charon/plugins/stroke/stroke_config.c3
-rw-r--r--src/charon/plugins/uci/uci_config.c2
-rw-r--r--src/libstrongswan/utils/host.c4
-rw-r--r--src/libstrongswan/utils/identification.c1
-rw-r--r--src/starter/starterstroke.c31
12 files changed, 35 insertions, 25 deletions
diff --git a/src/charon/config/child_cfg.c b/src/charon/config/child_cfg.c
index 3b581b0d2..9f1523f8e 100644
--- a/src/charon/config/child_cfg.c
+++ b/src/charon/config/child_cfg.c
@@ -301,7 +301,7 @@ static linked_list_t* get_traffic_selectors(private_child_cfg_t *this, bool loca
else
{
DBG2(DBG_CFG, " config: %R, received: %R => no match",
- ts1, ts2, selected);
+ ts1, ts2);
}
}
e2->destroy(e2);
diff --git a/src/charon/config/traffic_selector.c b/src/charon/config/traffic_selector.c
index 4c26a943a..9de168fd6 100644
--- a/src/charon/config/traffic_selector.c
+++ b/src/charon/config/traffic_selector.c
@@ -823,11 +823,12 @@ traffic_selector_t *traffic_selector_create_from_string(
/*
* see header
*/
-traffic_selector_t *traffic_selector_create_dynamic(u_int8_t protocol,
+traffic_selector_t *traffic_selector_create_dynamic(u_int8_t protocol,
+ ts_type_t type,
u_int16_t from_port, u_int16_t to_port)
{
private_traffic_selector_t *this = traffic_selector_create(
- protocol, TS_IPV4_ADDR_RANGE, from_port, to_port);
+ protocol, type, from_port, to_port);
memset(this->from6, 0, sizeof(this->from6));
memset(this->to6, 0xFF, sizeof(this->to6));
diff --git a/src/charon/config/traffic_selector.h b/src/charon/config/traffic_selector.h
index 073bbc17b..b7645620d 100644
--- a/src/charon/config/traffic_selector.h
+++ b/src/charon/config/traffic_selector.h
@@ -281,6 +281,7 @@ traffic_selector_t *traffic_selector_create_from_subnet(
*
*
* @param protocol upper layer protocl to allow
+ * @param type type of following addresses, such as TS_IPV4_ADDR_RANGE
* @param from_port start of allowed port range
* @param to_port end of range
* @return
@@ -288,6 +289,7 @@ traffic_selector_t *traffic_selector_create_from_subnet(
* - NULL if type not supported
*/
traffic_selector_t *traffic_selector_create_dynamic(u_int8_t protocol,
+ ts_type_t type,
u_int16_t from_port, u_int16_t to_port);
/**
diff --git a/src/charon/plugins/load_tester/load_tester_config.c b/src/charon/plugins/load_tester/load_tester_config.c
index f3cd33b61..b5d2f5815 100644
--- a/src/charon/plugins/load_tester/load_tester_config.c
+++ b/src/charon/plugins/load_tester/load_tester_config.c
@@ -109,9 +109,9 @@ static peer_cfg_t* generate_config(private_load_tester_config_t *this, uint num)
MODE_TUNNEL, ACTION_NONE, ACTION_NONE, FALSE);
proposal = proposal_create_from_string(PROTO_ESP, "aes128-sha1");
child_cfg->add_proposal(child_cfg, proposal);
- ts = traffic_selector_create_dynamic(0, 0, 65535);
+ ts = traffic_selector_create_dynamic(0, TS_IPV4_ADDR_RANGE, 0, 65535);
child_cfg->add_traffic_selector(child_cfg, TRUE, ts);
- ts = traffic_selector_create_dynamic(0, 0, 65535);
+ ts = traffic_selector_create_dynamic(0, TS_IPV4_ADDR_RANGE, 0, 65535);
child_cfg->add_traffic_selector(child_cfg, FALSE, ts);
peer_cfg->add_child_cfg(peer_cfg, child_cfg);
return peer_cfg;
diff --git a/src/charon/plugins/medcli/medcli_config.c b/src/charon/plugins/medcli/medcli_config.c
index d1e6c0c9e..23385c7b1 100644
--- a/src/charon/plugins/medcli/medcli_config.c
+++ b/src/charon/plugins/medcli/medcli_config.c
@@ -87,7 +87,7 @@ static traffic_selector_t *ts_from_string(char *str)
return traffic_selector_create_from_subnet(net, netbits, 0, 0);
}
}
- return traffic_selector_create_dynamic(0, 0, 65535);
+ return traffic_selector_create_dynamic(0, TS_IPV4_ADDR_RANGE, 0, 65535);
}
/**
diff --git a/src/charon/plugins/nm/nm_service.c b/src/charon/plugins/nm/nm_service.c
index f90bfa448..d1aabe1bd 100644
--- a/src/charon/plugins/nm/nm_service.c
+++ b/src/charon/plugins/nm/nm_service.c
@@ -319,7 +319,7 @@ static gboolean connect_(NMVPNPlugin *plugin, NMConnection *connection,
NULL, TRUE, MODE_TUNNEL, /* updown, hostaccess */
ACTION_NONE, ACTION_RESTART, ipcomp);
child_cfg->add_proposal(child_cfg, proposal_create_default(PROTO_ESP));
- ts = traffic_selector_create_dynamic(0, 0, 65535);
+ ts = traffic_selector_create_dynamic(0, TS_IPV4_ADDR_RANGE, 0, 65535);
child_cfg->add_traffic_selector(child_cfg, TRUE, ts);
ts = traffic_selector_create_from_string(0, TS_IPV4_ADDR_RANGE,
"0.0.0.0", 0,
diff --git a/src/charon/plugins/sql/sql_config.c b/src/charon/plugins/sql/sql_config.c
index 8efa1cb2e..a36c01538 100644
--- a/src/charon/plugins/sql/sql_config.c
+++ b/src/charon/plugins/sql/sql_config.c
@@ -78,7 +78,7 @@ static traffic_selector_t *build_traffic_selector(private_sql_config_t *this,
*local = TRUE;
/* FALL */
case TS_REMOTE_DYNAMIC:
- ts = traffic_selector_create_dynamic(protocol,
+ ts = traffic_selector_create_dynamic(protocol, type,
start_port, end_port);
break;
default:
diff --git a/src/charon/plugins/stroke/stroke_config.c b/src/charon/plugins/stroke/stroke_config.c
index cb91ecb72..d480eeacb 100644
--- a/src/charon/plugins/stroke/stroke_config.c
+++ b/src/charon/plugins/stroke/stroke_config.c
@@ -691,7 +691,10 @@ static void add_ts(private_stroke_config_t *this,
if (end->tohost)
{
+ bool is_ipv6 = strchr(end->address, ':') || streq(end->address, "%any6");
+
ts = traffic_selector_create_dynamic(end->protocol,
+ is_ipv6? TS_IPV6_ADDR_RANGE:TS_IPV4_ADDR_RANGE,
end->port ? end->port : 0, end->port ? end->port : 65535);
child_cfg->add_traffic_selector(child_cfg, local, ts);
}
diff --git a/src/charon/plugins/uci/uci_config.c b/src/charon/plugins/uci/uci_config.c
index c9d54a532..7872a5add 100644
--- a/src/charon/plugins/uci/uci_config.c
+++ b/src/charon/plugins/uci/uci_config.c
@@ -131,7 +131,7 @@ static traffic_selector_t *create_ts(char *string)
return traffic_selector_create_from_subnet(net, netbits, 0, 0);
}
}
- return traffic_selector_create_dynamic(0, 0, 65535);
+ return traffic_selector_create_dynamic(0, TS_IPV4_ADDR_RANGE, 0, 65535);
}
/**
diff --git a/src/libstrongswan/utils/host.c b/src/libstrongswan/utils/host.c
index 8c79f718a..eddd6f163 100644
--- a/src/libstrongswan/utils/host.c
+++ b/src/libstrongswan/utils/host.c
@@ -453,6 +453,10 @@ host_t *host_create_from_dns(char *string, int af, u_int16_t port)
{
return host_create_any(af ? af : AF_INET);
}
+ if (streq(string, "%any6"))
+ {
+ return host_create_any(af ? af : AF_INET6);
+ }
else if (strchr(string, ':'))
{
/* gethostbyname does not like IPv6 addresses - fallback */
diff --git a/src/libstrongswan/utils/identification.c b/src/libstrongswan/utils/identification.c
index b5b438a74..fad7e6acc 100644
--- a/src/libstrongswan/utils/identification.c
+++ b/src/libstrongswan/utils/identification.c
@@ -1046,6 +1046,7 @@ identification_t *identification_create_from_string(char *string)
else if (strchr(string, '@') == NULL)
{
if (streq(string, "%any")
+ || streq(string, "%any6")
|| streq(string, "0.0.0.0")
|| streq(string, "*")
|| streq(string, "::")
diff --git a/src/starter/starterstroke.c b/src/starter/starterstroke.c
index bc29e7442..9ce7edee3 100644
--- a/src/starter/starterstroke.c
+++ b/src/starter/starterstroke.c
@@ -127,19 +127,6 @@ static void ip_address2string(ip_address *addr, char *buffer, size_t len)
{
switch (((struct sockaddr*)addr)->sa_family)
{
- case AF_INET:
- {
- struct sockaddr_in* sin = (struct sockaddr_in*)addr;
- u_int8_t zeroes[IPV4_LEN];
-
- memset(zeroes, 0, IPV4_LEN);
- if (memcmp(zeroes, &(sin->sin_addr.s_addr), IPV4_LEN) &&
- inet_ntop(AF_INET, &sin->sin_addr, buffer, len))
- {
- return;
- }
- break;
- }
case AF_INET6:
{
struct sockaddr_in6* sin6 = (struct sockaddr_in6*)addr;
@@ -151,16 +138,28 @@ static void ip_address2string(ip_address *addr, char *buffer, size_t len)
{
return;
}
+ snprintf(buffer, len, "%%any6");
break;
}
+ case AF_INET:
+ {
+ struct sockaddr_in* sin = (struct sockaddr_in*)addr;
+ u_int8_t zeroes[IPV4_LEN];
+
+ memset(zeroes, 0, IPV4_LEN);
+ if (memcmp(zeroes, &(sin->sin_addr.s_addr), IPV4_LEN) &&
+ inet_ntop(AF_INET, &sin->sin_addr, buffer, len))
+ {
+ return;
+ }
+ /* fall through to default */
+ }
default:
+ snprintf(buffer, len, "%%any");
break;
}
- /* default */
- snprintf(buffer, len, "%%any");
}
-
static void starter_stroke_add_end(stroke_msg_t *msg, stroke_end_t *msg_end, starter_end_t *conn_end)
{
char buffer[INET6_ADDRSTRLEN];