From: Andreas Gnau Date: Sat, 23 May 2020 20:54:43 +0000 (+0200) Subject: nx: Implement logout X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Ff5;p=users%2Fdwmw2%2Fopenconnect.git nx: Implement logout Signed-off-by: Andreas Gnau --- diff --git a/nx.c b/nx.c index acc68c49..b637a3ba 100644 --- a/nx.c +++ b/nx.c @@ -390,6 +390,32 @@ out: int nx_bye(struct openconnect_info *vpninfo, const char *reason) { - // TODO: implement - return -EINVAL; + int ret = 0; + char *resp_buf = NULL; + struct oc_text_buf *request_body = NULL; + /* close tunnel */ + openconnect_close_https(vpninfo, 0); + + request_body = buf_alloc(); + if (!request_body) { + ret = buf_error(request_body); + goto out; + } + append_opt(request_body, "userLogout", "1"); + vpninfo->urlpath = strdup("cgi-bin/userLogout"); + ret = do_https_request(vpninfo, "POST", "application/x-www-form-urlencoded", request_body, &resp_buf, 0); + free(vpninfo->urlpath); + vpninfo->urlpath = NULL; + printf("ret=%d\n", ret); + if (ret < 0) + vpn_progress(vpninfo, PRG_ERR, _("Logout failed.\n")); + else { + ret = 0; + vpn_progress(vpninfo, PRG_INFO, _("Logout successful.\n")); + } + +out: + free(resp_buf); + free(request_body); + return ret; }