]> git.ipfire.org Git - thirdparty/freeradius-server.git/log
thirdparty/freeradius-server.git
3 weeks agorlm_ftp.c: OOB NUL write when total is exact multiple of FTP_BODY_ALLOC_CHUNK
Alexander Bainbridge-Sedivy [Mon, 11 May 2026 18:48:30 +0000 (14:48 -0400)] 
rlm_ftp.c: OOB NUL write when total is exact multiple of FTP_BODY_ALLOC_CHUNK

3 weeks agorlm_always/rlm_attr_filter: dead NULL check + mutable leak
Alexander Bainbridge-Sedivy [Mon, 11 May 2026 18:26:29 +0000 (14:26 -0400)] 
rlm_always/rlm_attr_filter: dead NULL check + mutable leak

3 weeks agoproto_detail: FD leak and NULL filename_work in error log
Alexander Bainbridge-Sedivy [Mon, 11 May 2026 15:57:04 +0000 (11:57 -0400)] 
proto_detail: FD leak and NULL filename_work in error log

3 weeks agobfd: three bugs — NULL deref on fr_pair_copy, FD leak on setsockopt fail, inverted...
Alexander Bainbridge-Sedivy [Mon, 11 May 2026 15:29:43 +0000 (11:29 -0400)] 
bfd: three bugs — NULL deref on fr_pair_copy, FD leak on setsockopt fail, inverted wraparound condition

3 weeks agoregex.c: missing NULL check after retry talloc_array in regex_substitute
Alexander Bainbridge-Sedivy [Mon, 11 May 2026 15:08:53 +0000 (11:08 -0400)] 
regex.c: missing NULL check after retry talloc_array in regex_substitute

3 weeks agopcap.c: unchecked pcap_open_dead NULL in STDIO_OUT; handle leaked on dump_open fail
Alexander Bainbridge-Sedivy [Mon, 11 May 2026 15:08:02 +0000 (11:08 -0400)] 
pcap.c: unchecked pcap_open_dead NULL in STDIO_OUT; handle leaked on dump_open fail

3 weeks agofix(perm): wrong sticky-bit mask, and sc_len assigned instead of len in #else blocks
Alexander Bainbridge-Sedivy [Mon, 11 May 2026 13:59:32 +0000 (09:59 -0400)] 
fix(perm): wrong sticky-bit mask, and sc_len assigned instead of len in #else blocks

3 weeks agolib/ldap: off-by-one in suffix check, double-backslash normalisation, NULL dereferenc...
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 20:54:03 +0000 (16:54 -0400)] 
lib/ldap: off-by-one in suffix check, double-backslash normalisation, NULL dereference in fr_ldap_map_do

3 weeks agolisten/control/proto_control_unix.c: fopencookie return values unchecked, NULL passed...
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 20:49:45 +0000 (16:49 -0400)] 
listen/control/proto_control_unix.c: fopencookie return values unchecked, NULL passed to setvbuf

3 weeks agosnmp.c: fix index underflow, two NULL derefs, and unchecked alloc return values
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 20:34:49 +0000 (16:34 -0400)] 
snmp.c: fix index underflow, two NULL derefs, and unchecked alloc return values

3 weeks agorlm_sqlippool: missing NULL check for query in IPPOOL_ALLOC_FIND case
Alexander Bainbridge-Sedivy [Mon, 11 May 2026 13:20:56 +0000 (09:20 -0400)] 
rlm_sqlippool: missing NULL check for query in IPPOOL_ALLOC_FIND case

3 weeks agostate.c: fix state leak
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 20:23:30 +0000 (16:23 -0400)] 
state.c: fix state leak

3 weeks agomap: fix size_t underflow in map_afrom_fields when rhs is a lone unclosed quote
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 19:28:15 +0000 (15:28 -0400)] 
map: fix size_t underflow in map_afrom_fields when rhs is a lone unclosed quote

3 weeks agorlm_sql: ignored return value from escape function allows unescaped SQL
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 18:58:29 +0000 (14:58 -0400)] 
rlm_sql: ignored return value from escape function allows unescaped SQL

3 weeks agorlm_unbound: RCODEERROR cases are dead code (placed after default: return)
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 18:30:32 +0000 (14:30 -0400)] 
rlm_unbound: RCODEERROR cases are dead code (placed after default: return)

3 weeks agorlm_krb5: fix use-after-free — move krb5_free_context to after keytab/ccache close
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 18:03:07 +0000 (14:03 -0400)] 
rlm_krb5: fix use-after-free — move krb5_free_context to after keytab/ccache close

