]> www.infradead.org Git - users/dwmw2/openconnect.git/log
users/dwmw2/openconnect.git
4 years agoFix Linux kernel coding style error
Dimitri Papadopoulos [Sat, 17 Jul 2021 07:06:08 +0000 (09:06 +0200)]
Fix Linux kernel coding style error

open brace '{' following struct|union|enum go on the same line

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoMerge branch 'INLINE_LOCATION' into 'master'
Dimitri Papadopoulos Orfanos [Sun, 18 Jul 2021 22:12:06 +0000 (22:12 +0000)]
Merge branch 'INLINE_LOCATION' into 'master'

Fix Linux kernel coding style error

See merge request openconnect/openconnect!237

4 years agoFix Linux kernel coding style error
Dimitri Papadopoulos [Sat, 17 Jul 2021 06:50:02 +0000 (08:50 +0200)]
Fix Linux kernel coding style error

inline keyword should sit between storage class and type

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoMerge branch 'REPEATED_WORD' into 'master'
Dimitri Papadopoulos Orfanos [Sun, 18 Jul 2021 22:00:28 +0000 (22:00 +0000)]
Merge branch 'REPEATED_WORD' into 'master'

Fix Linux kernel coding style warning

See merge request openconnect/openconnect!236

4 years agoFix Linux kernel coding style warning
Dimitri Papadopoulos [Sat, 17 Jul 2021 06:44:00 +0000 (08:44 +0200)]
Fix Linux kernel coding style warning

Possible repeated word: '...'

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoMerge branch 'SPACE_BEFORE_TAB' into 'master'
Dimitri Papadopoulos Orfanos [Sun, 18 Jul 2021 21:33:48 +0000 (21:33 +0000)]
Merge branch 'SPACE_BEFORE_TAB' into 'master'

Fix Linux kernel coding style warning

See merge request openconnect/openconnect!235

4 years agoFix Linux kernel coding style warning
Dimitri Papadopoulos [Sat, 17 Jul 2021 06:36:20 +0000 (08:36 +0200)]
Fix Linux kernel coding style warning

please, no space before tabs

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoMerge branch 'ARRAY_SIZE' into 'master'
Dimitri Papadopoulos Orfanos [Sun, 18 Jul 2021 21:21:11 +0000 (21:21 +0000)]
Merge branch 'ARRAY_SIZE' into 'master'

Fix Linux kernel coding style warning

See merge request openconnect/openconnect!234

4 years agoFix Linux kernel coding style warning
Dimitri Papadopoulos [Sat, 17 Jul 2021 06:24:46 +0000 (08:24 +0200)]
Fix Linux kernel coding style warning

Prefer ARRAY_SIZE(...)

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoMerge branch 'POINTER_LOCATION' into 'master'
Dimitri Papadopoulos Orfanos [Sun, 18 Jul 2021 21:09:05 +0000 (21:09 +0000)]
Merge branch 'POINTER_LOCATION' into 'master'

Fix Linux kernel coding style error

See merge request openconnect/openconnect!233

4 years agoFix Linux kernel coding style error
Dimitri Papadopoulos [Sat, 17 Jul 2021 05:50:32 +0000 (07:50 +0200)]
Fix Linux kernel coding style error

"(foo*)" should be "(foo *)"

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoMerge branch 'STATIC_CONST_CHAR_ARRAY' into 'master'
Dimitri Papadopoulos Orfanos [Sun, 18 Jul 2021 20:59:29 +0000 (20:59 +0000)]
Merge branch 'STATIC_CONST_CHAR_ARRAY' into 'master'

Fix Linux kernel coding style warning

See merge request openconnect/openconnect!232

4 years agoFix Linux kernel coding style warning
Dimitri Papadopoulos [Sat, 17 Jul 2021 05:37:22 +0000 (07:37 +0200)]
Fix Linux kernel coding style warning

const array should probably be static const

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoReads from the vhost_call_fd do return -EINTR when we loop multiple times
David Woodhouse [Thu, 8 Jul 2021 20:16:27 +0000 (21:16 +0100)]
Reads from the vhost_call_fd do return -EINTR when we loop multiple times

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoTweak vhost ring handling to stop Coverity thinking we leak packets
David Woodhouse [Thu, 8 Jul 2021 19:35:52 +0000 (20:35 +0100)]
Tweak vhost ring handling to stop Coverity thinking we leak packets

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoCheck eventfd read/write returns
David Woodhouse [Thu, 8 Jul 2021 19:30:38 +0000 (20:30 +0100)]
Check eventfd read/write returns

A short write should never happen but we get compiler/Coverity complaints
if we don't check.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoFix double close of vhost_fd on error
David Woodhouse [Thu, 8 Jul 2021 19:27:22 +0000 (20:27 +0100)]
Fix double close of vhost_fd on error

