Commit Graph

2396 Commits

Author SHA1 Message Date
Nikos Mavrogiannopoulos
e05485f008 Merge branch 'issue599' into 'master'
Fix session timeout bypass

Closes #599

See merge request openconnect/ocserv!489
2026-01-29 18:47:55 +00:00
Dimitri Papadopoulos Orfanos
360e4714e3 Merge branch 'bugfix/ban-json' into 'master'
occtl: Fix 'show ip bans' may produce invalid JSON (#683)

Closes #683

See merge request openconnect/ocserv!495
2026-01-26 09:16:47 +02:00
Grigory Trenin
fb41d4203d Fix session timeout bypass
- Fixes an issue #599 where the session timeout could be bypassed
  by reconnecting, such as through a laptop lid close/open cycle.
- Adds 'Session started at:' field to 'occtl show user' output.

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2026-01-25 18:59:13 -05:00
Nikos Mavrogiannopoulos
882759092c Merge branch 'tmp-udp_port' into 'master'
Initialise udp_port using vhost config section

Closes #612

See merge request openconnect/ocserv!431
2026-01-25 17:30:35 +00:00
Nikos Mavrogiannopoulos
d06e67d102 Merge branch 'tmp-inih' into 'master'
inih: updated to latest version r62

See merge request openconnect/ocserv!437
2026-01-25 17:01:47 +00:00
Grigory Trenin
a644718fd7 Fix worker process title not being set
Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2026-01-25 07:33:21 -05:00
Dimitri Papadopoulos
592745b8b9 inih: silence static analysis error
Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
2026-01-25 13:22:37 +01:00
Dimitri Papadopoulos
28252bff8f inih: increased max line size
Re-apply e7233819.

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
2026-01-25 13:22:37 +01:00
Dimitri Papadopoulos
44d58a049c inih: updated to latest version r62
Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
2026-01-25 13:22:37 +01:00
Grigory Trenin
9cc0191236 occtl: Fix 'show ip bans' may produce invalid JSON (#683)
Modified the printing logic to use a 'comma-before' approach instead of
'comma-after'.

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2026-01-23 12:54:43 -05:00
Grigory Trenin
b080d7dd2b Rename min-reauth-time to ban-time (#676)
Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2026-01-23 05:44:05 -05:00
Nikos Mavrogiannopoulos
1c156d8325 Merge branch 'docs/man-tidy' into 'master'
docs: tidy up man pages

See merge request openconnect/ocserv!494
2026-01-11 12:02:01 +00:00
Grigory Trenin
74ebc5ec8a Strip domain suffix from hostname
The hostname validation was rejecting any hostname containg a '.'
character (eg: 'MacBook-Air.local'). This was overly restrictive and
prevented the HOSTNAME environment variable from being populated for
a signifficant number of clients, particularly on macOS.

Strip the domain suffix from such hostnames instead of discarding them.

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2026-01-11 09:15:14 +01:00
Grigory Trenin
08c321c41a docs: tidy up man pages
- Updated the SYNOPSIS of ocserv(8), occtl(8), and ocpasswd(8)
  to match their --help output
- Corrected usage syntax (eg: '-c config' is optional for ocserv,
  'username' is required for ocpasswd).
- Removed non-standard ':' trailing from options definitions
- Documented missing command-line options: --log-stderr,  --syslog,
  --no-chdir, --traceable
- Added default configuration file paths:
  /etc/ocserv/ocserv.conf, /etc/ocserv/ocpasswd
- Documented USER_AGENT environment variable
- Fixed typos

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2026-01-10 18:05:02 -05:00
Grigory Trenin
8636464880 tests: replace strcpy() with strlcpy()
- Replaced strcpy() with strlcpy() in test files
- Added linking to libcommon.a (and its dependency libnettle)
  as not all systems provide strlcpy()
- Centralized syslog_open variable by moving it from multiple definitions
  in main.c, worker.c, and test files into log.c. This avoids duplication
  and resolves a linking conflict with libcommon.a

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2026-01-07 15:46:16 -05:00
Grigory Trenin
e40d735316 occtl: Fix column misalignment in ban command outputs
- Increase the width from 14 to 15 characters for 'show bans' and
'show ban points' commands. This ensures proper column alignment
for all valid IPv4 addresses.

- Reduce Score column to 10 characters since UINT_MAX is typically
10 digits.

- Remove unnecessary (unsinged int) cast since 'score' is an actual
unsigned int.

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2026-01-04 13:32:51 -05:00
Dimitri Papadopoulos
79f8eb35f8 Don't forget to initialise udp_port for vhost
Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
2026-01-03 11:11:36 +02:00
Grigory Trenin
98015b1b24 Fix max_mtu calculation in server stats
proc->mtu was incorrectly compared against min_mtu instead of max_mtu

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2026-01-02 16:34:59 -05:00
Nikos Mavrogiannopoulos
da61847df9 isolate: ensure calling chdir('/') after chroot
Signed-off-by: Nikos Mavrogiannopoulos <n.mavrogiannopoulos@gmail.com>
2026-01-02 16:58:18 +01:00
Nikos Mavrogiannopoulos
ef075f6b83 get_auth_handler2: update to reflect username and password ask
Signed-off-by: Nikos Mavrogiannopoulos <n.mavrogiannopoulos@gmail.com>
2026-01-01 20:14:20 +01:00
Lee Keitel
6e5bbcf5ac Combine username and password in one form
Fixes issue #551.

This patch combines the initial username and password text fields
into a single form. Subsequent requests due to a wrong password
would receive only the password field as before. This mimicks
AnyConnect's default behaviour.

Signed-off-by: Lee Keitel <lee@keitel.xyz>
2026-01-01 20:06:27 +01:00
Grigory Trenin
1893047e8f Fix irregular stats-report-time
Currently 'ocserv' sends session accounting statistics at irregular intervals.
For example, if 'stats-report-time' is set to 60, the actual intervals may vary
between 50, 60, 70, or even 80 seconds.  Moreover, these intervals are not
constant - they fluctuate arbitrarily with each statistics update.

This behavior was intentionally introduced to avoid worker processes acting
simultaneously in scenarios like server restarts, where all clients reconnect
at the same time, which could impose heavy load on the secmod process.

However, it causes issues for RADIUS servers that require accurate and
consistent timing.

Summary of changes:
 - Apply randomization only once when the timer is initially set up, affecting
   only the first timer firing.  All subsequent firings will occur at regular
   intervals relative to the first one.
 - Remove fuzzing from 'interim_update_secs'. This value originates either from
   RADIUS or from 'stats-report-time' and should not be altered.

Closes: #630

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2026-01-01 17:31:01 +01:00
Grigory Trenin
dbbe6de40c Fix premature ban score reset for short ban periods
When ban period is minimal, the 'now > e->expires' condition alone
cleared scores before a client was banned.

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2026-01-01 17:15:37 +01:00
Grigory Trenin
0f53e0d6d9 Communicate secmod address to worker after successful authentication
This ensures all subsequent worker communications reach the original
secmod instance that authenticated the client, enabling correct session
accounting after IP address changes.

Closes: #674

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2025-12-21 11:41:51 +01:00
Grigory Trenin
afa34bbd10 Fix ban score reset logic
The previous condition for resetting a ban score was insufficient.
It failed to reset the score for a client that had just exited a ban,
and also incorrectly reset the score of a currently banned client,
causing premature unbans.

Closes: #678

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2025-12-21 11:24:19 +01:00
Grigory Trenin
d15b2af4b2 Fix 'occtl show ip bans' showing expired ban entries
Added current timestamp comparison to ensure only active bans
are shown by 'occtl show ip bans'.

Closes: #675.

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2025-12-21 10:54:16 +01:00
Grigory Trenin
1c31314df4 occtl: Fix missing column headers in 'show ip bans' output
Existing code used the loop index 'i == 0' to determine when to print
column headers. However, a 'continue' statement inside the loop could
skip the 'i = 0' iteration, causing the headers to never be printed.

Introduced a separate boolean 'header_printed' variable to track
whether headers have been printed.

Closes: #677

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2025-12-21 10:52:20 +01:00
Grigory Trenin
3892e032d9 Fix DTLS with systemd socket activation
Remove IPV6_V6ONLY flag from per-client UDP sockets as it prevents
IPv4 traffic on systemd-provided IPv6 sockets. This was a legacy
from the old reopen_udp_port() code and is no longer needed.

Fixes: #647

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2025-12-21 10:48:59 +01:00
Dimitri Papadopoulos Orfanos
acf8c5bc6a Merge branch 'tmp-do_while' into 'master'
Simplify do/while loops

See merge request openconnect/ocserv!458
2025-12-06 11:39:32 +01:00
Dimitri Papadopoulos Orfanos
86c214feb9 Merge branch 'tmp-printf' into 'master'
Modernize printf() format

See merge request openconnect/ocserv!436
2025-12-06 11:20:28 +01:00
Dimitri Papadopoulos Orfanos
c5acc8580e Merge branch 'tmp-llhtp' into 'master'
llhttp: updated to latest version 9.3.0

See merge request openconnect/ocserv!459
2025-12-06 11:15:36 +01:00
Dimitri Papadopoulos Orfanos
c545361202 Merge branch 'tmp-CID-356061' into 'master'
Fix issue flagged by Coverity

See merge request openconnect/ocserv!460
2025-12-06 11:14:21 +01:00
Dimitri Papadopoulos Orfanos
31b3d6b930 Merge branch 'tmp-cloexec' into 'master'
Update cloexec.* vendored files

See merge request openconnect/ocserv!439
2025-12-06 11:10:11 +01:00
Dimitri Papadopoulos Orfanos
70a4269e38 Merge branch 'tmp-sigaltstack_RESOURCE_LEAK' into 'master'
Silence coverity

See merge request openconnect/ocserv!446
2025-12-06 11:09:29 +01:00
Dimitri Papadopoulos Orfanos
e5de27a316 Merge branch 'tmp-main' into 'master'
Main() signature compliant with C standard

See merge request openconnect/ocserv!438
2025-12-06 11:08:40 +01:00
Dimitri Papadopoulos Orfanos
134ae37a13 Merge branch 'tmp-freeradius-client-1.1.8' into 'master'
Work around API breakage in freeradius-client 1.1.8

Closes #650

See merge request openconnect/ocserv!453
2025-12-06 11:08:18 +01:00
Pavel Lavrukhin
59c67fb160 Fix invalid JSON output in occtl commands 2025-12-06 10:54:28 +01:00
Grigory Trenin
4dcf3aa524 Fix iroute option processing
Return proper values (1 for success, 0 for error) from iroutes_handler()
to prevent premature parser termination

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2025-11-30 19:53:14 -05:00
Grigory Trenin
a307bda153 Repair ping-leases option
A misplaced bracket passed 'sizeof(*addr1) == -1' instead of 'sizeof(*addr1)'
to sendto(), causing it to fail. This prevented icmp_ping4() from sending
ICMP echo requests.

Consequently, the 'ping-leases' option has been non-functional since
this bug was introduced in commit 2aaa287a.

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2025-11-21 15:59:01 -05:00
Dimitri Papadopoulos Orfanos
88054ae4c2 Merge branch 'socket-remove' into 'master'
Ignore ENOENT error when removing occtl socket file

See merge request openconnect/ocserv!470
2025-11-21 21:17:51 +01:00
Dimitri Papadopoulos Orfanos
9298a6006c Merge branch 'bugfix/arg-order' into 'master'
Fix swapped arguments in the printf-like call

See merge request openconnect/ocserv!467
2025-11-21 21:08:19 +01:00
Dimitri Papadopoulos Orfanos
77fa214d6b Merge branch 'bugfix/cscot-url' into 'master'
Fix CSCOT URLs handling

See merge request openconnect/ocserv!456
2025-11-21 21:04:02 +01:00
Grigory Trenin
0017038bcd Ignore ENOENT error when removing occtl socket file
Silence misleading debug message on server startup since absence
of the socket file is normal and expected.

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2025-11-16 14:40:04 -05:00
Grigory Trenin
22a762da43 Replace non-ASCII character in error message
Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2025-11-12 07:40:21 -05:00
Grigory Trenin
093051ea5f Fix printf argument order
Correct the argument order passed to the printf-like function
to match the format string "expected %d, received %d".

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2025-11-06 16:54:42 -05:00
Grigory Trenin
1d76699731 Revert "combined CSCOT URLs"
This reverts commit 6fea92a961.

The URL consolidation caused worker to no longer recognize either of the original URLs.
This led to "unexpected URL" errors and immediate worker termination.

The original change was intended to simplify URL configuration,
but it inadvertently broke functionality for both endpoints.

Signed-off-by: Grigory Trenin <grigory.trenin@gmail.com>
2025-11-05 09:12:27 -05:00
Dimitri Papadopoulos
cc062ae4aa Fix issue flagged by Coverity
356061 Use of 32-bit time_t

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
2025-09-01 00:58:17 +03:00
Dimitri Papadopoulos
cc86919f28 llhttp: updated to latest version 9.3.0
Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
2025-08-28 22:17:07 +03:00
Dimitri Papadopoulos
2a2334513c Simplify do/while loops
Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
2025-08-27 11:10:59 +03:00
Dimitri Papadopoulos
8b284c645e Work around API breakage in freeradius-client 1.1.8
FreeRADIUS client 1.1.8 introduced this backwards-incompatible API change:
50d78bb53f

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
2025-05-23 11:29:14 +02:00