]> www.infradead.org Git - users/dwmw2/openconnect.git/log
users/dwmw2/openconnect.git
4 years agomake buf_append_{be16,be32,le16} global
Daniel Lenski [Fri, 8 May 2020 07:11:51 +0000 (00:11 -0700)]
make buf_append_{be16,be32,le16} global

These functions are already used by both oNCP and Pulse protocols,
and will be used by PPP protocols as well. Make them shared/global.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoFix printf types in stats output
David Woodhouse [Sat, 27 Mar 2021 15:01:58 +0000 (15:01 +0000)]
Fix printf types in stats output

More build warnings, not even just on Windows this time.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoCast GetVolumeInformationByHandleW to (void *)
David Woodhouse [Sat, 27 Mar 2021 15:00:34 +0000 (15:00 +0000)]
Cast GetVolumeInformationByHandleW to (void *)

The 64-bit Windows build was complaining of pointer type mismatches but
I'm fairly sure it was a false positive:

../ssl.c: In function 'openconnect_passphrase_from_fsid':
../ssl.c:598:9: warning: cast between incompatible function types from 'FARPROC' {aka 'long long int (*)()'} to 'BOOL (*)(void *, WCHAR *, DWORD,  DWORD *, DWORD *, DWORD *, WCHAR *, DWORD)' {aka 'int (*)(void *, short unsigned int *, long unsigned int,  long unsigned int *, long unsigned int *, long unsigned int *, short unsigned int *, long unsigned int)'} [-Wcast-function-type]
  598 |  func = (GVIBH)GetProcAddress(kernlib, "GetVolumeInformationByHandleW");
      |         ^

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoResync translations with sources
David Woodhouse [Sat, 27 Mar 2021 10:36:35 +0000 (10:36 +0000)]
Resync translations with sources

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoUpdate translations from GNOME
David Woodhouse [Sat, 27 Mar 2021 10:36:18 +0000 (10:36 +0000)]
Update translations from GNOME

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoFix non-Windows compilation. I hate autoconf.
David Woodhouse [Sat, 27 Mar 2021 10:31:55 +0000 (10:31 +0000)]
Fix non-Windows compilation. I hate autoconf.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoMerge branch 'no_more_X-AnyConnect-Platform_header' of gitlab.com:openconnect/openconnect
David Woodhouse [Sat, 27 Mar 2021 10:06:06 +0000 (10:06 +0000)]
Merge branch 'no_more_X-AnyConnect-Platform_header' of gitlab.com:openconnect/openconnect

4 years agoFix Windows build warning: No %zd for size_t on Windows
David Woodhouse [Sat, 27 Mar 2021 09:44:18 +0000 (09:44 +0000)]
Fix Windows build warning: No %zd for size_t on Windows

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoFix Win32 build warnings about _putenv_s() redeclaration
David Woodhouse [Sat, 27 Mar 2021 09:36:41 +0000 (09:36 +0000)]
Fix Win32 build warnings about _putenv_s() redeclaration

