aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndreas Steffen <andreas.steffen@strongswan.org>2010-05-02 15:55:46 +0200
committerAndreas Steffen <andreas.steffen@strongswan.org>2010-05-02 15:55:46 +0200
commit61e48488d9c07c87cf78930a8bc1ed5cb8eb5f86 (patch)
tree4ab26c9b14ca1169c3e490f7e89f8fffa48e7bae /src
parenta48484322eaab334be4b3c914396093f984892aa (diff)
downloadstrongswan-61e48488d9c07c87cf78930a8bc1ed5cb8eb5f86.tar.bz2
strongswan-61e48488d9c07c87cf78930a8bc1ed5cb8eb5f86.tar.xz
final fix for cloning and deleting sourceip strings
Diffstat (limited to 'src')
-rw-r--r--src/starter/args.c2
-rw-r--r--src/starter/confread.c6
2 files changed, 3 insertions, 5 deletions
diff --git a/src/starter/args.c b/src/starter/args.c
index c2614cd14..512f2f46f 100644
--- a/src/starter/args.c
+++ b/src/starter/args.c
@@ -253,7 +253,7 @@ static const token_info_t token_info[] =
{ ARG_STR, offsetof(starter_end_t, subnet), NULL },
{ ARG_MISC, 0, NULL /* KW_SUBNETWITHIN */ },
{ ARG_MISC, 0, NULL /* KW_PROTOPORT */ },
- { ARG_MISC, 0, NULL /* KW_SOURCEIP */ },
+ { ARG_STR, offsetof(starter_end_t, sourceip), NULL },
{ ARG_MISC, 0, NULL /* KW_NATIP */ },
{ ARG_ENUM, offsetof(starter_end_t, firewall), LST_bool },
{ ARG_ENUM, offsetof(starter_end_t, hostaccess), LST_bool },
diff --git a/src/starter/confread.c b/src/starter/confread.c
index c581376be..759aa059a 100644
--- a/src/starter/confread.c
+++ b/src/starter/confread.c
@@ -194,11 +194,13 @@ static void kw_end(starter_conn_t *conn, starter_end_t *end, kw_token_t token,
streq(value, "%config") || streq(value, "%cfg"))
{
/* request ip via config payload */
+ free(end->sourceip);
end->sourceip = NULL;
end->sourceip_mask = 1;
}
else
{ /* %poolname, strip %, serve ip requests */
+ free(end->sourceip);
end->sourceip = clone_str(value+1);
end->sourceip_mask = 0;
}
@@ -222,7 +224,6 @@ static void kw_end(starter_conn_t *conn, starter_end_t *end, kw_token_t token,
goto err;
}
*pos = '\0';
- end->sourceip = clone_str(value);
end->sourceip_mask = atoi(pos + 1);
}
else
@@ -233,7 +234,6 @@ static void kw_end(starter_conn_t *conn, starter_end_t *end, kw_token_t token,
plog("# bad addr: %s=%s [%s]", name, value, ugh);
goto err;
}
- end->sourceip = clone_str(value);
end->sourceip_mask = (conn->tunnel_addr_family == AF_INET) ?
32 : 128;
}
@@ -925,8 +925,6 @@ static void free_also(also_t *head)
*/
static void confread_free_conn(starter_conn_t *conn)
{
- free(conn->left.sourceip);
- free(conn->right.sourceip);
free_args(KW_END_FIRST, KW_END_LAST, (char *)&conn->left);
free_args(KW_END_FIRST, KW_END_LAST, (char *)&conn->right);
free_args(KW_CONN_NAME, KW_CONN_LAST, (char *)conn);