diff --git a/http.c b/http.c index def8b9dd..50816b8e 100644 --- a/http.c +++ b/http.c @@ -706,6 +706,8 @@ static void clear_cookies(struct openconnect_info *vpninfo) */ static int handle_redirect(struct openconnect_info *vpninfo) { + vpninfo->redirect_type = REDIR_TYPE_LOCAL; + if (!strncmp(vpninfo->redirect_url, "https://", 8)) { /* New host. Tear down the existing connection and make a new one */ char *host; @@ -735,6 +737,7 @@ static int handle_redirect(struct openconnect_info *vpninfo) vpninfo->peer_addr = NULL; openconnect_close_https(vpninfo, 0); clear_cookies(vpninfo); + vpninfo->redirect_type = REDIR_TYPE_NEWHOST; } else free(host); @@ -805,6 +808,8 @@ static int do_https_request(struct openconnect_info *vpninfo, const char *method int result, buflen; retry: + vpninfo->redirect_type = REDIR_TYPE_NONE; + if (*form_buf) { free(*form_buf); *form_buf = NULL; diff --git a/openconnect-internal.h b/openconnect-internal.h index f1a3fb63..4b4c4550 100644 --- a/openconnect-internal.h +++ b/openconnect-internal.h @@ -129,8 +129,13 @@ struct pin_cache { #define CERT_TYPE_PKCS12 2 #define CERT_TYPE_TPM 3 +#define REDIR_TYPE_NONE 0 +#define REDIR_TYPE_NEWHOST 1 +#define REDIR_TYPE_LOCAL 2 + struct openconnect_info { char *redirect_url; + int redirect_type; const char *csd_xmltag; const char *platname;