Delete CSD script after authentication, use CSD only once
authorDavid Woodhouse <David.Woodhouse@intel.com>
Tue, 21 Jul 2009 08:16:02 +0000 (09:16 +0100)
committerAdam Piątyszek <ediap@users.sourceforge.net>
Tue, 4 Aug 2009 12:05:50 +0000 (14:05 +0200)
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
auth.c
http.c
openconnect.h

diff --git a/auth.c b/auth.c
index 1b6d89b..442ab7d 100644 (file)
--- a/auth.c
+++ b/auth.c
@@ -354,14 +354,14 @@ int parse_xml_response(struct openconnect_info *vpninfo, char *response,
                        ret = parse_form(vpninfo, form, xml_node, request_body, req_len);
                        if (ret < 0)
                                goto out;
-               } else if (!strcmp((char *)xml_node->name, "csd")) {
+               } else if (!vpninfo->csd_scriptname && !strcmp((char *)xml_node->name, "csd")) {
                        if (!vpninfo->csd_token)
                                vpninfo->csd_token = (char *)xmlGetProp(xml_node,
                                                                        (unsigned char *)"token");
                        if (!vpninfo->csd_ticket)
                                vpninfo->csd_ticket = (char *)xmlGetProp(xml_node,
                                                                         (unsigned char *)"ticket");
-               } else if (!strcmp((char *)xml_node->name, "csdLinux")) {
+               } else if (!vpninfo->csd_scriptname && !strcmp((char *)xml_node->name, "csdLinux")) {
                        vpninfo->csd_stuburl = (char *)xmlGetProp(xml_node,
                                                                  (unsigned char *)"stuburl");
                        vpninfo->csd_starturl = (char *)xmlGetProp(xml_node,
diff --git a/http.c b/http.c
index 4f1600a..915b1f8 100644 (file)
--- a/http.c
+++ b/http.c
@@ -330,6 +330,7 @@ static int run_csd_script(struct openconnect_info *vpninfo, char *buf, int bufle
        vpninfo->urlpath = strdup(vpninfo->csd_waiturl +
                                  (vpninfo->csd_waiturl[0] == '/' ? 1 : 0));
        vpninfo->csd_waiturl = NULL;
+       vpninfo->csd_scriptname = strdup(fname);
        return 0;
 }
 
@@ -495,7 +496,11 @@ int openconnect_obtain_cookie(struct openconnect_info *vpninfo)
                                fetch_config(vpninfo, bu, fu, sha);
                }
        }
-
+       if (vpninfo->csd_scriptname) {
+               unlink(vpninfo->csd_scriptname);
+               free(vpninfo->csd_scriptname);
+               vpninfo->csd_scriptname = NULL;
+       }
        return 0;
 }
 
index fe0ab24..c6ed4e4 100644 (file)
@@ -136,6 +136,8 @@ struct openconnect_info {
        char *csd_starturl;
        char *csd_waiturl;
 
+       char *csd_scriptname;
+
        char *vpn_name;
 
        char sid_tokencode[9];