3 weeks agorlm_attr_filter: fix NULL dereference on nullable key
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 18:01:36 +0000 (14:01 -0400)] 
rlm_attr_filter: fix NULL dereference on nullable key

3 weeks agorlm_unpack: fix stale 'used' value in loop boundary check causes incorrect break...
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 17:55:37 +0000 (13:55 -0400)] 
rlm_unpack: fix stale 'used' value in loop boundary check causes incorrect break condition

3 weeks agovmps: close sockfd before return on setsockopt failure
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 17:52:46 +0000 (13:52 -0400)] 
vmps: close sockfd before return on setsockopt failure

3 weeks agoldap_sync: fix off-by-one in packet_id bounds assertion
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 17:51:37 +0000 (13:51 -0400)] 
ldap_sync: fix off-by-one in packet_id bounds assertion

3 weeks agounlang/call: add missing default case for pair_update_reply() allocation failure
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 15:19:52 +0000 (11:19 -0400)] 
unlang/call: add missing default case for pair_update_reply() allocation failure

3 weeks agoatexit.h: guard NULL _init call in non-threaded fr_atexit_global_once macro
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 14:45:28 +0000 (10:45 -0400)] 
atexit.h: guard NULL _init call in non-threaded fr_atexit_global_once macro

3 weeks agoatexit.c: fix memory leak of fr_atexit_global and unsigned return -1 in disarm
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 14:44:03 +0000 (10:44 -0400)] 
atexit.c: fix memory leak of fr_atexit_global and unsigned return -1 in disarm

3 weeks agolib/util/fifo: fix off-by-one in ring-buffer wrap check (> → >=)
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 13:25:29 +0000 (09:25 -0400)] 
lib/util/fifo: fix off-by-one in ring-buffer wrap check (> → >=)

3 weeks agocap.c: fr_cap_is_enabled ignores set parameter, always queries CAP_EFFECTIVE
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 13:24:18 +0000 (09:24 -0400)] 
cap.c: fr_cap_is_enabled ignores set parameter, always queries CAP_EFFECTIVE

3 weeks agolog.c: fix three stderr capture/restore bugs — wrong FD slots and wrong context struct
Alexander Bainbridge-Sedivy [Fri, 8 May 2026 13:11:49 +0000 (09:11 -0400)] 
log.c: fix three stderr capture/restore bugs — wrong FD slots and wrong context struct

3 weeks agoexec.c: fix stderr_pipe FD leak when fork fails in fr_exec_fork_wait
Alexander Bainbridge-Sedivy [Thu, 7 May 2026 20:24:39 +0000 (16:24 -0400)] 
exec.c: fix stderr_pipe FD leak when fork fails in fr_exec_fork_wait

3 weeks agolib/ldap/util: fix double-backslash normalise_dn outputs extra char; fix fr_ldap_comm...
Alexander Bainbridge-Sedivy [Thu, 7 May 2026 19:16:15 +0000 (15:16 -0400)] 
lib/ldap/util: fix double-backslash normalise_dn outputs extra char; fix fr_ldap_common_dn off-by-one skips first char of part

3 weeks agolib/ldap: guard ldap_msg_types[] lookup against out-of-bounds and NULL entries
Alexander Bainbridge-Sedivy [Thu, 7 May 2026 19:14:25 +0000 (15:14 -0400)] 
lib/ldap: guard ldap_msg_types[] lookup against out-of-bounds and NULL entries

3 weeks agolib/ldap: fix swapped pointer arguments in _ldap_connection_free debug message
Alexander Bainbridge-Sedivy [Thu, 7 May 2026 19:06:04 +0000 (15:06 -0400)] 
lib/ldap: fix swapped pointer arguments in _ldap_connection_free debug message

3 weeks agolib/ldap: free bind_ctx in _ldap_bind_io_read error paths
Alexander Bainbridge-Sedivy [Thu, 7 May 2026 19:04:18 +0000 (15:04 -0400)] 
lib/ldap: free bind_ctx in _ldap_bind_io_read error paths

3 weeks agolib/ldap: fix reversed singular/plural in ldap_trunk_search_results_debug
Alexander Bainbridge-Sedivy [Thu, 7 May 2026 19:03:25 +0000 (15:03 -0400)] 
lib/ldap: fix reversed singular/plural in ldap_trunk_search_results_debug

3 weeks agolib/json: check return value of fr_value_box_bstrndup in fr_json_object_to_value_box
Alexander Bainbridge-Sedivy [Thu, 7 May 2026 19:02:15 +0000 (15:02 -0400)] 
lib/json: check return value of fr_value_box_bstrndup in fr_json_object_to_value_box