../compat.c:30:9: error: '_putenv_s' redeclared without dllimport attribute: previous dllimport ignored [-Werror=attributes]
   30 | errno_t _putenv_s(
      |         ^~~~~~~~~

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoMerge branch 'handle_GP_cookie_rejected_errors' of gitlab.com:openconnect/openconnect
David Woodhouse [Sat, 27 Mar 2021 10:04:03 +0000 (10:04 +0000)]
Merge branch 'handle_GP_cookie_rejected_errors' of gitlab.com:openconnect/openconnect

4 years agoadd link to online documentation, put TAP-Windows in named section, and… changelog
Daniel Lenski [Fri, 26 Mar 2021 18:49:38 +0000 (11:49 -0700)]
add link to online documentation, put TAP-Windows in named section, and… changelog

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoCI: update artifact paths for MinGW* builds
Daniel Lenski [Fri, 26 Mar 2021 17:56:23 +0000 (10:56 -0700)]
CI: update artifact paths for MinGW* builds

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'master' into build_NSIS_based_installers_for_32bit_Windows
Daniel Lenski [Fri, 26 Mar 2021 17:50:19 +0000 (10:50 -0700)]
Merge branch 'master' into build_NSIS_based_installers_for_32bit_Windows

4 years agoremove now-unneeded make-windows-installer.sh, re-embed vpnc-script-win.js, embed...
Daniel Lenski [Fri, 26 Mar 2021 16:48:38 +0000 (09:48 -0700)]
remove now-unneeded make-windows-installer.sh, re-embed vpnc-script-win.js, embed OpenVPN TAP-Windows installer

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoset OCCTL_SOCKET in tests/common.sh, if unset
Daniel Lenski [Fri, 26 Mar 2021 17:46:08 +0000 (10:46 -0700)]
set OCCTL_SOCKET in tests/common.sh, if unset

This way, individual test scripts don't need to all set it identically.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agofix pfs and obsolete-server-crypto tests on Ubuntu
Daniel Lenski [Fri, 26 Mar 2021 17:33:40 +0000 (10:33 -0700)]
fix pfs and obsolete-server-crypto tests on Ubuntu

These broke in 32e97b4cfa6ae140a25f7ab3e56f9d61e400b50e, due to the removal of the default ocserv socket-file

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoActually create installer packages for MinGW builds
David Woodhouse [Fri, 26 Mar 2021 16:55:09 +0000 (16:55 +0000)]
Actually create installer packages for MinGW builds

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoFix up NSIS ProductVersion for RPM version strings
David Woodhouse [Fri, 26 Mar 2021 16:29:54 +0000 (16:29 +0000)]
Fix up NSIS ProductVersion for RPM version strings

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoFix obsolete-server-crypto in the GnuTLS build not the OpenSSL one.
David Woodhouse [Fri, 26 Mar 2021 15:54:39 +0000 (15:54 +0000)]
Fix obsolete-server-crypto in the GnuTLS build not the OpenSSL one.

We're clearing OpenSSL capabilities in the GnuTLS tests to work around
a SoftHSM bug, which is what confused me into putting the XFAIL in the
wrong case.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoMerge branch 'master' into build_NSIS_based_installers_for_32bit_Windows
Daniel Lenski [Fri, 26 Mar 2021 15:52:48 +0000 (08:52 -0700)]
Merge branch 'master' into build_NSIS_based_installers_for_32bit_Windows

4 years agoAdd makensis to mingw COPR builds
David Woodhouse [Fri, 26 Mar 2021 15:43:26 +0000 (15:43 +0000)]
Add makensis to mingw COPR builds

Let's see if we can make it spit out an installer each time...

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoAdd obsolete-server-crypto to XFAIL tests in Fedora package
David Woodhouse [Fri, 26 Mar 2021 15:38:16 +0000 (15:38 +0000)]
Add obsolete-server-crypto to XFAIL tests in Fedora package

The Fedora specfile explicitly sets the GnuTLS priority string to
include @OPENCONNECT but the test sets GNUTLS_SYSTEM_PRIORITY_FILE
to point to /dev/null so that stops working. Just XFAIL the test for
now so the builds start working again. More thinking required...

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoFix up string handling for ciphersuite_config
David Woodhouse [Fri, 26 Mar 2021 15:34:17 +0000 (15:34 +0000)]
Fix up string handling for ciphersuite_config

Sure it isn't C++ and std::string, but we *have* a method for appending
strings to a dynamic buffer. We don't need this snprintf("%s%s%s%s%s")
nonsense.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoFix pfs test for out-of-tree builds
David Woodhouse [Fri, 26 Mar 2021 14:52:40 +0000 (14:52 +0000)]
Fix pfs test for out-of-tree builds

Originally we generated config files from autoconf, so we had:
 • ${srcdir}/tests/configs/test-foo.in
 • ${builddir}/tests/configs/test-foo

Later, we wanted to generate files more dynamically at runtime with
different contents, so we added the update_config() function in
tests/common.sh which did its own substitution to a temporary file,
from
 • $(srcdir}/tests/configs/test-foo

The pfs and obsolete-server-crypto tests appear to use a broken hybrid
of the two, first creating ${builddir}/tests/configs/test-foo from
autoconf and then attempting to use ${srcdir}/tests/configs/test-foo
at runtime. The latter isn't going to exist if ${srcdir} != ${builddir}.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoDrop web page handling
David Woodhouse [Fri, 26 Mar 2021 14:03:10 +0000 (14:03 +0000)]
Drop web page handling

The web site is handled by a cron job; if we wanted to flip that
over to pull from gitlab instead of git.infradead.org it would
be simple enough to it. Let's keep it in the same place for now.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoAdd basic NSIS installer
David Woodhouse [Fri, 26 Mar 2021 10:24:25 +0000 (10:24 +0000)]
Add basic NSIS installer

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoremove unneeded inc/* and openconnect.8.inc from public/HTML docs
Daniel Lenski [Fri, 26 Mar 2021 00:20:34 +0000 (17:20 -0700)]
remove unneeded inc/* and openconnect.8.inc from public/HTML docs

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agocreate make-windows-installer.sh
Daniel Lenski [Fri, 26 Mar 2021 00:20:05 +0000 (17:20 -0700)]
create make-windows-installer.sh

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoremove unneeded inc/* and openconnect.8.inc from public/HTML docs
Daniel Lenski [Fri, 26 Mar 2021 00:20:34 +0000 (17:20 -0700)]
remove unneeded inc/* and openconnect.8.inc from public/HTML docs

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoadd note about existence of installers in packaging docs
Daniel Lenski [Thu, 25 Mar 2021 20:05:20 +0000 (13:05 -0700)]
add note about existence of installers in packaging docs

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoinclude vpnc-script-win.js in installer
Daniel Lenski [Thu, 25 Mar 2021 20:01:22 +0000 (13:01 -0700)]
include vpnc-script-win.js in installer

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoNSIS installer: add compression, installer file properties, and docs
Daniel Lenski [Thu, 25 Mar 2021 18:31:16 +0000 (11:31 -0700)]
NSIS installer: add compression, installer file properties, and docs

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMingW32 builds: generate NSIS installers for Windows
Daniel Lenski [Tue, 23 Mar 2021 17:55:19 +0000 (10:55 -0700)]
MingW32 builds: generate NSIS installers for Windows

nsiswrapper is a rather dodgy Perl script (looks like it hasn't actually
been updated since ~2009) with one indispensable function: it can
automatically find required DLLs and bundle them into the installer.

1. The `PATH` variable must be set to include DLL locations (why `PATH`?️)
2. It mixes up its stdout and stderr, so `--verbose` can't be used without
   `--run`. (Argh…)
3. It doesn't try to normalize the paths of the bundled files, so
   `./x` and `$PWD/x` result in different directory structures.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'jkuebart:fix/forms-without-action'
Daniel Lenski [Wed, 24 Mar 2021 18:59:35 +0000 (11:59 -0700)]
Merge branch 'jkuebart:fix/forms-without-action'

See merge request openconnect/openconnect\!171

4 years agoadd changelog entry
Daniel Lenski [Wed, 24 Mar 2021 18:56:59 +0000 (11:56 -0700)]
add changelog entry

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoadd changelog entry
Daniel Lenski [Tue, 16 Mar 2021 21:47:39 +0000 (14:47 -0700)]
add changelog entry

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agocstp: don't send X-AnyConnect-Platform header
Daniel Lenski [Tue, 16 Mar 2021 21:40:18 +0000 (14:40 -0700)]
cstp: don't send X-AnyConnect-Platform header

1. Cisco AnyConnect 4.8+ no longer sends it, and some newer servers reject
   any client which sends it (see #101)… including older versions of Cisco's
   own client. (Great job, Cisco 🤦🏻‍♂️.)
2. We can't find any evidence of older Cisco servers which *do* require this
   header to be present in order to authenticate the client.
3. It's redundant. Any server that wants to know the client's platform as
   soon as it receives the initial XML POST already has it. (It's in the
   <device-id> tag in addition to the header.)

If there actually are any servers that *do* require this header to identify
and authenticate the client/platform, then the `--local-id` mechanism of
!103 is probably the right way to ensure that it is sent.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'fix/tncc-exception' into 'master'
Daniel Lenski [Mon, 15 Mar 2021 17:31:51 +0000 (17:31 +0000)]
Merge branch 'fix/tncc-exception' into 'master'

fix: don't raise when TNCC_CERTS is unset

See merge request openconnect/openconnect!173

4 years agofix: don't raise when TNCC_CERTS is unset
Joachim Kuebart [Mon, 8 Mar 2021 15:58:35 +0000 (16:58 +0100)]
fix: don't raise when TNCC_CERTS is unset

When asn1crypto isn't available, only raise if TNCC_CERTS is set. That's
the semantics suggested by the error message.

Signed-off-by: Joachim Kuebart <joachim.kuebart@gmail.com>
4 years agonit: silence deprecation warning
Joachim Kuebart [Mon, 8 Mar 2021 15:33:21 +0000 (16:33 +0100)]
nit: silence deprecation warning

Using logging.warn() causes a deprecation warning. Even Python 2.7 appears
to have logging.warning(), so use that instead.

Signed-off-by: Joachim Kuebart <joachim.kuebart@gmail.com>
4 years agofeat: support Microsoft SSO
Joachim Kuebart [Tue, 9 Mar 2021 14:26:30 +0000 (15:26 +0100)]
feat: support Microsoft SSO

Signed-off-by: Joachim Kuebart <joachim.kuebart@gmail.com>
4 years agofix: keep going when forms have only hidden fields
Joachim Kuebart [Tue, 9 Mar 2021 12:48:19 +0000 (13:48 +0100)]
fix: keep going when forms have only hidden fields

Don't consider forms with hidden fields empty.

Signed-off-by: Joachim Kuebart <joachim.kuebart@gmail.com>
4 years agofix: support forms without "action"
Joachim Kuebart [Tue, 9 Mar 2021 12:45:35 +0000 (13:45 +0100)]
fix: support forms without "action"

The HTML spec states:
    If action is the empty string, let action be the URL of the form
    document.
    https://html.spec.whatwg.org/#concept-form-submit

This occurs for me in a scenario using Azure SSO.

Signed-off-by: Joachim Kuebart <joachim.kuebart@gmail.com>
4 years agoMerge branch 'fix/field-instead-of-global' into 'master'
Daniel Lenski [Tue, 9 Mar 2021 22:42:40 +0000 (22:42 +0000)]
Merge branch 'fix/field-instead-of-global' into 'master'

fix: use field instead of global variable

See merge request openconnect/openconnect!172

4 years agofix: use field instead of global variable
Joachim Kuebart [Tue, 9 Mar 2021 14:25:45 +0000 (15:25 +0100)]
fix: use field instead of global variable

The TNCC "emulate" trojan erroneously uses a global variable instead of a
field.

Signed-off-by: Joachim Kuebart <joachim.kuebart@gmail.com>
4 years agobugfix: condition for incomplete ESP config with GP was inverted
Daniel Lenski [Sun, 7 Mar 2021 22:40:00 +0000 (14:40 -0800)]
bugfix: condition for incomplete ESP config with GP was inverted

Fixes #227. Messed this up in https://gitlab.com/openconnect/openconnect/-/commit/edb1591f313167df4b708123e338975335b55203

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'add_DTLS_disable_to_API' into 'master'
Daniel Lenski [Thu, 25 Feb 2021 18:32:59 +0000 (18:32 +0000)]
Merge branch 'add_DTLS_disable_to_API' into 'master'

add openconnect_disable_dtls() API function

See merge request openconnect/openconnect!49

4 years agoMerge branch 'potential_read_overflow_in_openconnect__strndup' into 'master'
Daniel Lenski [Thu, 25 Feb 2021 17:07:40 +0000 (17:07 +0000)]
Merge branch 'potential_read_overflow_in_openconnect__strndup' into 'master'

fix potential read overflow in openconnect__strndup

See merge request openconnect/openconnect!170

4 years agoadd .gitattributes file to mark binaries
Daniel Lenski [Wed, 24 Feb 2021 02:41:03 +0000 (18:41 -0800)]
add .gitattributes file to mark binaries

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agofix potential read overflow in compat.c replacement for strndup()
Daniel Lenski [Tue, 23 Feb 2021 05:17:13 +0000 (21:17 -0800)]
fix potential read overflow in compat.c replacement for strndup()

The openconnect__strndup() function is used as a replacement for
strndup() on platforms that lack it.

It is unsafe in its current form, because it calls strlen() on
a buffer that may not be zero-terminated.

Here's a short C program that demonstrates the issue:

    #include <stdio.h>
    #include <string.h>

    int main(int argc, char **argv)
    {
        char *foo = (void *)printf; /* should be legal to read at least 4 bytes */
        printf("We didn't crash in strndup (EXPECTED): %s.\n", strndup(foo, 3));
        printf("We didn't crash in strlen (NOT GUARANTEED): %d\n", strlen(foo));
        return 0;
    }

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoreturn EPERM, not EINVAL, when GP gateways reject the cookie upon get-config or GET...
Daniel Lenski [Mon, 22 Feb 2021 03:17:42 +0000 (19:17 -0800)]
return EPERM, not EINVAL, when GP gateways reject the cookie upon get-config or GET-tunnel

