From 81f1fceaf22493e2f3b6317fed4b73fd272c34ab Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 8 Oct 2018 20:14:42 +0100 Subject: [PATCH] Post CSD results even when no other auth is needed. Signed-off-by: David Woodhouse --- auth.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/auth.c b/auth.c index 799a031e..fe263168 100644 --- a/auth.c +++ b/auth.c @@ -417,6 +417,12 @@ static int parse_auth_node(struct openconnect_info *vpninfo, xmlNode *xml_node, } else if (!vpninfo->csd_scriptname && xmlnode_is_named(xml_node, "csd")) { xmlnode_get_prop(xml_node, "token", &vpninfo->csd_token); xmlnode_get_prop(xml_node, "ticket", &vpninfo->csd_ticket); + } else if (xmlnode_is_named(xml_node, "authentication-complete")) { + /* Ick. Since struct oc_auth_form is public there's no + * simple way to add a flag to it. So let's abuse the + * auth_id string instead. */ + free(form->auth_id); + form->auth_id = strdup("openconnect_authentication_complete"); } /* For Windows, vpninfo->csd_xmltag will be "csd" and there are *two* nodes; one with token/ticket and one with the URLs. Process them both @@ -648,6 +654,8 @@ static int handle_auth_form(struct openconnect_info *vpninfo, struct oc_auth_for vpn_progress(vpninfo, PRG_INFO, "%s\n", form->message); if (form->error) vpn_progress(vpninfo, PRG_ERR, "%s\n", form->error); + if (!strcmp(form->auth_id, "openconnect_authentication_complete")) + goto justpost; return -EPERM; } @@ -662,7 +670,7 @@ static int handle_auth_form(struct openconnect_info *vpninfo, struct oc_auth_for vpninfo->token_bypassed = 1; return ret; } - + justpost: ret = vpninfo->xmlpost ? xmlpost_append_form_opts(vpninfo, form, request_body) : append_form_opts(vpninfo, form, request_body);