3 weeks agoeap_aka_sim/xlat: dot-notation xlat aliases registered but never unregistered
Alexander Bainbridge-Sedivy [Thu, 7 May 2026 19:01:04 +0000 (15:01 -0400)] 
eap_aka_sim/xlat: dot-notation xlat aliases registered but never unregistered

3 weeks agoeap_aka_sim/xlat: NULL dereference in id_method and id_type xlat handlers if dict...
Alexander Bainbridge-Sedivy [Thu, 7 May 2026 18:59:38 +0000 (14:59 -0400)] 
eap_aka_sim/xlat: NULL dereference in id_method and id_type xlat handlers if dict enum not found

3 weeks agoeap_aka_sim/id: fix wrong tag bytes for FASTAUTH in hint_byte_matrix
Alexander Bainbridge-Sedivy [Thu, 7 May 2026 18:58:12 +0000 (14:58 -0400)] 
eap_aka_sim/id: fix wrong tag bytes for FASTAUTH in hint_byte_matrix

3 weeks agoeap/chbind: remove dead attr_message_authenticator check in chbind_build_response
Alexander Bainbridge-Sedivy [Thu, 7 May 2026 18:53:42 +0000 (14:53 -0400)] 
eap/chbind: remove dead attr_message_authenticator check in chbind_build_response

3 weeks agolib/server/exec_legacy: fix off-by-one OOB write in radius_exec_program_legacy
Alexander Bainbridge-Sedivy [Thu, 7 May 2026 18:41:12 +0000 (14:41 -0400)] 
lib/server/exec_legacy: fix off-by-one OOB write in radius_exec_program_legacy

3 weeks agoremove tmpl from fuzzer CI checks
Alan T. DeKok [Wed, 27 May 2026 17:20:42 +0000 (13:20 -0400)] 
remove tmpl from fuzzer CI checks

it's randomly failing, and preventing other changes from being
merged

3 weeks agoadd one more suppression for leaks inside of the llvm fuzzer
Alan T. DeKok [Wed, 27 May 2026 16:19:18 +0000 (12:19 -0400)] 
add one more suppression for leaks inside of the llvm fuzzer

3 weeks agoadd config file corpus
Alan T. DeKok [Wed, 27 May 2026 01:50:43 +0000 (21:50 -0400)] 
add config file corpus

3 weeks agoadd xlat corpus
Alan T. DeKok [Wed, 27 May 2026 01:50:20 +0000 (21:50 -0400)] 
add xlat corpus

3 weeks agoadd tmpl corpus
Alan T. DeKok [Wed, 27 May 2026 01:49:56 +0000 (21:49 -0400)] 
add tmpl corpus

3 weeks agoadd fuzzer corpus for base16_32_64 tests
Alan T. DeKok [Wed, 27 May 2026 01:49:00 +0000 (21:49 -0400)] 
add fuzzer corpus for base16_32_64 tests

3 weeks agoadd tmpl fuzzer
Alan T. DeKok [Wed, 27 May 2026 01:47:19 +0000 (21:47 -0400)] 
add tmpl fuzzer

3 weeks agooss-fuzz: Add new fuzzer targetting base16/32/64 encode/decode
Arthur Chan [Fri, 23 Jan 2026 13:07:16 +0000 (13:07 +0000)] 
oss-fuzz: Add new fuzzer targetting base16/32/64 encode/decode

Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
With manual merges for new location of the fuzzer

3 weeks agocatch more corner cases of constant strings when tokenizing
Alan T. DeKok [Tue, 26 May 2026 02:10:49 +0000 (22:10 -0400)] 
catch more corner cases of constant strings when tokenizing

update to commit b17b28a02

3 weeks agoreturn 0 for pop case
Alan T. DeKok [Mon, 25 May 2026 21:15:20 +0000 (17:15 -0400)] 
return 0 for pop case

the caller already checks for this.  Previously, all paths would
return 1, which doesn't make sense

3 weeks agomake cf_section_dup() iterative
Alan T. DeKok [Mon, 25 May 2026 17:30:52 +0000 (13:30 -0400)] 
make cf_section_dup() iterative

and add assertions that we can't copy the inputs back to the
inputs

3 weeks agomore stringent checks on references
Alan T. DeKok [Mon, 25 May 2026 17:28:56 +0000 (13:28 -0400)] 
more stringent checks on references

we can't refer to any parent, otherwise we end up copying ourselves