Tested against 2 real GlobalProtect gateway servers, which both exhibit
these error behaviors:

1. 'GET /ssl-vpn/config' with bogus 'portal' field in cookie
   => XML error "Portal name not found"
2. 'GET /ssl-vpn/config' with 'user', 'authcookie', or 'portal' fields missing from cookie
   => HTTP/1.1 200, plaintext "errors getting SSL/VPN config"
3. 'GET /ssl-vpn-tunnel' with bogus 'user' or 'authcookie'
   => HTTP/1.1 504 (Gateway Timeout)

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoensure that openconnect_disable_{dtls,ipv6} do nothing if vpninfo has ever been connected
Daniel Lenski [Thu, 13 Jun 2019 15:53:27 +0000 (10:53 -0500)]
ensure that openconnect_disable_{dtls,ipv6} do nothing if vpninfo has ever been connected

Both openconnect_disable_dtls() and openconnect_disable_ipv6() now return
int (0 or -EINVAL), and are used in CLI argument processing.

Ideally, we would allow these to be used when IPv6 or DTLS/ESP are not currently
in use, but we do not have sufficiently reliable cross-protocol indicators of these.
The main use case for both of these functions is disable a problematic feature
prior to initial connection.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoadd openconnect_disable_dtls() API function
Daniel Lenski [Wed, 5 Jun 2019 03:30:30 +0000 (20:30 -0700)]
add openconnect_disable_dtls() API function

