Signed-off-by: Kevin Cernekee <cernekee at gmail.com> --- cstp.c | 41 +++++++++++++++++++++++------------------ library.c | 1 + openconnect-internal.h | 1 + 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/cstp.c b/cstp.c index 4c15d0d..af66fd8 100644 --- a/cstp.c +++ b/cstp.c @@ -149,6 +149,28 @@ static void calculate_mtu(struct openconnect_info *vpninfo, int *base_mtu, int * *mtu = 1280; } +void cstp_free_splits(struct openconnect_info *vpninfo) +{ + struct split_include *inc; + + for (inc = vpninfo->split_includes; inc; ) { + struct split_include *next = inc->next; + free(inc); + inc = next; + } + for (inc = vpninfo->split_excludes; inc; ) { + struct split_include *next = inc->next; + free(inc); + inc = next; + } + for (inc = vpninfo->split_dns; inc; ) { + struct split_include *next = inc->next; + free(inc); + inc = next; + } + vpninfo->split_dns = vpninfo->split_includes = vpninfo->split_excludes = NULL; +} + static int start_cstp_connection(struct openconnect_info *vpninfo) { char buf[65536]; @@ -162,7 +184,6 @@ static int start_cstp_connection(struct openconnect_info *vpninfo) const char *old_netmask = vpninfo->vpn_netmask; const char *old_addr6 = vpninfo->vpn_addr6; const char *old_netmask6 = vpninfo->vpn_netmask6; - struct split_include *inc; int base_mtu, mtu; /* Clear old options which will be overwritten */ @@ -174,23 +195,7 @@ static int start_cstp_connection(struct openconnect_info *vpninfo) for (i = 0; i < 3; i++) vpninfo->vpn_dns[i] = vpninfo->vpn_nbns[i] = NULL; - - for (inc = vpninfo->split_includes; inc; ) { - struct split_include *next = inc->next; - free(inc); - inc = next; - } - for (inc = vpninfo->split_excludes; inc; ) { - struct split_include *next = inc->next; - free(inc); - inc = next; - } - for (inc = vpninfo->split_dns; inc; ) { - struct split_include *next = inc->next; - free(inc); - inc = next; - } - vpninfo->split_dns = vpninfo->split_includes = vpninfo->split_excludes = NULL; + cstp_free_splits(vpninfo); /* Create (new) random master key for DTLS connection, if needed */ if (vpninfo->dtls_times.last_rekey + vpninfo->dtls_times.rekey < diff --git a/library.c b/library.c index f4449a3..9b4cb89 100644 --- a/library.c +++ b/library.c @@ -132,6 +132,7 @@ void openconnect_vpninfo_free(struct openconnect_info *vpninfo) free_optlist(vpninfo->cookies); free_optlist(vpninfo->cstp_options); free_optlist(vpninfo->dtls_options); + cstp_free_splits(vpninfo); free(vpninfo->hostname); free(vpninfo->urlpath); free(vpninfo->redirect_url); diff --git a/openconnect-internal.h b/openconnect-internal.h index 7ac3dda..7580264 100644 --- a/openconnect-internal.h +++ b/openconnect-internal.h @@ -410,6 +410,7 @@ int connect_dtls_socket(struct openconnect_info *vpninfo); int cstp_mainloop(struct openconnect_info *vpninfo, int *timeout); int cstp_bye(struct openconnect_info *vpninfo, const char *reason); int cstp_reconnect(struct openconnect_info *vpninfo); +void cstp_free_splits(struct openconnect_info *vpninfo); /* ssl.c */ int connect_https_socket(struct openconnect_info *vpninfo); -- 1.7.9.5