Spotted by Coverity.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agovhost: Add USED_EVENT and AVAIL_EVENT macros
David Woodhouse [Fri, 2 Jul 2021 09:08:33 +0000 (10:08 +0100)]
vhost: Add USED_EVENT and AVAIL_EVENT macros

Open-coding this was kind of awful. I mean, it's *still* fairly awful
but now we can hide it away in the macro and never think about it again.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agovhost: Avoid TX queue when writing directly is faster
David Woodhouse [Tue, 29 Jun 2021 12:20:34 +0000 (13:20 +0100)]
vhost: Avoid TX queue when writing directly is faster

Using vhost makes high-volume transfers go nice and fast, especially
we are using 100% of a CPU in the single-threaded OpenConnect process
and just offloading the kernel←→user copies for the tun packets to
the vhost thread instead of having to do them from our single thread
too.

However, for a lightly used link with *occasional* packets, which is
fairly much the definition of a VPN being used for VoIP, it adds a lot
of unwanted latency. If our userspace thread is otherwise going to be
*idle*, and fall back into select() to wait for something else to do,
then we might as well just write the packet *directly* to the tun
device.

So... when the queue is stopped and would need to be kicked, and if
there are only a *few* (heuristic: half max_qlen) packets on the
queue to be sent, just send them directly.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoUse vhost for dtls-psk and sigterm tests
David Woodhouse [Thu, 1 Jul 2021 12:46:53 +0000 (13:46 +0100)]
Use vhost for dtls-psk and sigterm tests

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoInitial vhost-net support
David Woodhouse [Wed, 16 Jun 2021 23:05:14 +0000 (00:05 +0100)]
Initial vhost-net support

We spend a lot of CPU time copying packets between kernel and userspace.

Eventually we want to implement a completely in-kernel data path. It
isn't even that hard, now that most of the functionality we need from
the kernel is there and it's mostly just a case of fitting it together.

In the meantime, though, there are a few things we can do even on today's
released kernels. For a start, we can use vhost-net to avoid having to
do the read()/write() on the tun device in our mainloop.

Ultimately, it ends up being done by a kernel thread instead; it doesn't
really go away. But that should at least give us a performance win which
would compare with a decent threading model, while allowing OpenConnect
to remain naïvely single-threaded and lock-free.

We have to carefully pick a configuration for vhost-net which actually
works, since it's fairly hosed for IFF_TUN support:
https://lore.kernel.org/netdev/2433592d2b26deec33336dd3e83acfd273b0cf30.camel@infradead.org/T/

But by limiting the sndbuf (which disables XDP, sadly) and by requesting
a virtio header that we don't actually want, we *can* make it work even
with today's production kernels.

Thanks to Eugenio Pérez Martín >eperezma@redhat.com> for his blog at
https://www.redhat.com/en/blog/virtqueues-and-virtio-ring-how-data-travels
and for lots more help and guidance as I floundered around trying to make
this work.

Although this gives a 10% improvement on the bandwidth we can manage in
my testing (up to 2.75Gb/s with other tricks, on a c5.8xlarge Skylake VM)
it also introduces a small amount of extra latency, so disable it by
default unless the user has bumped the queue length to 16 or more, which
presumably means they choose bandwidth over latency.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoStop accepting DTLS packets when the queue is full
David Woodhouse [Thu, 1 Jul 2021 20:45:18 +0000 (21:45 +0100)]
Stop accepting DTLS packets when the queue is full

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoClear epoll_fd after forking to background self
David Woodhouse [Thu, 1 Jul 2021 16:03:13 +0000 (17:03 +0100)]
Clear epoll_fd after forking to background self

Otherwise we remove the events from the epoll_fd before we exit in
the parent process.

This would be a bit awful if it were something we require all users of
libopenconnect to know about, but it isn't. We make everything O_CLOEXEC
and we don't expect users to be calling openconnect_vpninfo_free() from
another process after forking, like the background code does. We only
do it there so that we can check for memory leaks (I think).

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoAdd SIGUSR2 to dtls-psk test
David Woodhouse [Thu, 1 Jul 2021 15:39:48 +0000 (16:39 +0100)]
Add SIGUSR2 to dtls-psk test

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoFix epoll support for connection pause/restart
David Woodhouse [Thu, 1 Jul 2021 15:30:27 +0000 (16:30 +0100)]
Fix epoll support for connection pause/restart

We need to actually remove the file descriptors from the epoll set.
Otherwise we get -EEXIST when adding them again (in the case of the
cmd_fd as we re-enter the main loop).

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoMerge branch 'linux_kernel_coding_style' into 'master'
David Woodhouse [Thu, 1 Jul 2021 08:21:52 +0000 (08:21 +0000)]
Merge branch 'linux_kernel_coding_style' into 'master'

