if (!vpninfo)
return NULL;
+ /* Simple initialisations of member variables, no resources acquired!
+ * The calloc() call initializes integer variables to 0. */
+ vpninfo->proto = NULL;
#ifdef HAVE_ICONV
- if (charset && strcmp(charset, "UTF-8")) {
- vpninfo->ic_utf8_to_legacy = iconv_open(charset, "UTF-8");
- vpninfo->ic_legacy_to_utf8 = iconv_open("UTF-8", charset);
- } else {
- vpninfo->ic_utf8_to_legacy = (iconv_t)-1;
- vpninfo->ic_legacy_to_utf8 = (iconv_t)-1;
- }
-#endif
-#ifdef HAVE_VHOST
- vpninfo->vhost_fd = vpninfo->vhost_call_fd = vpninfo->vhost_kick_fd = -1;
+ vpninfo->ic_utf8_to_legacy = (iconv_t)-1;
+ vpninfo->ic_legacy_to_utf8 = (iconv_t)-1;
#endif
-#ifndef _WIN32
- vpninfo->tun_fd = -1;
+ vpninfo->redirect_url = NULL;
+ vpninfo->ppp = NULL;
+ vpninfo->ppp_tls_connect_req = NULL;
+ vpninfo->ppp_dtls_connect_req = NULL;
+ vpninfo->tncc_fd = -1;
+ vpninfo->platname = NULL;
+ vpninfo->mobile_platform_version = NULL;
+ vpninfo->mobile_device_type = NULL;
+ vpninfo->mobile_device_uniqueid = NULL;
+ vpninfo->csd_token = NULL;
+ vpninfo->csd_stuburl = NULL;
+ vpninfo->csd_starturl = NULL;
+ vpninfo->csd_waiturl = NULL;
+ vpninfo->csd_preurl = NULL;
+ vpninfo->csd_scriptname = NULL;
+ vpninfo->opaque_srvdata = NULL;
+ vpninfo->profile_url = NULL;
+ vpninfo->profile_sha1 = NULL;
+#ifdef LIBPROXY_HDR
+ vpninfo->proxy_factory = NULL;
#endif
+ vpninfo->proxy_type = NULL;
+ vpninfo->proxy = NULL;
+ vpninfo->proxy_fd = -1;
+ vpninfo->proxy_user = NULL;
+ vpninfo->proxy_pass = NULL;
+ vpninfo->bearer_token = NULL;
+ vpninfo->try_http_auth = 1;
+ vpninfo->proxy_auth[AUTH_TYPE_BASIC].state = AUTH_DEFAULT_DISABLED;
+ vpninfo->http_auth[AUTH_TYPE_BASIC].state = AUTH_DEFAULT_DISABLED;
#if defined(DEFAULT_EXTERNAL_BROWSER)
vpninfo->external_browser = DEFAULT_EXTERNAL_BROWSER;
+#else
+ vpninfo->external_browser = NULL;
+#endif
+ vpninfo->localname = NULL;
+ vpninfo->unique_hostname = NULL;
+ vpninfo->port = 443;
+ vpninfo->urlpath = NULL;
+ vpninfo->sni = NULL;
+ vpninfo->connect_urlbuf = NULL;
+ vpninfo->cert_expire_warning = 60 * 86400;
+ vpninfo->cafile = NULL;
+ vpninfo->xmlconfig = NULL;
+ vpninfo->authgroup = NULL;
+ vpninfo->xmlpost = 1;
+ vpninfo->dtls_ciphers = NULL;
+ vpninfo->dtls12_ciphers = NULL;
+ vpninfo->csd_wrapper = NULL;
+#ifdef HAVE_LIBSTOKEN
+ vpninfo->stoken_ctx = NULL;
+ vpninfo->stoken_pin = NULL;
#endif
+#ifdef HAVE_LIBPSKC
+ vpninfo->pskc = NULL;
+ vpninfo->pskc_key = NULL;
+#endif
+ vpninfo->oath_secret = NULL;
+#ifdef HAVE_LIBPCSCLITE
+ vpninfo->pcsc = NULL;
+#endif
+ vpninfo->tok_cbdata = NULL;
+ vpninfo->peer_cert = NULL;
+ vpninfo->peer_cert_hash = NULL;
+ vpninfo->cert_list_handle = NULL;
+ vpninfo->cookie = NULL;
+ vpninfo->cstp_options = NULL;
+ vpninfo->dtls_options = NULL;
+ vpninfo->script_env = NULL;
+ vpninfo->csd_env = NULL;
+#if defined(OPENCONNECT_OPENSSL)
+#ifdef HAVE_LIBP11
+ vpninfo->pkcs11_ctx = NULL;
+ vpninfo->pkcs11_slot_list = NULL;
+ vpninfo->pkcs11_cert_slot = NULL;
+ vpninfo->pkcs11_cert_id = NULL;
+#endif
+ vpninfo->cert_x509 = NULL;
+ vpninfo->https_ctx = NULL;
+ vpninfo->https_ssl = NULL;
+ vpninfo->ttls_bio_meth = NULL;
+ vpninfo->strap_key = NULL;
+ vpninfo->strap_dh_key = NULL;
+#endif
+ vpninfo->strap_pubkey = NULL;
+ vpninfo->strap_dh_pubkey = NULL;
+ vpninfo->ciphersuite_config = NULL;
+ vpninfo->ttls_pushbuf = NULL;
+ vpninfo->ttls_recvbuf = NULL;
+ vpninfo->pin_cache = NULL;
+ vpninfo->deflate_pkt = NULL;
+ vpninfo->pending_deflated_pkt = NULL;
+ vpninfo->current_ssl_pkt = NULL;
+ vpninfo->cstp_pkt = NULL;
+ vpninfo->dtls_pkt = NULL;
+ vpninfo->tun_pkt = NULL;
+#if defined(OPENCONNECT_OPENSSL)
+ vpninfo->dtls_ctx = NULL;
+ vpninfo->dtls_ssl = NULL;
+#endif
+ vpninfo->cstp_cipher = NULL;
+ vpninfo->dtls_cipher_desc = NULL;
+ vpninfo->dtls_cipher = NULL;
+ vpninfo->vpnc_script = NULL;
+ vpninfo->ifname = NULL;
+ vpninfo->cmd_ifname = NULL;
+ vpninfo->banner = NULL;
+ vpninfo->ip_info.gateway_addr = NULL;
+#ifdef HAVE_EPOLL
+ vpninfo->epoll_fd = -1;
+#endif
+#ifdef __sun__
+ vpninfo->ip_fd = -1;
+ vpninfo->ip6_fd = -1;
+#endif
+#ifdef HAVE_VHOST
+ vpninfo->vhost_fd = -1;
+ vpninfo->vhost_call_fd = -1;
+ vpninfo->vhost_kick_fd = -1;
+#endif
+#ifdef _WIN32
+ vpninfo->ifname_w = NULL;
+ vpninfo->tun_fh = INVALID_HANDLE_VALUE;
+#else
+ vpninfo->tun_fd = -1;
+#endif
+ vpninfo->ssl_fd = -1;
+ vpninfo->dtls_fd = -1;
+ vpninfo->need_poll_cmd_fd = -1;
+ vpninfo->cmd_fd = -1;
init_pkt_queue(&vpninfo->free_queue);
init_pkt_queue(&vpninfo->incoming_queue);
init_pkt_queue(&vpninfo->outgoing_queue);
init_pkt_queue(&vpninfo->tcp_control_queue);
- vpninfo->dtls_tos_current = 0;
- vpninfo->dtls_pass_tos = 0;
- vpninfo->ssl_fd = vpninfo->dtls_fd = -1;
- vpninfo->cmd_fd = vpninfo->cmd_fd_write = -1;
- vpninfo->tncc_fd = -1;
- vpninfo->cert_expire_warning = 60 * 86400;
- vpninfo->req_compr = COMPR_STATELESS;
vpninfo->max_qlen = 32; /* >=16 will enable vhost-net on Linux */
- vpninfo->localname = strdup("localhost");
- vpninfo->port = 443;
- vpninfo->useragent = openconnect_create_useragent(useragent);
+ vpninfo->peer_addr = NULL;
+ vpninfo->dtls_addr = NULL;
+ vpninfo->req_compr = COMPR_STATELESS;
+ vpninfo->useragent = NULL;
+ vpninfo->version_string = NULL;
+ vpninfo->quit_reason = NULL;
+ vpninfo->delay_tunnel_reason = NULL;
+ vpninfo->sso_login = NULL;
+ vpninfo->sso_login_final = NULL;
+ vpninfo->sso_username = NULL;
+ vpninfo->sso_token_cookie = NULL;
+ vpninfo->sso_error_cookie = NULL;
+ vpninfo->sso_cookie_value = NULL;
+ vpninfo->sso_browser_mode = NULL;
+ vpninfo->verbose = PRG_TRACE;
+ vpninfo->cbdata = privdata ? : vpninfo;
vpninfo->validate_peer_cert = validate_peer_cert;
vpninfo->write_new_config = write_new_config;
vpninfo->process_auth_form = process_auth_form;
vpninfo->progress = progress;
- vpninfo->cbdata = privdata ? : vpninfo;
- vpninfo->xmlpost = 1;
- vpninfo->verbose = PRG_TRACE;
- vpninfo->try_http_auth = 1;
- vpninfo->proxy_auth[AUTH_TYPE_BASIC].state = AUTH_DEFAULT_DISABLED;
- vpninfo->http_auth[AUTH_TYPE_BASIC].state = AUTH_DEFAULT_DISABLED;
+ vpninfo->ssl_read = NULL;
+ vpninfo->ssl_gets = NULL;
+ vpninfo->ssl_write = NULL;
+#ifdef HAVE_VHOST
+ vpninfo->vhost_fd = vpninfo->vhost_call_fd = vpninfo->vhost_kick_fd = -1;
+#endif
+
+ /* Initialisations of member variables that acquire resources. */
+#ifdef HAVE_ICONV
+ if (charset && strcmp(charset, "UTF-8")) {
+ if ((vpninfo->ic_utf8_to_legacy = iconv_open(charset, "UTF-8")) == (iconv_t)-1)
+ goto err;
+ if ((vpninfo->ic_legacy_to_utf8 = iconv_open("UTF-8", charset)) == (iconv_t)-1)
+ goto err;
+ }
+#endif
+ if (!(vpninfo->localname = strdup("localhost")))
+ goto err;
+ if (!(vpninfo->useragent = openconnect_create_useragent(useragent)))
+ goto err;
openconnect_set_reported_os(vpninfo, NULL);
+ if (!vpninfo->platname)
+ goto err;
#ifdef HAVE_EPOLL
- vpninfo->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
-#endif
- if (!vpninfo->localname || !vpninfo->useragent)
+ if ((vpninfo->epoll_fd = epoll_create1(EPOLL_CLOEXEC)) == -1)
goto err;
+#endif
#ifdef ENABLE_NLS
bindtextdomain("openconnect", LOCALEDIR);
return vpninfo;
err:
- free(vpninfo->platname);
- free(vpninfo->useragent);
- free(vpninfo->localname);
-#ifdef HAVE_ICONV
- if (vpninfo->ic_legacy_to_utf8 != (iconv_t)-1)
- iconv_close(vpninfo->ic_legacy_to_utf8);
- if (vpninfo->ic_utf8_to_legacy != (iconv_t)-1)
- iconv_close(vpninfo->ic_legacy_to_utf8);
-#endif
- free(vpninfo);
+ openconnect_vpninfo_free(vpninfo);
return NULL;
}
#elif defined(OPENCONNECT_GNUTLS)
gnutls_x509_crt_deinit(vpninfo->peer_cert);
#endif
- vpninfo->peer_cert = NULL;
}
while (vpninfo->pin_cache) {
struct pin_cache *cache = vpninfo->pin_cache;