void OpenconnectAuthWidget::readConfig() { Q_D(OpenconnectAuthWidget); const NMStringMap dataMap = d->setting->data(); if (!dataMap[NM_OPENCONNECT_KEY_GATEWAY].isEmpty()) { const QString gw = dataMap[NM_OPENCONNECT_KEY_GATEWAY]; VPNHost host; const int index = gw.indexOf(QLatin1Char('/')); if (index > -1) { host.name = host.address = gw.left(index); host.group = gw.right(gw.length() - index - 1); } else { host.name = host.address = gw; } d->hosts.append(host); } if (!dataMap[NM_OPENCONNECT_KEY_CACERT].isEmpty()) { const QByteArray crt = QFile::encodeName(dataMap[NM_OPENCONNECT_KEY_CACERT]); openconnect_set_cafile(d->vpninfo, OC3DUP(crt.data())); } if (dataMap[NM_OPENCONNECT_KEY_CSD_ENABLE] == "yes") { char *wrapper; wrapper = 0; if (!dataMap[NM_OPENCONNECT_KEY_CSD_WRAPPER].isEmpty()) { const QByteArray wrapperScript = QFile::encodeName(dataMap[NM_OPENCONNECT_KEY_CSD_WRAPPER]); wrapper = strdup(wrapperScript.data()); } openconnect_setup_csd(d->vpninfo, getuid(), 1, wrapper); } if (!dataMap[NM_OPENCONNECT_KEY_PROXY].isEmpty()) { const QByteArray proxy = QFile::encodeName(dataMap[NM_OPENCONNECT_KEY_PROXY]); openconnect_set_http_proxy(d->vpninfo, OC3DUP(proxy.data())); } if (!dataMap[NM_OPENCONNECT_KEY_USERCERT].isEmpty()) { const QByteArray crt = QFile::encodeName(dataMap[NM_OPENCONNECT_KEY_USERCERT]); const QByteArray key = QFile::encodeName(dataMap[NM_OPENCONNECT_KEY_PRIVKEY]); openconnect_set_client_cert (d->vpninfo, OC3DUP(crt.data()), OC3DUP(key.data())); if (!crt.isEmpty() && dataMap[NM_OPENCONNECT_KEY_PEM_PASSPHRASE_FSID] == "yes") { openconnect_passphrase_from_fsid(d->vpninfo); } } if (!dataMap[NM_OPENCONNECT_KEY_PROTOCOL].isEmpty()) { const QString protocol = dataMap[NM_OPENCONNECT_KEY_PROTOCOL] == "juniper" ? "nc" : "anyconnect"; openconnect_set_protocol(d->vpninfo, OC3DUP(protocol.toUtf8().data())); } }
struct openconnect_info *openconnect_vpninfo_new(const char *useragent, openconnect_validate_peer_cert_vfn validate_peer_cert, openconnect_write_new_config_vfn write_new_config, openconnect_process_auth_form_vfn process_auth_form, openconnect_progress_vfn progress, void *privdata) { struct openconnect_info *vpninfo = calloc(sizeof(*vpninfo), 1); #ifdef HAVE_ICONV char *charset = nl_langinfo(CODESET); #endif if (!vpninfo) return 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 #ifndef _WIN32 vpninfo->tun_fd = -1; #endif init_pkt_queue(&vpninfo->incoming_queue); init_pkt_queue(&vpninfo->outgoing_queue); init_pkt_queue(&vpninfo->oncp_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 = 10; vpninfo->localname = strdup("localhost"); vpninfo->useragent = openconnect_create_useragent(useragent); 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; openconnect_set_reported_os(vpninfo, NULL); if (!vpninfo->localname || !vpninfo->useragent) goto err; #ifdef ENABLE_NLS bindtextdomain("openconnect", LOCALEDIR); #endif openconnect_set_protocol(vpninfo, "anyconnect"); return vpninfo; err: free(vpninfo->localname); free(vpninfo->useragent); free(vpninfo); return NULL; }