Fix Linux kernel coding style errors and warnings

See merge request openconnect/openconnect!229

4 years agoMerge branch 'include' into 'master'
David Woodhouse [Thu, 1 Jul 2021 06:46:51 +0000 (06:46 +0000)]
Merge branch 'include' into 'master'

Reorganize #include

See merge request openconnect/openconnect!228

4 years agoReorganize #include
Dimitri Papadopoulos [Tue, 29 Jun 2021 09:50:16 +0000 (11:50 +0200)]
Reorganize #include

- Reorder header files as suggested here:
  https://stackoverflow.com/questions/2762568/c-c-include-header-file-order
  https://softwareengineering.stackexchange.com/questions/325549/c-header-file-order
- Remove duplicates
- Remove unused headers files
- Change "config.h" to <config.h>
- Include <winsock2.h> before openconnect.h, which is not entirely self-contained.

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoFix Linux kernel coding style errors and warnings
Dimitri Papadopoulos [Wed, 30 Jun 2021 21:53:26 +0000 (23:53 +0200)]
Fix Linux kernel coding style errors and warnings

I had forgotten the header file in 0bef505c.

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoMerge branch 'automatically_enter_username_into_all_forms' into 'master'
Daniel Lenski [Tue, 29 Jun 2021 17:59:29 +0000 (17:59 +0000)]
Merge branch 'automatically_enter_username_into_all_forms' into 'master'

With --user, enter username in all forms, not just the first

See merge request openconnect/openconnect!220

4 years agoUpdate changelog
Daniel Lenski [Tue, 29 Jun 2021 17:48:58 +0000 (10:48 -0700)]
Update changelog

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoWith --user, enter username in all forms, not just the first
Daniel Lenski [Fri, 25 Jun 2021 16:42:27 +0000 (09:42 -0700)]
With --user, enter username in all forms, not just the first

Until now, the -u/--user=USERNAME option has caused the OpenConnect CLI to
automatically fill the username only in the *first* form where there is a
match field.  This patch causes it to fill the username repeatedly
(including when a form is repeated due to an authentication failure).

As described by @DimitriPapadopoulos in #267:

> In many cases, I expect the authentication failure to be caused by an
> incorrect password, not an incorrect username
>
> Having to [re]enter the username, when it has already been specified from
> the command line or worse in a config file, is an annoyance.  I suggest
> openconnect [re]prompts for the username only when it has been entered
> interactively from the start.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMerge branch 'epoll' of gitlab.com:openconnect/openconnect
David Woodhouse [Tue, 29 Jun 2021 17:40:46 +0000 (18:40 +0100)]
Merge branch 'epoll' of gitlab.com:openconnect/openconnect

4 years agoUse epoll() instead of select()
David Woodhouse [Tue, 29 Jun 2021 13:56:00 +0000 (14:56 +0100)]
Use epoll() instead of select()

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoMerge branch 'GP_portal_to_gateway_auth_with_cookies' into 'master'
David Woodhouse [Tue, 29 Jun 2021 11:49:47 +0000 (11:49 +0000)]
Merge branch 'GP_portal_to_gateway_auth_with_cookies' into 'master'

Pass the `portal-*cookie` values received in the portal config to the gateway login

Closes #147

See merge request openconnect/openconnect!199

4 years agoMerge branch 'rondom-do-https-request-header-cb' into 'master'
David Woodhouse [Tue, 29 Jun 2021 11:30:49 +0000 (11:30 +0000)]
Merge branch 'rondom-do-https-request-header-cb' into 'master'

http: Allow passing header_cb to do_https_request

See merge request openconnect/openconnect!201

4 years agoMerge branch 'vpnc-script_links_on_GitLab' into 'master'
David Woodhouse [Tue, 29 Jun 2021 11:27:24 +0000 (11:27 +0000)]
Merge branch 'vpnc-script_links_on_GitLab' into 'master'

Docs should link to Gitlab as the main repository for vpnc-script and vpnc-script-win.js

See merge request openconnect/openconnect!213

4 years agoMerge branch 'suspect_code_indent' into 'master'
David Woodhouse [Tue, 29 Jun 2021 11:26:42 +0000 (11:26 +0000)]
Merge branch 'suspect_code_indent' into 'master'

Fix Linux kernel coding style errors and warnings reported by checkpatch.pl

See merge request openconnect/openconnect!212

4 years agoMerge branch 'obey_IPv6_in_Pulse_and_Fortinet' into 'master'
David Woodhouse [Tue, 29 Jun 2021 11:24:47 +0000 (11:24 +0000)]
Merge branch 'obey_IPv6_in_Pulse_and_Fortinet' into 'master'

Follow disable_ipv6 for Pulse and Fortinet

See merge request openconnect/openconnect!214