This also adds the API function to the Java bindings.

The immediate motivation is that there are a lot of Android users with
MTU-related issues (https://github.com/cernekee/ics-openconnect), and
disabling UDP/DTLS/ESP is a good temporary band-aid.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agostatic website tweaks
Daniel Lenski [Sat, 20 Feb 2021 01:11:25 +0000 (17:11 -0800)]
static website tweaks

We don't need the artifacts from any builds, and add a dedicated Makefile target to update the '/public' directory.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoTry to generate static website using GitLab pages
Daniel Lenski [Sat, 20 Feb 2021 00:05:09 +0000 (00:05 +0000)]
Try to generate static website using GitLab pages

Based on the example at https://gitlab.com/pages/plain-html, and ocserv's configuration (https://gitlab.com/openconnect/ocserv/blob/master/.gitlab-ci.yml)

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agochangelog: more updates since v8.10
Daniel Lenski [Thu, 18 Feb 2021 16:15:59 +0000 (08:15 -0800)]
changelog: more updates since v8.10

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'remove_protocol_specific_values_from_global_state_object' into 'master'
Daniel Lenski [Thu, 11 Feb 2021 17:20:53 +0000 (17:20 +0000)]
Merge branch 'remove_protocol_specific_values_from_global_state_object' into 'master'

CSD XML tag and nostub are entirely protocol-specific and used in only one place

See merge request openconnect/openconnect!159

4 years agoadd pointer to vpnc-script repo to README
Daniel Lenski [Thu, 11 Feb 2021 17:11:05 +0000 (09:11 -0800)]
add pointer to vpnc-script repo to README

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'allow_multiple_servercert_arguments' into 'master'
Daniel Lenski [Fri, 5 Feb 2021 17:31:05 +0000 (17:31 +0000)]
Merge branch 'allow_multiple_servercert_arguments' into 'master'

Allow specification of multiple certificate fingerprints on command-line via --servercert

See merge request openconnect/openconnect!162

4 years agochangelog
Daniel Lenski [Mon, 25 Jan 2021 08:04:15 +0000 (00:04 -0800)]
changelog

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoallow specification of multiple certificate fingerprints on command-line via --servercert
Daniel Lenski [Mon, 25 Jan 2021 07:39:39 +0000 (23:39 -0800)]
allow specification of multiple certificate fingerprints on command-line via --servercert

Server certificates will be accepted if they match *any* of the provided fingerprints.

Behavior with `--servercert` is otherwise unchanged; it still disables system trust
stores, meaning that _only_ certificates matching the provided fingerprints will be
accepted if it is specified one or more times.

This will allow the use of `--servercert` to non-interactively connect to a server which
has a non-trusted certificate and redirects to one or more other servers with non-trusted
certificates. (See #25 for a real case.)

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'one_more_pulse_failcode' into 'master'
Daniel Lenski [Wed, 3 Feb 2021 21:34:40 +0000 (21:34 +0000)]
Merge branch 'one_more_pulse_failcode' into 'master'

Pulse: one more known failcode (0x0e = client cert required)

See merge request openconnect/openconnect!163

4 years agoJuniper forms with 'id' but not 'name'
Daniel Lenski [Mon, 1 Feb 2021 18:52:17 +0000 (10:52 -0800)]
Juniper forms with 'id' but not 'name'

Speculative fix for #219

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoPulse: one more known failcode (0x0e = client cert required)
Daniel Lenski [Tue, 15 Dec 2020 18:02:21 +0000 (10:02 -0800)]
Pulse: one more known failcode (0x0e = client cert required)

Verified by connecting to a Pulse server which requires a client cert,
without providing one via -c/-k.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'openssl-sec-level' into 'master'
Daniel Lenski [Sat, 23 Jan 2021 01:07:07 +0000 (01:07 +0000)]
Merge branch 'openssl-sec-level' into 'master'

With --allow-insecure-crypto, set OpenSSL 1.1.0+ "security level" to 0, and attempt to disable system minimum crypto requirements

See merge request openconnect/openconnect!158

4 years agoupdate changelog with expanded scope
Daniel Lenski [Sat, 23 Jan 2021 01:02:00 +0000 (17:02 -0800)]
update changelog with expanded scope

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoin tests/obsolete-server-crypto, do not override GNUTLS_SYSTEM_PRIORITY_FILE when...
Daniel Lenski [Sat, 23 Jan 2021 00:47:35 +0000 (16:47 -0800)]
in tests/obsolete-server-crypto, do not override GNUTLS_SYSTEM_PRIORITY_FILE when invoking OpenConnect

This will allow us to test OpenConnect's ability to disable the system-wide crypto policy by itself.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agowith --allow-insecure-crypto, additionally attempt to disable insecure systemwide...
Daniel Lenski [Fri, 22 Jan 2021 00:27:23 +0000 (16:27 -0800)]
with --allow-insecure-crypto, additionally attempt to disable insecure systemwide minimum crypto settings

Because openconnect_set_allow_insecure_crypto() now does more than just attempt to reenable 3DES and ARC4,
its failure to enable those ciphers should not be treated as fatal, but merely a warning.

Setting the appropriate environment variable (GNUTLS_SYSTEM_PRIORITY_FILE or OPENSSL_CONF) to `/dev/null`
*before* crypto library initialization should ensure that a systemwide crypto configuration file doesn't
set a minimum crypto requirement which would override the user choice.

See https://gitlab.com/openconnect/openconnect/-/issues/211#note_482161646 for discussion of GnuTLS
settings, and https://www.openssl.org/docs/man1.1.1/man5/config.html for OpenSSL.

FIXME: OpenSSL implementation needs library reinitialization.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoadd openconnect__win32_setenv function to compat.c
Daniel Lenski [Fri, 22 Jan 2021 02:01:42 +0000 (18:01 -0800)]
add openconnect__win32_setenv function to compat.c

Based on:

* POSIX-compatible `setenv` implementation for Windows: https://stackoverflow.com/a/23616164
* Enabling Windows "secure API" getenv_s and _putenv_s functions in MinGW:
  * Using -DMINGW_HAS_SECURE_API: https://stackoverflow.com/a/51977723
  * By manually defining their prototypes: https://stackoverflow.com/a/51977723
  * Apparently, only newer versions of MinGW follow the MINGW_HAS_SECURE_API flag, and
    autodetecting them is quite hard.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoonly set OpenSSL security level to 0 when --allow-insecure-crypto is specified
Daniel Lenski [Fri, 22 Jan 2021 00:21:01 +0000 (16:21 -0800)]
only set OpenSSL security level to 0 when --allow-insecure-crypto is specified

See discussions on https://gitlab.com/openconnect/openconnect/-/issues/211 for rationale.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'clobbered-loop-counter-bug' into 'master'
Daniel Lenski [Wed, 20 Jan 2021 23:24:02 +0000 (23:24 +0000)]
Merge branch 'clobbered-loop-counter-bug' into 'master'

Use separate counters for inner and outer loop.

See merge request openconnect/openconnect!161

4 years agoUse separate counters for inner and outer loop.
Tom Carroll [Sat, 16 Jan 2021 07:37:42 +0000 (23:37 -0800)]
Use separate counters for inner and outer loop.

The inner and outer loop share a counter. The inner loop resets the
counter to zero when entering the loop. I don't believe this is the
intention from an examination of the code. Have inner and outer loops
use separate counters.

Signed-off-by: Tom Carroll <incentivedesign@gmail.com>
4 years agoMerge branch 'assign_privkey-bug' into 'master'
Daniel Lenski [Fri, 8 Jan 2021 23:58:15 +0000 (23:58 +0000)]
Merge branch 'assign_privkey-bug' into 'master'

Small memory leak in gnutls.c:assign_privkey

See merge request openconnect/openconnect!160

4 years agoFree pcerts array for all assign_privkey paths.
Tom Carroll [Fri, 8 Jan 2021 19:26:48 +0000 (11:26 -0800)]
Free pcerts array for all assign_privkey paths.

Ensure the array pcerts is free'd for both success/fail paths. The function
gnutls_certificate_set_key() is odd as it takes ownership of the contents of
pcerts, but not the pcerts array itself. See:

gnutls-3.6.15/lib/cert-cred.c:gnutls_certificate_set_key()
...
new_pcert_list = gnutls_malloc(sizeof(gnutls_pcert_st) * pcert_list_size);
if (new_pcert_list == NULL) {
  return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR);
}
memcpy(new_pcert_list, pcert_list, sizeof(gnutls_pcert_st) * pcert_list_size);

Signed-off-by: Tom Carroll <incentivedesign@gmail.com>
4 years agoAlways set security level to 0 for openssl versions >= 1.1.0
Elias Norberg [Fri, 1 May 2020 12:08:02 +0000 (14:08 +0200)]
Always set security level to 0 for openssl versions >= 1.1.0

In version 1.1.0 of OpenSSL, a security level was introduced that enforces specific settings for certificates etc.
This PR sets the security level to 0, to retain the functionality that
previous versions of openssl had, and preventing errors like:

140088222534656:error:140AB18E:SSL routines:SSL_CTX_use_certificate:ca md too weak:../ssl/ssl_rsa.c:310

See https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_security_level.html for more information about security levels.

Signed-off-by: Elias Norberg <elias@aisle.se>
Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'stats_and_connection_info' into 'master'
Daniel Lenski [Tue, 5 Jan 2021 17:17:30 +0000 (17:17 +0000)]
Merge branch 'stats_and_connection_info' into 'master'

add SIGUSR1 as trigger to print detailed connection information and stats

See merge request openconnect/openconnect!154

4 years agoMerge branch 'tncc_override_user_agent' into 'master'
Daniel Lenski [Tue, 5 Jan 2021 04:57:22 +0000 (04:57 +0000)]
Merge branch 'tncc_override_user_agent' into 'master'

tncc-emulate.py: add TNCC_USER_AGENT override variable

See merge request openconnect/openconnect!157

4 years agochangelog
Daniel Lenski [Tue, 8 Dec 2020 22:14:55 +0000 (14:14 -0800)]
changelog

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agodefer the switch to syslog until AFTER the tunnel is fully up,
Daniel Lenski [Tue, 5 Jan 2021 04:48:20 +0000 (20:48 -0800)]
defer the switch to syslog until AFTER the tunnel is fully up,

This way, initial connection information and background PID will be usefully
printed to the console, as will errors which prevent the tunnel from being
started (and thus cause OpenConnect to abort as soon as it's established
a connection to the server).

This is a further refinement of 557ac6cfa6d42045ac5ed5e65e2fb079106643fa (!117).

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoadd SIGUSR1 as trigger to print detailed connection information and stats
Daniel Lenski [Thu, 3 Dec 2020 19:47:46 +0000 (11:47 -0800)]
add SIGUSR1 as trigger to print detailed connection information and stats

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'openconnect_get_auth_expiration' into 'master'
Daniel Lenski [Mon, 14 Dec 2020 22:49:03 +0000 (22:49 +0000)]
Merge branch 'openconnect_get_auth_expiration' into 'master'

add auth_expiration (AnyConnect, GP, Pulse) and openconnect_get_auth_expiration() API function

See merge request openconnect/openconnect!156

4 years agoimplement `auth_expiration` for Pulse protocol
Daniel Lenski [Wed, 9 Dec 2020 03:24:00 +0000 (19:24 -0800)]
implement `auth_expiration` for Pulse protocol

We have many examples of this field (AVP 0x583/0xd5c) being multiples of 60 or 3600,
strongly suggesting that it's the remaining auth lifetime:

- https://gitlab.com/openconnect/openconnect/-/issues/98: `AVP 0x583/0xd5c: 00 01 fa 40` (0x1fa40 seconds = 36 hours)
- private communication: `AVP 0x583/0xd5c: 00 00 a9 ec` (0xa9ec seconds = 12 hours)
- private communication: `AVP 0x583/0xd5c: 00 00 0a 70` (0xa70 seconds = 44 minutes)

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoAdd `openconnect_get_auth_expiration` function to library and JNI
Daniel Lenski [Thu, 24 Sep 2020 23:54:57 +0000 (16:54 -0700)]
Add `openconnect_get_auth_expiration` function to library and JNI

This allows protocols to save the moment when a session's authentication
(`vpninfo->cookie`) is expected to expire and no longer be useful for
reconnection.

The motivation is to eventually allow front-ends to know whether
reauthentication is needed, or whether they should try using a cached
cookie.

Current state:

- AnyConnect protocol: expiration is determined from the CONNECT
  response header `X-CSTP-Session-Timeout-Remaining` (with
  `X-CSTP-Session-Timeout` or `X-CSTP-Lease-Duration` as upper bounds in its
  absence)
- GlobalProtect protocol: expiration is determined from the `<lifetime>` tag of
  the XML config.
- Juniper Network Connect protocol: no currently known way to determine
  expiration. The `DSID` cookie is a standard HTTP cookie, so perhaps its
  expiration timestamp is intended for this purpose; however, I can find
  no real-world case where it has an expiration timestamp set.
- None of the currently-supported protocols provide the expiration
  timestamp until the connection phase, so it can't be obtained for
  export by the `--authenticate` option.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agotncc-emulate.py: add TNCC_USER_AGENT override variable
Daniel Lenski [Sun, 13 Dec 2020 17:45:21 +0000 (09:45 -0800)]
tncc-emulate.py: add TNCC_USER_AGENT override variable

See https://gitlab.com/openconnect/openconnect/-/issues/207#note_465454559 for use case and discussion

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoinclude quit_reason in exit message
Daniel Lenski [Tue, 8 Dec 2020 22:16:19 +0000 (14:16 -0800)]
include quit_reason in exit message

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'GP_IPv6_baby_steps' into 'master'
Daniel Lenski [Wed, 9 Dec 2020 18:03:38 +0000 (18:03 +0000)]
Merge branch 'GP_IPv6_baby_steps' into 'master'

GP: ESP debug messages and more IPv6 baby steps

See merge request openconnect/openconnect!155

4 years agochangelog
Daniel Lenski [Tue, 8 Dec 2020 22:23:30 +0000 (14:23 -0800)]
changelog

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoGP: explicitly warn when server has a missing ESP configuration
Daniel Lenski [Mon, 30 Nov 2020 22:21:21 +0000 (14:21 -0800)]
GP: explicitly warn when server has a missing ESP configuration

I'm tired of OpenConnect getting blamed for lack of ESP connectivity when in
fact literally every example that has been investigated since 2017 turned
out to be due to a missing server configuration, broken server
configuration, or network UDP blockage.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoCSD XML tag and nostub are entirely protocol-specific and used in only one place
Daniel Lenski [Mon, 4 May 2020 04:12:12 +0000 (21:12 -0700)]
CSD XML tag and nostub are entirely protocol-specific and used in only one place

This patch replaces them with inline functions (modeled after gpst_os_name),
instead of storing them in the global `struct openconnect_info` object.

TODO: further clarify, separate, and consolidate protocol-specific data in
`struct openconnect_info`.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agolittle bit more GP IPv6 support
Daniel Lenski [Mon, 30 Nov 2020 20:59:14 +0000 (12:59 -0800)]
little bit more GP IPv6 support

Process <dns-v6>, <access-routes-v6>, and <exclude-access-routes-v6> tags, and only
show the long-winded "please report" message once.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'more_logging_around_Trojan_script_invocation' into 'master'
Daniel Lenski [Thu, 3 Dec 2020 23:34:07 +0000 (23:34 +0000)]
Merge branch 'more_logging_around_Trojan_script_invocation' into 'master'

more logging around Trojan script invocation (CSD/HIP/TNCC)

See merge request openconnect/openconnect!152

4 years agomore logging around Trojan script invocation (CSD/HIP/TNCC)
Daniel Lenski [Mon, 30 Nov 2020 06:41:12 +0000 (22:41 -0800)]
more logging around Trojan script invocation (CSD/HIP/TNCC)

See #203 for a recent example of where it wasn't clear that a problem was
caused by a CSD script being invoked and never returning, due to the lack of
logging.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'bugfix_MR_143' into 'master'
Daniel Lenski [Tue, 1 Dec 2020 16:41:21 +0000 (16:41 +0000)]
Merge branch 'bugfix_MR_143' into 'master'

bugfix for !143

See merge request openconnect/openconnect!153

4 years agofix undefined pointer error from !143
Daniel Lenski [Mon, 30 Nov 2020 20:35:17 +0000 (12:35 -0800)]
fix undefined pointer error from !143

Caught by static analyzer run.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'clarify_some_error_messages_which_apply_equally_to_TLS_and_DTLS_sockets...
Daniel Lenski [Mon, 30 Nov 2020 19:26:34 +0000 (19:26 +0000)]
Merge branch 'clarify_some_error_messages_which_apply_equally_to_TLS_and_DTLS_sockets' into 'master'

clarify some error messages which apply equally to TLS and DTLS sockets

See merge request openconnect/openconnect!149

4 years agoMerge branch 'GP_finesse_URL_decoding' into 'master'
Daniel Lenski [Mon, 30 Nov 2020 19:24:40 +0000 (19:24 +0000)]
Merge branch 'GP_finesse_URL_decoding' into 'master'

finesse the URL-decoding of the GP login args

See merge request openconnect/openconnect!143

4 years agoclarify some error messages which apply equally to TLS and DTLS sockets
Daniel Lenski [Mon, 30 Nov 2020 03:09:15 +0000 (19:09 -0800)]
clarify some error messages which apply equally to TLS and DTLS sockets

Clarifies #157 (but doesn't actually fix it)

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'tmp-fix-centos7-failure' into 'master'
Nikos Mavrogiannopoulos [Thu, 19 Nov 2020 22:03:38 +0000 (22:03 +0000)]
Merge branch 'tmp-fix-centos7-failure' into 'master'

dtls-psk: use ping -6 to ping an ipv6 address

Closes #200

See merge request openconnect/openconnect!147

4 years ago.gitlab-ci.yml: CentosOS7/OpenSSL: mark failing test as XFAIL
Nikos Mavrogiannopoulos [Thu, 19 Nov 2020 21:24:51 +0000 (22:24 +0100)]
.gitlab-ci.yml: CentosOS7/OpenSSL: mark failing test as XFAIL

That's because the test was not functional until now (due to missing
'which' application).

Signed-off-by: Nikos Mavrogiannopoulos <n.mavrogiannopoulos@gmail.com>
4 years agodtls-psk: use ping -6 to ping an ipv6 address
Nikos Mavrogiannopoulos [Thu, 19 Nov 2020 20:55:56 +0000 (21:55 +0100)]
dtls-psk: use ping -6 to ping an ipv6 address

This is necessary in centos7 images.

Resolves: #200

Signed-off-by: Nikos Mavrogiannopoulos <n.mavrogiannopoulos@gmail.com>