mirror of
https://github.com/yuezk/GlobalProtect-openconnect.git
synced 2025-04-02 18:31:50 -04:00
fix: sslkey not working (related #363)
This commit is contained in:
parent
66270eee77
commit
6caa8fcd84
@ -16,7 +16,7 @@ static vpn_connected_callback on_vpn_connected;
|
|||||||
/* Validate the peer certificate */
|
/* Validate the peer certificate */
|
||||||
static int validate_peer_cert(__attribute__((unused)) void *_vpninfo, const char *reason)
|
static int validate_peer_cert(__attribute__((unused)) void *_vpninfo, const char *reason)
|
||||||
{
|
{
|
||||||
INFO("Validating peer cert: %s", reason);
|
INFO("Accepting the server certificate though %s", reason);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,12 +28,9 @@ static void print_progress(__attribute__((unused)) void *_vpninfo, int level, co
|
|||||||
char *message = format_message(format, args);
|
char *message = format_message(format, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
if (message == NULL)
|
if (message == NULL) {
|
||||||
{
|
|
||||||
ERROR("Failed to format log message");
|
ERROR("Failed to format log message");
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG(level, message);
|
LOG(level, message);
|
||||||
free(message);
|
free(message);
|
||||||
}
|
}
|
||||||
@ -63,16 +60,13 @@ int vpn_connect(const vpn_options *options, vpn_connected_callback callback)
|
|||||||
INFO("OS: %s", options->os);
|
INFO("OS: %s", options->os);
|
||||||
INFO("CSD_USER: %d", options->csd_uid);
|
INFO("CSD_USER: %d", options->csd_uid);
|
||||||
INFO("CSD_WRAPPER: %s", options->csd_wrapper);
|
INFO("CSD_WRAPPER: %s", options->csd_wrapper);
|
||||||
INFO("CERTIFICATE: %s", options->certificate);
|
|
||||||
INFO("SSLKEY: %s", options->sslkey);
|
|
||||||
INFO("RECONNECT_TIMEOUT: %d", options->reconnect_timeout);
|
INFO("RECONNECT_TIMEOUT: %d", options->reconnect_timeout);
|
||||||
INFO("MTU: %d", options->mtu);
|
INFO("MTU: %d", options->mtu);
|
||||||
INFO("DISABLE_IPV6: %d", options->disable_ipv6);
|
INFO("DISABLE_IPV6: %d", options->disable_ipv6);
|
||||||
|
|
||||||
vpninfo = openconnect_vpninfo_new(options->user_agent, validate_peer_cert, NULL, NULL, print_progress, NULL);
|
vpninfo = openconnect_vpninfo_new(options->user_agent, validate_peer_cert, NULL, NULL, print_progress, NULL);
|
||||||
|
|
||||||
if (!vpninfo)
|
if (!vpninfo) {
|
||||||
{
|
|
||||||
ERROR("openconnect_vpninfo_new failed");
|
ERROR("openconnect_vpninfo_new failed");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -82,25 +76,18 @@ int vpn_connect(const vpn_options *options, vpn_connected_callback callback)
|
|||||||
openconnect_set_protocol(vpninfo, "gp");
|
openconnect_set_protocol(vpninfo, "gp");
|
||||||
openconnect_set_hostname(vpninfo, options->server);
|
openconnect_set_hostname(vpninfo, options->server);
|
||||||
openconnect_set_cookie(vpninfo, options->cookie);
|
openconnect_set_cookie(vpninfo, options->cookie);
|
||||||
openconnect_set_client_cert(vpninfo, options->certificate, options->sslkey);
|
|
||||||
|
|
||||||
if (options->key_password) {
|
|
||||||
openconnect_set_key_password(vpninfo, options->key_password);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options->os) {
|
if (options->os) {
|
||||||
openconnect_set_reported_os(vpninfo, options->os);
|
openconnect_set_reported_os(vpninfo, options->os);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options->certificate)
|
if (options->certificate) {
|
||||||
{
|
|
||||||
INFO("Setting client certificate: %s", options->certificate);
|
INFO("Setting client certificate: %s", options->certificate);
|
||||||
openconnect_set_client_cert(vpninfo, options->certificate, NULL);
|
openconnect_set_client_cert(vpninfo, options->certificate, options->sslkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options->servercert) {
|
if (options->key_password) {
|
||||||
INFO("Setting server certificate: %s", options->servercert);
|
openconnect_set_key_password(vpninfo, options->key_password);
|
||||||
openconnect_set_system_trust(vpninfo, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options->csd_wrapper) {
|
if (options->csd_wrapper) {
|
||||||
@ -117,38 +104,32 @@ int vpn_connect(const vpn_options *options, vpn_connected_callback callback)
|
|||||||
}
|
}
|
||||||
|
|
||||||
g_cmd_pipe_fd = openconnect_setup_cmd_pipe(vpninfo);
|
g_cmd_pipe_fd = openconnect_setup_cmd_pipe(vpninfo);
|
||||||
if (g_cmd_pipe_fd < 0)
|
if (g_cmd_pipe_fd < 0) {
|
||||||
{
|
|
||||||
ERROR("openconnect_setup_cmd_pipe failed");
|
ERROR("openconnect_setup_cmd_pipe failed");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!uname(&utsbuf))
|
if (!uname(&utsbuf)) {
|
||||||
{
|
|
||||||
openconnect_set_localname(vpninfo, utsbuf.nodename);
|
openconnect_set_localname(vpninfo, utsbuf.nodename);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Essential step
|
// Essential step
|
||||||
if (openconnect_make_cstp_connection(vpninfo) != 0)
|
if (openconnect_make_cstp_connection(vpninfo) != 0) {
|
||||||
{
|
|
||||||
ERROR("openconnect_make_cstp_connection failed");
|
ERROR("openconnect_make_cstp_connection failed");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (openconnect_setup_dtls(vpninfo, 60) != 0)
|
if (openconnect_setup_dtls(vpninfo, 60) != 0) {
|
||||||
{
|
|
||||||
openconnect_disable_dtls(vpninfo);
|
openconnect_disable_dtls(vpninfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Essential step
|
// Essential step
|
||||||
openconnect_set_setup_tun_handler(vpninfo, setup_tun_handler);
|
openconnect_set_setup_tun_handler(vpninfo, setup_tun_handler);
|
||||||
|
|
||||||
while (1)
|
while (1) {
|
||||||
{
|
|
||||||
int ret = openconnect_mainloop(vpninfo, options->reconnect_timeout, 10);
|
int ret = openconnect_mainloop(vpninfo, options->reconnect_timeout, 10);
|
||||||
|
|
||||||
if (ret)
|
if (ret) {
|
||||||
{
|
|
||||||
INFO("openconnect_mainloop returned %d, exiting", ret);
|
INFO("openconnect_mainloop returned %d, exiting", ret);
|
||||||
openconnect_vpninfo_free(vpninfo);
|
openconnect_vpninfo_free(vpninfo);
|
||||||
return ret;
|
return ret;
|
||||||
@ -165,8 +146,7 @@ void vpn_disconnect()
|
|||||||
|
|
||||||
INFO("Stopping VPN connection: %d", g_cmd_pipe_fd);
|
INFO("Stopping VPN connection: %d", g_cmd_pipe_fd);
|
||||||
|
|
||||||
if (write(g_cmd_pipe_fd, &cmd, 1) < 0)
|
if (write(g_cmd_pipe_fd, &cmd, 1) < 0) {
|
||||||
{
|
|
||||||
ERROR("Failed to write to command pipe, VPN connection may not be stopped");
|
ERROR("Failed to write to command pipe, VPN connection may not be stopped");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user