4 years agoMerge branch 'small_PPP_fixes' into 'master'
David Woodhouse [Tue, 29 Jun 2021 11:24:17 +0000 (11:24 +0000)]
Merge branch 'small_PPP_fixes' into 'master'

small PPP fixes

See merge request openconnect/openconnect!216

4 years agoMerge branch 'update_authenticate_docs_for_RESOLVE_and_CONNECT_URL' into 'master'
David Woodhouse [Tue, 29 Jun 2021 11:22:15 +0000 (11:22 +0000)]
Merge branch 'update_authenticate_docs_for_RESOLVE_and_CONNECT_URL' into 'master'

update --authenticate docs to explain $RESOLVE and $CONNECT_URL

See merge request openconnect/openconnect!219

4 years agoMerge branch 'vpnc-script_s' into 'master'
David Woodhouse [Tue, 29 Jun 2021 11:15:49 +0000 (11:15 +0000)]
Merge branch 'vpnc-script_s' into 'master'

Fix URL of repository of vpnc-script

See merge request openconnect/openconnect!227

4 years agoFix open brace '{' following function definition
Dimitri Papadopoulos [Mon, 21 Jun 2021 17:05:57 +0000 (19:05 +0200)]
Fix open brace '{' following function definition

Error reported by checkpatch.pl.

Signed-off-by: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoFix bad function definition
Dimitri Papadopoulos [Wed, 16 Jun 2021 12:01:50 +0000 (14:01 +0200)]
Fix bad function definition

Warnings by checkpatch.pl.
I have learned something today:
https://eklitzke.org/c-functions-without-arguments

Signed-off-by: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoFix suspect code indent
Dimitri Papadopoulos [Wed, 16 Jun 2021 11:27:25 +0000 (13:27 +0200)]
Fix suspect code indent

Warnings by checkpatch.pl.
I have fixed actual errors and left actual conscious decisions.

Signed-off-by: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoFix URL of repository of vpnc-script
Dimitri Papadopoulos [Tue, 29 Jun 2021 08:29:07 +0000 (10:29 +0200)]
Fix URL of repository of vpnc-script

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoUpdate documentation for the --authenticate option
Daniel Lenski [Thu, 24 Jun 2021 06:19:12 +0000 (23:19 -0700)]
Update documentation for the --authenticate option

Mention the CONNECT_URL and RESOLVE options, and how to use them to invoke
the connection phase in the maximally-robust way (which should work for all
protocols, and all possible proxies).

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoFix typo and clarify openconnect_get_connect_url comment slightly
Daniel Lenski [Thu, 24 Jun 2021 06:21:34 +0000 (23:21 -0700)]
Fix typo and clarify openconnect_get_connect_url comment slightly

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoReuse packets
David Woodhouse [Mon, 28 Jun 2021 13:44:51 +0000 (14:44 +0100)]
Reuse packets

I see malloc/free showing up at ~5% of perf traces, and it's entirely
pointless when we could be reusing packets.

This trick isn't *perfect* and there's potential for a pathological
case where all the packets on the free_queue are too small to be
reused but we never get rid of them anyway — but rounding up to 2KiB
should mean that never happens in practice, and the alignment we get
from that rounding probably doesn't hurt performance anyway.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoAdd alloc_pkt() and free_pkt() helpers
David Woodhouse [Mon, 28 Jun 2021 11:54:53 +0000 (12:54 +0100)]
Add alloc_pkt() and free_pkt() helpers

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoStop polling cmd_fd while busy
David Woodhouse [Thu, 24 Jun 2021 15:54:00 +0000 (16:54 +0100)]
Stop polling cmd_fd while busy

We have an explicit select() call on the cmd_fd even when we're busy
shovelling packets and never hit the main select() in the mainloop.
This is *just* to ensure that we react to a cancel command quickly.

In the *common* case that we're running in openconnect(8), there's no
need for that since the *only* thing that will write to the cmd_fd is
openconnect itself, and *that* can set a flag in memory to tell us to
look.

So implement that optimisation — don't check it each time around the
mainloop unless the vpninfo->need_poll_cmd_fd flag is set. That flag
is set whenever we have written to cmd_fd and there's something to be
read. And cleared by poll_cmd_fd() when it runs and finds nothing there.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoMerge branch 'lzo' of gitlab.com:DimitriPapadopoulos/openconnect
David Woodhouse [Mon, 28 Jun 2021 15:44:24 +0000 (16:44 +0100)]
Merge branch 'lzo' of gitlab.com:DimitriPapadopoulos/openconnect

4 years agoMerge branch 'yubi' of gitlab.com:DimitriPapadopoulos/openconnect
David Woodhouse [Mon, 28 Jun 2021 15:39:17 +0000 (16:39 +0100)]
Merge branch 'yubi' of gitlab.com:DimitriPapadopoulos/openconnect