3 weeks agoinvalid control characters are errors
Alan T. DeKok [Mon, 25 May 2026 16:22:52 +0000 (12:22 -0400)] 
invalid control characters are errors

3 weeks agotrack reference braces.
Alan T. DeKok [Mon, 25 May 2026 15:24:52 +0000 (11:24 -0400)] 
track reference braces.

so we can tell the difference between "close the at reference"
and "close the parent section"

3 weeks agoturn assert into run-time check
Alan T. DeKok [Mon, 25 May 2026 15:10:29 +0000 (11:10 -0400)] 
turn assert into run-time check

3 weeks agoAdd connection subsection to rlm_sql sample config
Nick Porter [Mon, 25 May 2026 15:41:04 +0000 (16:41 +0100)] 
Add connection subsection to rlm_sql sample config

And correct comment about `start` - failure to open connections no
longer stops the server from starting.

3 weeks agofix end conditions on fr_skip_*() functions
Alan T. DeKok [Mon, 25 May 2026 14:41:25 +0000 (10:41 -0400)] 
fix end conditions on fr_skip_*() functions

3 weeks agoadd cf_file_read_buffer(), and use it in the fuzzer
Alan T. DeKok [Mon, 25 May 2026 14:11:53 +0000 (10:11 -0400)] 
add cf_file_read_buffer(), and use it in the fuzzer

3 weeks agobuild CF and xlat fuzzers, but don't run them in CI
Alan T. DeKok [Mon, 25 May 2026 12:41:51 +0000 (08:41 -0400)] 
build CF and xlat fuzzers, but don't run them in CI

so that we can at least try to see what's up

3 weeks agowe should call tmpl_global_init(), too
Alan T. DeKok [Mon, 25 May 2026 12:36:41 +0000 (08:36 -0400)] 
we should call tmpl_global_init(), too

3 weeks agodisable xlat fuzzer
Alan T. DeKok [Mon, 25 May 2026 12:21:36 +0000 (08:21 -0400)] 
disable xlat fuzzer

there are still issues with the code, and the fuzzer failures are
causing other patches to not be merged.

3 weeks agomake xlat fuzzer use the common framework
Alan T. DeKok [Mon, 25 May 2026 11:57:42 +0000 (07:57 -0400)] 
make xlat fuzzer use the common framework

and update it so that it actually runs

3 weeks agoclarify errors and clean up checks for invalid name
Alan T. DeKok [Mon, 25 May 2026 11:55:54 +0000 (07:55 -0400)] 
clarify errors and clean up checks for invalid name

the fuzzer showed that inputs like "[0]" were parsed, but the
tmpl_t wasn't properly updated.

This change makes the errors less opaque, and tightens the
restrictions on invalid names.

3 weeks agomake "util" use the common framework
Alan T. DeKok [Mon, 25 May 2026 02:04:34 +0000 (22:04 -0400)] 
make "util" use the common framework

which is simpler, and less code

3 weeks agomove common code to common function
Alan T. DeKok [Mon, 25 May 2026 01:44:01 +0000 (21:44 -0400)] 
move common code to common function

3 weeks agowe need to call tmpl_global_init before parsing tmpls
Alan T. DeKok [Mon, 25 May 2026 03:36:23 +0000 (23:36 -0400)] 
we need to call tmpl_global_init before parsing tmpls

3 weeks agoif the tmpl is unresolved, set the type to UNRESOLVED
Alan T. DeKok [Mon, 25 May 2026 03:31:39 +0000 (23:31 -0400)] 
if the tmpl is unresolved, set the type to UNRESOLVED

3 weeks agomerge adjacent constant strings in xlat_tokenize_input()
Alan T. DeKok [Mon, 25 May 2026 02:58:15 +0000 (22:58 -0400)] 
merge adjacent constant strings in xlat_tokenize_input()

3 weeks agoremove unnecessary rule
Alan T. DeKok [Mon, 25 May 2026 01:40:48 +0000 (21:40 -0400)] 
remove unnecessary rule

3 weeks agotypo
Alan T. DeKok [Mon, 25 May 2026 01:40:41 +0000 (21:40 -0400)] 
typo

3 weeks agofree on error
Alan T. DeKok [Sun, 24 May 2026 13:29:56 +0000 (09:29 -0400)] 
free on error

3 weeks agotighten restrictions on decoding
Alan T. DeKok [Sun, 24 May 2026 13:17:21 +0000 (09:17 -0400)] 
tighten restrictions on decoding

* reject indefinite length forms for all tags
* reject lengths which are non minimal

