]> www.infradead.org Git - users/dwmw2/openconnect.git/commitdiff
Post CSD results even when no other auth is needed.
authorDavid Woodhouse <dwmw2@infradead.org>
Mon, 8 Oct 2018 19:14:42 +0000 (20:14 +0100)
committerDavid Woodhouse <dwmw2@infradead.org>
Mon, 8 Oct 2018 19:17:58 +0000 (20:17 +0100)
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
auth.c

diff --git a/auth.c b/auth.c
index 799a031eaa006fb600d4b5cbc72d0238f745f1ae..fe263168d82c64a776f584ba4f4f8dca0e979eaa 100644 (file)
--- 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* <csd>
                   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);