4 years agoMerge branch 'include' of gitlab.com:DimitriPapadopoulos/openconnect
David Woodhouse [Mon, 28 Jun 2021 15:39:06 +0000 (16:39 +0100)]
Merge branch 'include' of gitlab.com:DimitriPapadopoulos/openconnect

4 years agoMerge branch 'trailing_spaces' into 'master'
Dimitri Papadopoulos Orfanos [Mon, 28 Jun 2021 14:59:31 +0000 (14:59 +0000)]
Merge branch 'trailing_spaces' into 'master'

Get rid of trailing spaces

See merge request openconnect/openconnect!217

4 years agoLatest version of lzo.c
Dimitri Papadopoulos [Sun, 27 Jun 2021 07:44:42 +0000 (09:44 +0200)]
Latest version of lzo.c

We have pulled commit 004b582 from 14 May 2016.

Tests have been moved to a different file, so the file is smaller.
I have kept local changes, except the removal of INT_MAX -1000.

Signed-off-by: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoFurther fix Yubikey/Android PBKDF2 bug URL
Dimitri Papadopoulos [Mon, 28 Jun 2021 12:45:36 +0000 (14:45 +0200)]
Further fix Yubikey/Android PBKDF2 bug URL

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoRemove duplicate includes
Dimitri Papadopoulos [Sun, 27 Jun 2021 09:10:11 +0000 (11:10 +0200)]
Remove duplicate includes

Signed-off-by: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoGet rid of trailing spaces
Dimitri Papadopoulos [Mon, 21 Jun 2021 17:34:55 +0000 (19:34 +0200)]
Get rid of trailing spaces

Signed-off-by: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoMerge branch 'm4' into 'master'
David Woodhouse [Mon, 28 Jun 2021 10:09:11 +0000 (10:09 +0000)]
Merge branch 'm4' into 'master'

Update m4 files

See merge request openconnect/openconnect!225

4 years agoMerge branch 'assert' into 'master'
David Woodhouse [Mon, 28 Jun 2021 10:04:56 +0000 (10:04 +0000)]
Merge branch 'assert' into 'master'

Remove assert

See merge request openconnect/openconnect!223

4 years agoFix Yubikey/Android PBKDF2 bug URLs
David Woodhouse [Mon, 28 Jun 2021 08:30:29 +0000 (09:30 +0100)]
Fix Yubikey/Android PBKDF2 bug URLs

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoMerge branch 'https' into 'master'
Daniel Lenski [Mon, 28 Jun 2021 00:23:35 +0000 (00:23 +0000)]
Merge branch 'https' into 'master'

http:// -> https://

See merge request openconnect/openconnect!211

4 years agoUpdate m4 files
Dimitri Papadopoulos [Sun, 27 Jun 2021 12:39:07 +0000 (14:39 +0200)]
Update m4 files

m4/ax_check_vscript.m4
  the latest version from the Autoconf Archive

m4/iconv.m4
  the latest version from gnulib still compatible with autoconf 2.62

m4/lib-ld.m4
m4/lib-link.m4
m4/lib-prefix.m4
  the latest versions from gnulib

Signed-off-by: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agohttp:// -> https://
Dimitri Papadopoulos [Wed, 16 Jun 2021 10:38:35 +0000 (12:38 +0200)]
http:// -> https://

I have left out:
- sites that have not moved to HTTPS
- URLs found in XML and SVG files

Signed-off-by: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoRemove assert
Dimitri Papadopoulos [Sun, 27 Jun 2021 08:45:36 +0000 (10:45 +0200)]
Remove assert

Signed-off-by: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoUpdate translations from GNOME
David Woodhouse [Sun, 27 Jun 2021 16:05:04 +0000 (17:05 +0100)]
Update translations from GNOME

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoMerge branch 'recognise' into 'master'
David Woodhouse [Sun, 27 Jun 2021 14:21:50 +0000 (14:21 +0000)]
Merge branch 'recognise' into 'master'

ise → ize

Closes #268

See merge request openconnect/openconnect!221

4 years agoMerge branch 'server' into 'master'
David Woodhouse [Sun, 27 Jun 2021 14:15:14 +0000 (14:15 +0000)]
Merge branch 'server' into 'master'

Add option to read server name from config file

Closes #261 and #171

See merge request openconnect/openconnect!218

4 years agoNew option to define server name in config file
Dimitri Papadopoulos [Wed, 23 Jun 2021 09:17:18 +0000 (11:17 +0200)]
New option to define server name in config file

Signed-off-by: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoise → ize
Dimitri Papadopoulos [Fri, 25 Jun 2021 08:26:05 +0000 (10:26 +0200)]
ise → ize

