vpninfo->cookie = cookie->data;
cookie->data = NULL;
- buf_free(cookie);
- return 0;
+ return buf_free(cookie);
err_out:
free(value);
}
buf_append(buf, " </ServerList>\n</GPPortal>\n");
- if (vpninfo->write_new_config && !buf_error(buf))
- result = vpninfo->write_new_config(vpninfo->cbdata, buf->data, buf->pos);
- buf_free(buf);
+ if (vpninfo->write_new_config) {
+ result = buf_error(buf);
+ if (!result)
+ result = vpninfo->write_new_config(vpninfo->cbdata, buf->data, buf->pos);
+ buf_free(buf);
+ if (result)
+ goto out;
+ }
/* process static auth form to select gateway */
result = process_auth_form(vpninfo, &form);
if (auth_id)
append_opt(request_body, "inputStr", form->auth_id);
append_form_opts(vpninfo, form, request_body);
+ if ((result = buf_error(request_body)))
+ goto out;
orig_path = vpninfo->urlpath;
vpninfo->urlpath = strdup(portal ? "global-protect/getconfig.esp" : "ssl-vpn/login.esp");
*/
append_opt(request_body, "computer", vpninfo->localname);
buf_append(request_body, "&%s", vpninfo->cookie);
+ if ((result = buf_error(request_body)))
+ goto out;
/* We need to close and reopen the HTTPS connection (to kill
* the tunnel session) and submit a new HTTPS request to
else
vpn_progress(vpninfo, PRG_INFO, _("Logout successful\n"));
+out:
buf_free(request_body);
free(xml_buf);
return result;
filter_opts(request_body, vpninfo->cookie, "preferred-ip", 0);
} else
buf_append(request_body, "&%s", vpninfo->cookie);
+ if ((result = buf_error(request_body)))
+ goto out;
orig_path = vpninfo->urlpath;
vpninfo->urlpath = strdup("ssl-vpn/getconfig.esp");
{
int ret;
struct oc_text_buf *reqbuf;
+ const char start_tunnel[12] = "START_TUNNEL"; /* NOT zero-terminated */
char buf[256];
/* Connect to SSL VPN tunnel */
buf_append(reqbuf, "GET %s?", vpninfo->urlpath);
filter_opts(reqbuf, vpninfo->cookie, "user,authcookie", 1);
buf_append(reqbuf, " HTTP/1.1\r\n\r\n");
+ if ((ret = buf_error(reqbuf)))
+ goto out;
if (vpninfo->dump_http_traffic)
dump_buf(vpninfo, '>', reqbuf->data);
vpninfo->ssl_write(vpninfo, reqbuf->data, reqbuf->pos);
- buf_free(reqbuf);
if ((ret = vpninfo->ssl_read(vpninfo, buf, 12)) < 0) {
if (ret == -EINTR)
- return ret;
+ goto out;
vpn_progress(vpninfo, PRG_ERR,
_("Error fetching GET-tunnel HTTPS response.\n"));
- return -EINVAL;
+ ret = -EINVAL;
+ goto out;
}
- if (!strncmp(buf, "START_TUNNEL", 12)) {
+ if (!strncmp(buf, start_tunnel, sizeof(start_tunnel))) {
ret = 0;
} else if (ret==0) {
vpn_progress(vpninfo, PRG_ERR,
_("Gateway disconnected immediately after GET-tunnel request.\n"));
ret = -EPIPE;
} else {
- if (ret==12) {
- ret = vpninfo->ssl_gets(vpninfo, buf+12, 244);
- ret = (ret>0 ? ret : 0) + 12;
+ if (ret==sizeof(start_tunnel)) {
+ ret = vpninfo->ssl_gets(vpninfo, buf+sizeof(start_tunnel), sizeof(buf)-sizeof(start_tunnel));
+ ret = (ret>0 ? ret : 0) + sizeof(start_tunnel);
}
vpn_progress(vpninfo, PRG_ERR,
_("Got inappropriate HTTP GET-tunnel response: %.*s\n"), ret, buf);
vpninfo->proto->udp_close(vpninfo);
}
+out:
+ buf_free(reqbuf);
return ret;
}
buf = buf_alloc();
append_opt(buf, "computer", vpninfo->localname);
filter_opts(buf, vpninfo->cookie, "authcookie,preferred-ip", 0);
+ if (buf_error(buf))
+ goto out;
/* save as csd_token */
openconnect_md5(md5, buf->data, buf->pos);
for (i=0; i < MD5_SIZE; i++)
sprintf(&vpninfo->csd_token[i*2], "%02x", md5[i]);
+out:
return buf_free(buf);
}
goto out;
append_opt(request_body, "md5", vpninfo->csd_token);
}
+ if ((result = buf_error(request_body)))
+ goto out;
orig_path = vpninfo->urlpath;
vpninfo->urlpath = strdup(report ? "ssl-vpn/hipreport.esp" : "ssl-vpn/hipreportcheck.esp");