]> git.ipfire.org Git - thirdparty/freeradius-server.git/log
thirdparty/freeradius-server.git
10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

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

10 days 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

10 days 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

10 days 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)

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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 (> → >=)

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

10 days 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

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

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

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

10 days 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

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

10 days 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

11 days 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

12 days 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

12 days 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

12 days 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

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

12 days 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"

12 days 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

12 days 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.

12 days 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

12 days 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

12 days 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

12 days 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

12 days 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.

12 days 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

12 days 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.

12 days 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

12 days 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

12 days 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

12 days 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

12 days 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()

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

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

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

13 days 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

13 days 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'

13 days 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

13 days 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

2 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

2 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

2 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

2 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

2 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

2 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.

2 weeks agomulti-server: bump radenv to 1.0.2 developer/arr2036
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.

2 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

2 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.

2 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.

2 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.

2 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.

2 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.

2 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.

2 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.

2 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.

2 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.

2 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.

2 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.

2 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.

2 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.

2 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>.

2 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.

2 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

2 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

2 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

2 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.

2 weeks agoMove more image building into docker-refresh
Arran Cudbard-Bell [Thu, 21 May 2026 20:00:40 +0000 (16:00 -0400)] 
Move more image building into docker-refresh

2 weeks agocommon.deb.dbgsym: tolerate apt-get update flakiness for ddebs sources
Arran Cudbard-Bell [Thu, 21 May 2026 19:01:18 +0000 (15:01 -0400)] 
common.deb.dbgsym: tolerate apt-get update flakiness for ddebs sources

The dbgsym RUN step did `apt-get update && for pkg in ...`. When the
update step fell over - typically because ddebs.ubuntu.com or
debug.mirrors.debian.org returned a 5xx mid-fetch despite the
Acquire::Retries=3 we set in the toolchain template - the && killed
the whole RUN with exit 100 before any of the per-package installs
ran. The per-package loop already prints a WARNING and continues
for any individual package the cache can't resolve, so letting the
update itself fail soft means partial cache + best-effort installs
still happen rather than tipping the whole image build over.

Concretely: docker.profiling.ubuntu24 stopped building on the
docker-server workflow each time ddebs hiccupped, even though every
dbgsym package is technically optional and FR ships fine without
them.