auth: Introduce new XML helper functions for parse_auth_node()
[platform/upstream/openconnect.git] / openssl.c
index 851a711..6acdf5c 100644 (file)
--- a/openssl.c
+++ b/openssl.c
@@ -107,7 +107,7 @@ int openconnect_SSL_write(struct openconnect_info *vpninfo, char *buf, size_t le
                        else if (err == SSL_ERROR_WANT_WRITE)
                                FD_SET(vpninfo->ssl_fd, &wr_set);
                        else {
-                               vpn_progress(vpninfo, PRG_ERR, _("Failed to write to SSL socket"));
+                               vpn_progress(vpninfo, PRG_ERR, _("Failed to write to SSL socket\n"));
                                openconnect_report_ssl_errors(vpninfo);
                                return -EIO;
                        }
@@ -1298,6 +1298,9 @@ int openconnect_open_https(struct openconnect_info *vpninfo)
                        if (err) {
                                vpn_progress(vpninfo, PRG_ERR,
                                             _("Loading certificate failed. Aborting.\n"));
+                               SSL_CTX_free(vpninfo->https_ctx);
+                               vpninfo->https_ctx = NULL;
+                               close(ssl_sock);
                                return err;
                        }
                        check_certificate_expiry(vpninfo);
@@ -1325,6 +1328,8 @@ int openconnect_open_https(struct openconnect_info *vpninfo)
                        BIO *b = BIO_from_keystore(vpninfo, vpninfo->cafile);
 
                        if (!b) {
+                               SSL_CTX_free(vpninfo->https_ctx);
+                               vpninfo->https_ctx = NULL;
                                close(ssl_sock);
                                return -EINVAL;
                        }
@@ -1337,6 +1342,8 @@ int openconnect_open_https(struct openconnect_info *vpninfo)
                                             _("Failed to read certs from CA file '%s'\n"),
                                             vpninfo->cafile);
                                openconnect_report_ssl_errors(vpninfo);
+                               SSL_CTX_free(vpninfo->https_ctx);
+                               vpninfo->https_ctx = NULL;
                                close(ssl_sock);
                                return -ENOENT;
                        }
@@ -1359,6 +1366,8 @@ int openconnect_open_https(struct openconnect_info *vpninfo)
                                             _("Failed to open CA file '%s'\n"),
                                             vpninfo->cafile);
                                openconnect_report_ssl_errors(vpninfo);
+                               SSL_CTX_free(vpninfo->https_ctx);
+                               vpninfo->https_ctx = NULL;
                                close(ssl_sock);
                                return -EINVAL;
                        }
@@ -1378,7 +1387,7 @@ int openconnect_open_https(struct openconnect_info *vpninfo)
        while ((err = SSL_connect(https_ssl)) <= 0) {
                fd_set wr_set, rd_set;
                int maxfd = ssl_sock;
-               
+
                FD_ZERO(&wr_set);
                FD_ZERO(&rd_set);