Compare commits

...

3 Commits

Author SHA1 Message Date
Kevin Yue
a25b5cb894 Release 2.3.1 2024-05-21 20:28:04 +08:00
Kevin Yue
6caa8fcd84 fix: sslkey not working (related #363) 2024-05-21 20:26:37 +08:00
Kevin Yue
66270eee77 chore: update CI 2024-05-20 22:12:03 +08:00
5 changed files with 29 additions and 44 deletions

View File

@ -68,7 +68,8 @@ jobs:
- tarball - tarball
strategy: strategy:
matrix: matrix:
os: ${{fromJson(needs.setup-matrix.outputs.matrix)}} # Only build gp on amd64, as the arm64 package will be built in release.yaml
os: [{runner: ubuntu-latest, arch: amd64}]
package: [deb, rpm, pkg, binary] package: [deb, rpm, pkg, binary]
runs-on: ${{ matrix.os.runner }} runs-on: ${{ matrix.os.runner }}
name: build-gp (${{ matrix.package }}, ${{ matrix.os.arch }}) name: build-gp (${{ matrix.package }}, ${{ matrix.os.arch }})

14
Cargo.lock generated
View File

@ -570,7 +570,7 @@ dependencies = [
[[package]] [[package]]
name = "common" name = "common"
version = "2.3.0" version = "2.3.1"
dependencies = [ dependencies = [
"is_executable", "is_executable",
] ]
@ -1436,7 +1436,7 @@ dependencies = [
[[package]] [[package]]
name = "gpapi" name = "gpapi"
version = "2.3.0" version = "2.3.1"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"base64 0.21.5", "base64 0.21.5",
@ -1470,7 +1470,7 @@ dependencies = [
[[package]] [[package]]
name = "gpauth" name = "gpauth"
version = "2.3.0" version = "2.3.1"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"clap", "clap",
@ -1491,7 +1491,7 @@ dependencies = [
[[package]] [[package]]
name = "gpclient" name = "gpclient"
version = "2.3.0" version = "2.3.1"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"clap", "clap",
@ -1513,7 +1513,7 @@ dependencies = [
[[package]] [[package]]
name = "gpgui-helper" name = "gpgui-helper"
version = "2.3.0" version = "2.3.1"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"clap", "clap",
@ -1531,7 +1531,7 @@ dependencies = [
[[package]] [[package]]
name = "gpservice" name = "gpservice"
version = "2.3.0" version = "2.3.1"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"axum", "axum",
@ -2545,7 +2545,7 @@ dependencies = [
[[package]] [[package]]
name = "openconnect" name = "openconnect"
version = "2.3.0" version = "2.3.1"
dependencies = [ dependencies = [
"cc", "cc",
"common", "common",

View File

@ -5,7 +5,7 @@ members = ["crates/*", "apps/gpclient", "apps/gpservice", "apps/gpauth", "apps/g
[workspace.package] [workspace.package]
rust-version = "1.70" rust-version = "1.70"
version = "2.3.0" version = "2.3.1"
authors = ["Kevin Yue <k3vinyue@gmail.com>"] authors = ["Kevin Yue <k3vinyue@gmail.com>"]
homepage = "https://github.com/yuezk/GlobalProtect-openconnect" homepage = "https://github.com/yuezk/GlobalProtect-openconnect"
edition = "2021" edition = "2021"

View File

@ -1,5 +1,9 @@
# Changelog # Changelog
## 2.3.1 - 2024-05-21
- Fix the `--sslkey` option not working
## 2.3.0 - 2024-05-20 ## 2.3.0 - 2024-05-20
- Support client certificate authentication (fix [#363](https://github.com/yuezk/GlobalProtect-openconnect/issues/363)) - Support client certificate authentication (fix [#363](https://github.com/yuezk/GlobalProtect-openconnect/issues/363))

View File

@ -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");
} }
} }