Signed-off-by: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com>
4 years agoAssume that a 'portal-*cookie' will allow us to bypass gateway SAML
Daniel Lenski [Fri, 28 May 2021 19:42:57 +0000 (12:42 -0700)]
Assume that a 'portal-*cookie' will allow us to bypass gateway SAML

For many GlobalProtect VPNs with SAML, the 'portal-userauthcookie' appears
to be *the* mechanism by which gateway authentication can be bypassed once
portal authentication is complete.

Unfortunately, there are exceptions which will require a more complex
resolution involved a re-entrant SAML flow
(https://gitlab.com/openconnect/openconnect/-/issues/147#note_587163143),
but this patch will at least not make them worse.

This can work in many cases…

- When the user's password is only usable one time (already working as of 008aefd7),
- When the portal requires SAML but the gateway doesn't (already working in 008aefd7),
- When the gateway requires SAML even though the portal doesn't (fixed here)

Additionally, this patch adds tests (tests/{fake-gp-server.py,gp-auth-and-config}) of
OpenConnect's ability to complete the following SAML flows:

- (SAML to portal after acquiring prelogin-cookie externally) → (complete gateway login
  using portal-userauthcookie)
- (SAML to gateway after acquiring prelogin-cookie externally)

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMore complete comment about issues with proxies in connection phase
Daniel Lenski [Thu, 24 Jun 2021 06:16:16 +0000 (23:16 -0700)]
More complete comment about issues with proxies in connection phase

The comment for openconnect_get_connect_url (added in
https://gitlab.com/openconnect/openconnect/-/commit/ec6c0caed28ebf4f60984a49ce3122196f9c87fa)
should mention the possibility that a proxy requires the correct hostname at
the TLS layer (via Server Name Indication, SNI) as well at the HTTP layer
(via 'Host' header), in order to correctly forward it to the VPN server.

See https://gitlab.gnome.org/GNOME/NetworkManager-openconnect/-/issues/46
for a case where the 'Host' header was apparently required.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoFortinet requires us to check for an HTTP error response only over TLS
Daniel Lenski [Thu, 17 Jun 2021 20:23:18 +0000 (13:23 -0700)]
Fortinet requires us to check for an HTTP error response only over TLS

If the Fortinet PPP connection request *succeeds* over TLS, there is no HTTP
response before we start exchanging PPP packets.  If it *fails*, there is an
HTTP response.

If the Fortinet PPP connection request is over DTLS, a 'svrhello' response
is expected regardless of whether it succeeded or failed. This is handled
by fortinet_dtls_catch_svrhello()

Let's only check for that HTTP response in Fortinet if we're definitely
connecting over TLS.  The "proceeding to tunnel stage" test in
'fortinet-auth-config-tests' verifies the correctness of the HTTP response
parsing behavior.

Fortinet connection response matrix ("Don't blame me, I didn't design this."):

           \ TRANSPORT
    STATUS  \             TLS               DTLS
             +            ---------------   -------------------
    Success  |            immediate → PPP   SVRHELLO 'ok' → PPP
    Failure  |            HTTP response     SVRHELLO 'fail'

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoCleanup fortinet-auth-config
Daniel Lenski [Thu, 17 Jun 2021 20:38:09 +0000 (13:38 -0700)]
Cleanup fortinet-auth-config

Fix a couple bits  which generate extra noise in the logs (left behind from
testing https://gitlab.com/openconnect/openconnect/-/merge_requests/209).

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoPPP: Replace no_terminate_on_pause flag with terminate_on_pause flag
Daniel Lenski [Thu, 17 Jun 2021 20:14:32 +0000 (13:14 -0700)]
PPP: Replace no_terminate_on_pause flag with terminate_on_pause flag

We know of two real-world PPP-based VPNs that require us *not* to TERMINATE
at the PPP layer if we will want to subsequently resume a connection.  We
don't know of any real-world PPP-based VPNs that *do* want us to TERMINATE
at the PPP layer in this case; in fact, any server that *requires* this
would be unable to resume inadvertently dropped connections.

Replace the no_terminate_on_pause flag with a terminate_on_pause flag, in
order to reduce boilerplate and use the more plausible behavior as the
default.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoFollow disable_ipv6 for Pulse and Fortinet
Daniel Lenski [Thu, 17 Jun 2021 17:25:15 +0000 (10:25 -0700)]
Follow disable_ipv6 for Pulse and Fortinet

As with other protocols (AnyConnect, F5, GP), the behavior of 'disable_ipv6'
for these protocols is relatively "shallow": if set, it will cause
OpenConnect to ignore any IPv6 address or netmask sent by the server, but
will *not* ignore IPv6 split-{in,ex}cludes or IPv6 addresses of DNS servers.

More thorough IPv6-ignoring could be handled by the vpnc-script, or cleaned
up as part of a future change to simplify IP configuration and routing
across protocols.

(The lack of support for --disable-ipv6 in Pulse was noted in
https://gitlab.com/openconnect/openconnect/-/issues/254.)

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoWe can admit that the FTP site exists too.
David Woodhouse [Wed, 16 Jun 2021 23:03:29 +0000 (00:03 +0100)]
We can admit that the FTP site exists too.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoDocs should link to Gitlab as the main repository for vpnc-script and vpnc-script...
Daniel Lenski [Wed, 16 Jun 2021 19:08:14 +0000 (19:08 +0000)]
Docs should link to Gitlab as the main repository for vpnc-script and vpnc-script-win.js

All of the recent improvements/development of these scripts have taken
place on GitLab.

I believe these were reverted inadvertently in
https://gitlab.com/openconnect/openconnect/-/commit/363fd538b08b39f07cc09282608f43f1faa29a4f

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoMark juniper-sso-auth test as using LD_PRELOAD
Daniel Lenski [Sat, 29 May 2021 17:42:19 +0000 (10:42 -0700)]
Mark juniper-sso-auth test as using LD_PRELOAD

This will allow us to correctly detect it as broken-under-ASAN

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoUpdate changelog
Daniel Lenski [Thu, 20 May 2021 14:43:13 +0000 (07:43 -0700)]
Update changelog

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoAdd tests of using portal-userauthcookie to continue through gateway
Daniel Lenski [Thu, 20 May 2021 01:35:55 +0000 (18:35 -0700)]
Add tests of using portal-userauthcookie to continue through gateway

This test sets up fake-gp-server.py to require a one-time password on the
portal *and* on the gateway, and to set 'portal-userauthcookie' after
successful login to the gateway.  For OpenConnect to successfully login
within prompting for a second password, the 'portal-userauthcookie' value
from the portal must be forwarded to the gateway login request.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoReceiving a portal-*cookie should allow us to automatically retry the login on the...
Daniel Lenski [Fri, 22 May 2020 00:56:19 +0000 (17:56 -0700)]
Receiving a portal-*cookie should allow us to automatically retry the login on the gateway

This applies EVEN IF the the final portal login form was a challenge form, or a SAML
form (that is, if ctx->alt_secret was set).

It appears that the whole point of these `portal-*cookie`s is to allow us to automatically
continue logging in through the gateway.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoDon't save `portal-*cookie` values if they're "empty"
Daniel Lenski [Fri, 22 May 2020 01:01:16 +0000 (18:01 -0700)]
Don't save `portal-*cookie` values if they're "empty"

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoPass the `portal-*cookie` values received in the portal config to the gateway login
Kevin Yue [Wed, 13 May 2020 06:35:42 +0000 (14:35 +0800)]
Pass the `portal-*cookie` values received in the portal config to the gateway login

These "cookies" appear to be the mechanism by which GlobalProtect clients
can login to the portal and then automatically login to gateway *even if*
the credentials used on the portal are not reusable:

1. Because the credentials used on the portal include a one-time password.
2. Because the credentials used on the portal resulted from SAML login.
   (ctx->alt_secret, which leads to a SAML nonce value that can only be
   used once).

The logs provided by users (see
https://gitlab.com/openconnect/openconnect/-/issues/147#note_578888250 and
https://gitlab.com/openconnect/openconnect/-/issues/147#note_580406042)
allowed me to answer one of the key unanswered questions (see
https://gitlab.com/openconnect/openconnect/-/merge_requests/109#note_341959833):

> If we do have a `portal_userauthcookie` and/or
> `portal_prelogonuserauthcookie`, should we omit the password from form
> submitted to the gateway?  Or do we have to leave it in?

The answer is that it doesn't appear to matter: real servers appear to
ignore the `passwd` field if the `portal-*cookie` field is correctly set.

Signed-off-by: Kevin Yue <yuezk001@gmail.com>
Signed-off-by: Daniel Lenski <dlenski@gmail.com>
4 years agoAdd +SIGN-ALL to GnuTLS DTLS ciphersuite configs
David Woodhouse [Tue, 15 Jun 2021 13:33:35 +0000 (14:33 +0100)]
Add +SIGN-ALL to GnuTLS DTLS ciphersuite configs

At least for AES256-SHA et al in DTLSv1.2, we needed to explicitly add
+SIGN-RSA-SHA1. Half the ciphersuites already had +SIGN-ALL anyway, so
make them consistent.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoOffer OpenConnect-specific DTLSv1.2 AEAD suites with OpenSSL again
David Woodhouse [Tue, 15 Jun 2021 13:27:38 +0000 (14:27 +0100)]
Offer OpenConnect-specific DTLSv1.2 AEAD suites with OpenSSL again

These got dropped when we built the list from what's supported instead
of hard-coding it.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoSupport non-AEAD ciphersuites in DTLSv1.2 with GnuTLS
David Woodhouse [Tue, 15 Jun 2021 12:02:49 +0000 (13:02 +0100)]
Support non-AEAD ciphersuites in DTLSv1.2 with GnuTLS

We have encountered a Cisco server in the wild which appears only to
support the legacy ciphersuites. And since we offer a set of DTLSv1.2
ciphers it doesn't fall back to accepting the DTLSv1.0 offer; we end
up with no DTLS at all.

This should fix #249.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agohttp: Allow passing header_cb to do_https_request
Andreas Gnau [Sat, 29 May 2021 11:58:50 +0000 (13:58 +0200)]
http: Allow passing header_cb to do_https_request

Enable passing a header callback to do_https_request in order to be able
to process response headers.

Signed-off-by: Andreas Gnau <rondom@rondom.de>
4 years agoUpdate translations from GNOME
David Woodhouse [Tue, 15 Jun 2021 09:06:29 +0000 (10:06 +0100)]
Update translations from GNOME

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoSwitch to https for all URLs
David Woodhouse [Tue, 15 Jun 2021 09:00:44 +0000 (10:00 +0100)]
Switch to https for all URLs

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoUse https://www.infradead.org/openconnect/download/ URLs
David Woodhouse [Tue, 15 Jun 2021 08:49:22 +0000 (09:49 +0100)]
Use https://www.infradead.org/openconnect/download/ URLs

FTP is getting harder to access these days.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoRemove reference to --allow-obsolete-crypto bypassing policies
David Woodhouse [Tue, 15 Jun 2021 08:11:43 +0000 (09:11 +0100)]
Remove reference to --allow-obsolete-crypto bypassing policies

We do that unconditionally now.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoAdd changelog for system policy disable
David Woodhouse [Sat, 12 Jun 2021 09:42:40 +0000 (10:42 +0100)]
Add changelog for system policy disable

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoMark obsolete-server-crypto test as XFAIL in Fedora/GnuTLS/* CI
Daniel Lenski [Sat, 29 May 2021 17:39:57 +0000 (10:39 -0700)]
Mark obsolete-server-crypto test as XFAIL in Fedora/GnuTLS/* CI

The system-wide minimum crypto policy on Fedora prevents us from enabling
3DES and RC4 ciphers via GnuTLS priority strings. We have unconditionally
disabled it in OpenConnect for now in commit 7e862f2f03 but the
obsolete-server-crypto test is *still* failing, with ocserv reporting
'GnuTLS error (at worker-vpn.c:861): No supported cipher suites have
been found.'

Just mark obsolete-server-crypto test as XFAIL for these builds.  It's
the most accurate description of the state of those tests: these
environments do not provide OpenConnect with the capabilities to
reliably enable obsolete/insecure crypto algorithms in a self-contained
way.

See https://bugzilla.redhat.com/show_bug.cgi?id=1960763 for ongoing
discussions about how to come up with a more reliable, testable, and
maintainable mechanism for OpenConnect to enable these algorithms without
compromising the system-wide minimum crypto policy.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoUnconditionally bypass system crypto policy
David Woodhouse [Sat, 12 Jun 2021 07:50:09 +0000 (08:50 +0100)]
Unconditionally bypass system crypto policy

This makes me extremely sad, but they rolled it out with *no* way to
selectively allow the user to say "connect anyway", as we've always had
for "invalid" certificates, etc.

It's just unworkable and incomplete as currently implemented in the
distributions, so we have no choice except to bypass it and wait for
it to be fixed.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoDisable ASAN tests for now
David Woodhouse [Sat, 12 Jun 2021 07:39:16 +0000 (08:39 +0100)]
Disable ASAN tests for now

We have no idea why they're broken but only in CI.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
4 years agoRevert "with --allow-insecure-crypto, additionally attempt to disable insecure system...
David Woodhouse [Sat, 12 Jun 2021 07:33:10 +0000 (08:33 +0100)]
Revert "with --allow-insecure-crypto, additionally attempt to disable insecure systemwide minimum crypto settings"

This reverts commit 4e07eecaf04a48c3253a5dfd69d817673194e154.

4 years agoMerge branch 'chmod-x_tun-win32.c' of gitlab.com:DimitriPapadopoulos/openconnect
David Woodhouse [Sat, 12 Jun 2021 07:30:15 +0000 (08:30 +0100)]
Merge branch 'chmod-x_tun-win32.c' of gitlab.com:DimitriPapadopoulos/openconnect

4 years agoMerge branch 'obsolete_http_configuration' of gitlab.com:DimitriPapadopoulos/openconnect
David Woodhouse [Fri, 11 Jun 2021 20:46:47 +0000 (21:46 +0100)]
Merge branch 'obsolete_http_configuration' of gitlab.com:DimitriPapadopoulos/openconnect