3 weeks agobe more precise for time parsing
Alan T. DeKok [Sun, 24 May 2026 13:02:21 +0000 (09:02 -0400)] 
be more precise for time parsing

* if there's a '.' but no subseconds, that's an error
* if there are subseconds, check that there's a trailing 'Z'

3 weeks agoclean up vp on error path
Alan T. DeKok [Sun, 24 May 2026 12:15:16 +0000 (08:15 -0400)] 
clean up vp on error path

it's in tmp_ctx, so it's not leaked. but it's still good to lower
peak memory usage

3 weeks agoput data for different roots into named subdirectories
Alan T. DeKok [Sun, 24 May 2026 12:12:45 +0000 (08:12 -0400)] 
put data for different roots into named subdirectories

so that we can fuzz different parts of DER

3 weeks agohoist "create fuzzer dir" code into separate function
Alan T. DeKok [Sat, 23 May 2026 20:49:45 +0000 (16:49 -0400)] 
hoist "create fuzzer dir" code into separate function

3 weeks agoseparate "base" fuzzer_dir from "current" or "proto" dir
Alan T. DeKok [Sat, 23 May 2026 18:09:29 +0000 (14:09 -0400)] 
separate "base" fuzzer_dir from "current" or "proto" dir

in preparation for allowed DER to have different bases

3 weeks agorename variable holding FD to be fuzzer_fd
Alan T. DeKok [Sat, 23 May 2026 17:56:50 +0000 (13:56 -0400)] 
rename variable holding FD to be fuzzer_fd

there's already a fuzzer_dir which is a string

3 weeks agosimplify definitions of allowed_chars
Alan T. DeKok [Sat, 23 May 2026 17:52:09 +0000 (13:52 -0400)] 
simplify definitions of allowed_chars

to make them clearer, and to have more re-use

3 weeks agopause subsequent connections from dynamic clients
Alan T. DeKok [Thu, 21 May 2026 23:41:44 +0000 (18:41 -0500)] 
pause subsequent connections from dynamic clients

while the first one is being defined

and then either allow or deny all subsequent connections

3 weeks agoRevert "fix multiple connections from dynamic clients"
Alan T. DeKok [Thu, 21 May 2026 22:50:26 +0000 (17:50 -0500)] 
Revert "fix multiple connections from dynamic clients"

This reverts commit 01748d3363b6a38f92eef3cf7ff8c638a6e06962.

3 weeks agomulti-server: bump radenv to 1.0.2
Arran Cudbard-Bell [Fri, 22 May 2026 13:11:06 +0000 (09:11 -0400)] 
multi-server: bump radenv to 1.0.2

The published package is now named 'radenv' and lives under
pypi.inkbridge.io/radenv/. Script entrypoints follow the same rename:
multi-server-test{,-config} -> radenv{,-config}.

See InkbridgeNetworks/radenv@v1.0.2 for the upstream rename.

4 weeks agomulti-server: install radenv from inkbridge pypi instead of git clone
Arran Cudbard-Bell [Fri, 22 May 2026 03:46:55 +0000 (23:46 -0400)] 
multi-server: install radenv from inkbridge pypi instead of git clone

Drop the github.com/InkbridgeNetworks/radenv.git checkout + 'make
configure' dance and install the framework as a pip package from the
inkbridge index instead. Pinned version stays in RADENV_VERSION so
bumps are a one-line change.

  --extra-index-url https://pypi.inkbridge.io/ freeradius-multi-server==1.0.1

The inkbridge host already serves the PEP 503 simple listing at its
root, so no /simple/ suffix. --extra-index-url keeps the default
PyPI fallback for transitive deps.

Switches the python3 -m src.<module> invocations over to the
multi-server-test / multi-server-test-config entrypoints that the
sdist exposes via [project.scripts]; the cd / venv-activate dance
in front of every call goes away.

Also bumps actions/upload-artifact from v4 (Node.js 20, deprecated
2026-06-02) to v6 (Node.js 24) so ci-multi-server-tests stops
emitting the deprecation warning on every run.

Closes #5860

4 weeks agoprofiling image: stage /docker-entrypoint.sh so it's a drop-in for service
Arran Cudbard-Bell [Fri, 22 May 2026 03:20:51 +0000 (23:20 -0400)] 
profiling image: stage /docker-entrypoint.sh so it's a drop-in for service

src/tests/multi-server/environments/kafka.yml.j2 (and the other env
templates) override the Dockerfile entrypoint with a bash wrapper that
still execs /docker-entrypoint.sh. The service image stages that file
via service.{deb,rpm}.m4 but the profiling image didn't, so the
kafka-producer1 container exited 127 ("command not found") in
profiling-mode multi-server runs.

Add the same COPY + chmod to common.freeradius-profile-build.m4. Leave
the per-distro profiling.{deb,rpm}.m4 EXPOSE / CMD (sleep loop) alone
since compose overrides them anyway.

4 weeks agomulti-server / docker: cleaner path layout and plain-ascii arrows
Arran Cudbard-Bell [Fri, 22 May 2026 03:17:38 +0000 (23:17 -0400)] 
multi-server / docker: cleaner path layout and plain-ascii arrows

Reorder the profiling-results path so branch / commit / run-index
come before the test name:

  before: prof-results/<test>/<mode>/<branch>/<commit>/<run-index>
  after:  prof-results/<branch>/<commit>/<run-index>/<test>/<mode>

The run-index now counts at the branch/commit level instead of per
(test, mode), so a single CI invocation's parallel tests share an
index and a re-run of the same commit gets the next index.

Also swap the unicode '->' arrows in docker.mk's DOCKER_BUILD header
for plain '>' to match the BUILD echo style.

4 weeks agoprofiling image: install with --prefix=/usr to match deb/rpm layout
Arran Cudbard-Bell [Fri, 22 May 2026 03:08:14 +0000 (23:08 -0400)] 
profiling image: install with --prefix=/usr to match deb/rpm layout

The profiling Dockerfile chain used the default ./configure prefix
(/usr/local), so radclient / radiusd / etc. ended up under
/usr/local/bin and /usr/local/sbin while the service image (deb/rpm
install) puts them under /usr/bin and /usr/sbin. Test fixtures had
to either drop absolute paths or branch on mode.

Pass --prefix=/usr so the source build lands binaries at the same
absolute paths as the production packages. Update the radiusd ->
freeradius alias symlink to match. Restore /usr/bin/radclient in the
proxy-accept and proxy-multihop-accept test templates now that both
modes resolve it the same way.

4 weeks agomulti-server: invoke radclient from PATH; surface docker build log on failure
Arran Cudbard-Bell [Fri, 22 May 2026 03:03:55 +0000 (23:03 -0400)] 
multi-server: invoke radclient from PATH; surface docker build log on failure

The proxy-accept and proxy-multihop-accept test templates were calling
/usr/bin/radclient directly. That path is correct for service mode
(deb-installed FR) but the profiling image builds from source with the
default ./configure prefix, so radclient lands at /usr/local/bin/radclient
and the exec failed with 'No such file or directory'. Drop the absolute
path and rely on $PATH so both modes work.

Also add the same Show-docker-build-log failure step to
ci-multi-server-tests.yml that docker-refresh / docker-crossbuild /
docker-service already have, so the apt errors from a failed
crossbuild / profiling-deps build aren't trapped in a per-job runner
log file.

scripts/docker/docker.mk: switch the PULL echo from 'latest <- registry'
to 'latest < registry' to match the BUILD echo's plain redirect style.

4 weeks agocommon.deb.dbgsym: tolerate ddebs version skew per-package
Arran Cudbard-Bell [Fri, 22 May 2026 02:11:45 +0000 (22:11 -0400)] 
common.deb.dbgsym: tolerate ddebs version skew per-package

ddebs.ubuntu.com and debian-debug rebuild dbgsyms slower than the
matching main package gets a security update. On any given day a
handful of entries are in skew: dbgsym pinned to -buildN while main
is at -ubuntuN.M.K, so an apt-get install of the full list fails with
unmet dependencies. Recent refresh runs caught 9 packages mid-skew on
jammy in one snapshot.

Switch back to per-package install with a WARNING fallback. Skewed
entries are logged loudly so missing symbols stay visible, and the
remaining ~15 of ~24 dbgsyms still land. The next refresh picks up
the previously-skewed ones once ddebs catches up.

4 weeks agodocker-refresh: build crossbuild from upstream OS, run freeradius in parallel with...
Arran Cudbard-Bell [Fri, 22 May 2026 01:23:23 +0000 (21:23 -0400)] 
docker-refresh: build crossbuild from upstream OS, run freeradius in parallel with CI bases

process-freeradius-images was overriding crossbuild's FROM to
self-hosted-ci-<distro> via CB_FROM_* env vars to reuse the slim CI
toolchain layer. The reuse saved a minute or two of apt-install per
distro at the cost of a hard dependency on process-ci-images
(crossbuild's FROM had to exist in the registry before the build).

Drop the CB_FROM_* block so crossbuild builds from the upstream
ubuntu/debian/rocky base directly, same path service uses. Trades a
modest build-time increase for parallelism with process-ci-images
and removes the cross-job FROM-chain that broke during the
self-hosted-{deb,rocky} -> self-hosted-ci rename.

4 weeks agodocker-refresh: serialise concurrent refresh runs
Arran Cudbard-Bell [Fri, 22 May 2026 01:19:48 +0000 (21:19 -0400)] 
docker-refresh: serialise concurrent refresh runs

Add a workflow-level concurrency group with cancel-in-progress: false
so a second refresh trigger (push to master + a manual workflow_dispatch,
two manual triggers in quick succession, or the nightly schedule
overlapping a push) queues behind the running one instead of starting
a second parallel refresh.

cancel-in-progress is left false: an in-flight refresh that's halfway
through publishing :latest tags shouldn't be torn down by the next
trigger; let it finish, then run the queued one which re-publishes
everything cleanly.

4 weeks agodocker-refresh: chain freeradius-images on ci-images
Arran Cudbard-Bell [Fri, 22 May 2026 01:16:56 +0000 (21:16 -0400)] 
docker-refresh: chain freeradius-images on ci-images

process-freeradius-images was running in parallel with
process-ci-images, both gated on process-docker-cli. crossbuild
FROMs self-hosted-ci-<distro>:latest and resolved that via the
previous nightly's registry copy. The rename from
self-hosted-{deb-,rocky}<distro> to self-hosted-ci-<distro> means
no previous nightly has published the new tag yet, so the parallel
crossbuild step now fails with 'manifest not found' on the FROM.

Serialise: freeradius-images needs ci-images. One extra wait per
refresh in exchange for a working FROM chain through any future
rename.

4 weeks agodocker-refresh: rename CI bases to self-hosted-ci-<distro>, surface build log on...
Arran Cudbard-Bell [Fri, 22 May 2026 01:05:24 +0000 (21:05 -0400)] 
docker-refresh: rename CI bases to self-hosted-ci-<distro>, surface build log on failure

The slim CI build bases (built from scripts/docker/build/<distro>/Dockerfile.ci
and consumed by ci-deb.yml / ci-rpm.yml) were named inconsistently:
the rpm side ran as self-hosted-rocky{9,10} and the deb side as
self-hosted-deb-{debian12,debian13,debiansid,ubuntu22,ubuntu24,ubuntu26}.
Unify on self-hosted-ci-<distro> across both families. self-hosted-ubuntu24
(no -ci-) stays as the GH runner host image so the two roles are
distinguishable.

Updates the matrix entries in docker-refresh.yml, the CB_FROM_* env
in process-freeradius-images and docker-crossbuild.yml, and the
BUILD_IMAGE strings in ci-deb.yml / ci-rpm.yml.

Also re-adds the Show docker build logs failure step to
process-freeradius-images (got lost in an earlier rewrite). Without
it the actual apt errors from the dbgsym install stay hidden in
build/docker/build.<os>.profiling-deps on the runner.

4 weeks agodocker-refresh: force bash for container-based jobs
Arran Cudbard-Bell [Fri, 22 May 2026 00:45:43 +0000 (20:45 -0400)] 
docker-refresh: force bash for container-based jobs

When a GH Actions job declares a container:, the per-step run: shell
defaults to /bin/sh (dash on the cli image's debian base). The Create
build dependency package step uses $(stat -c'%u:%g' .git) inside an
unquoted heredoc, and dash fails to parse that with a cryptic
'Syntax error: "(" unexpected'. Pin shell: bash for both
process-ci-images and process-freeradius-images.

Also renames process-images to process-ci-images for clarity now
that it only covers the CI runner / build bases plus pull-through
caches.

4 weeks agodocker-refresh: rebuild freeradius-build-deps.deb for self-hosted-ubuntu24
Arran Cudbard-Bell [Fri, 22 May 2026 00:32:22 +0000 (20:32 -0400)] 
docker-refresh: rebuild freeradius-build-deps.deb for self-hosted-ubuntu24

scripts/ci/docker/Dockerfile COPYs /freeradius-build-deps.deb and
/freeradius-build-deps-extra.deb into the runner host image. After the
matrix split the build step was orphaned in process-host-bases so the
files were never generated, and the docker build failed with a 'cache
key not found' on the COPY. Re-add the dep-pkg step in
process-host-bases, gated on a needs_build_deps flag on the ubuntu24
matrix entry.

4 weeks agodocker-refresh: build dind + cli first, run the rest under fresh dind
Arran Cudbard-Bell [Fri, 22 May 2026 00:23:34 +0000 (20:23 -0400)] 
docker-refresh: build dind + cli first, run the rest under fresh dind

Split docker-refresh into a four-stage pipeline so the freshly built
dind sidecar and docker-cli job-container are in the registry before
anything else uses them.

  process-host-bases    raw host, parallel: self-hosted-ubuntu24
                        (alias self-hosted) and self-hosted-docker-dind
  process-docker-cli    raw host, needs process-host-bases: builds
                        self-hosted-docker-cli, which FROMs self-hosted
  process-images        dind + cli, needs process-docker-cli, parallel:
                        the remaining CI bases (rocky/deb-*) plus the
                        mariadb / postgres / 389ds pull-through caches
  process-freeradius-images
                        dind + cli, needs process-docker-cli, parallel:
                        the freeradius4-{crossbuild,profiling-deps,
                        service} chain per distro

Stages 3 and 4 use fresh dind + cli from this run instead of the
previous cycle's copies. Stages 1 and 2 stay on the raw self-hosted
runner because they're building the very dind/cli they'd otherwise
sit inside.

Also switches all internal-registry logins to docker/login-action@v4
for consistency with the existing Docker Hub login.

4 weeks agodocker-refresh: parallelise jobs and fix dbgsym install terminator
Arran Cudbard-Bell [Thu, 21 May 2026 23:58:49 +0000 (19:58 -0400)] 
docker-refresh: parallelise jobs and fix dbgsym install terminator

Drop the needs: chain in docker-refresh.yml so process-images,
process-docker-cli and process-freeradius-images all start in
parallel. Each job's container and FROM dependencies resolve from
the previous cycle's :latest, so a one-cycle staleness is acceptable.
Rename process-derived-images to process-docker-cli since it builds
exactly one image.

Fix common.deb.dbgsym.m4 to terminate the apt-get install reliably:
move libc6-dbg to the tail as the unconditional last token. On sid
and resolute the libxml2/libidn12/python ifelse blocks all evaluate
to empty, which left the previous-to-last package's trailing
backslash joining the apt-get install command with the next RUN.
Buildkit fed "RUN git clone FlameGraph ..." to apt as a package name
and exited 100. Also corrects the codename test from forky to sid to
match Dockerfile.m4's OS_CODENAME mapping for debiansid.

4 weeks agoMerge profiling-multi-server-fixes into developer/arr2036
Arran Cudbard-Bell [Thu, 21 May 2026 22:46:31 +0000 (18:46 -0400)] 
Merge profiling-multi-server-fixes into developer/arr2036

Pulls in the docker-refresh, profiling-deps split, /etc/freeradius
standardisation, ddebs version-skew tolerance, and matrix display
name work from profiling-multi-server-fixes. Resolves conflicts in
docker.mk and dockerfile.mk by keeping the cleaner per-type list
factoring from developer/arr2036 and extending it with profiling-deps.

Adds display: fields to every docker-refresh.yml matrix entry so the
GH Actions UI shows the actual image identity instead of the entry
dict serialisation, renames the workflow to "Docker refresh", and
labels the FR-image chain job as
freeradius4-{crossbuild,profiling-deps,service}-<os>.

4 weeks agofix multiple connections from dynamic clients
Alan T. DeKok [Thu, 21 May 2026 21:59:46 +0000 (16:59 -0500)] 
fix multiple connections from dynamic clients

this is a bit of a work-around for now.  the better fix is to
instead have a list of pending connections, and add the later
connections to that list.

4 weeks agoadd --profile=file options
Alan T. DeKok [Thu, 21 May 2026 21:39:15 +0000 (16:39 -0500)] 
add --profile=file options

which sets CPUPROFILE=file, so that we can profile the program
we're executing, and not jlibtool itself

4 weeks agoallow for unit_test_module to use profiling, too
Alan T. DeKok [Thu, 21 May 2026 21:28:23 +0000 (16:28 -0500)] 
allow for unit_test_module to use profiling, too

4 weeks agomost things don't need the gperftools header
Alan T. DeKok [Thu, 21 May 2026 21:23:03 +0000 (16:23 -0500)] 
most things don't need the gperftools header

it's only needed if the files call the perftools APIs.  And that's
only radmin and dependency.c

4 weeks agoremove tests which is racy, and causes CI failures.
Alan T. DeKok [Thu, 21 May 2026 17:43:30 +0000 (12:43 -0500)] 
remove tests which is racy, and causes CI failures.

depending on timing, the output is either "2" or "3".  and the
framework isn't smart enough (yet) to double-check that. So we
just remove the test.