]> git.ipfire.org Git - thirdparty/freeradius-server.git/log
thirdparty/freeradius-server.git
5 weeks agorlm_kafka: unbox async opaques with talloc_get_type_abort
Arran Cudbard-Bell [Wed, 22 Apr 2026 16:38:33 +0000 (12:38 -0400)] 
rlm_kafka: unbox async opaques with talloc_get_type_abort

xctx->inst / xctx->thread / msg->_private are all void pointers that
we know at the call-site should point back at our typed talloc chunks.
Using talloc_get_type_abort turns a subtle type-system hole into a
loud abort at the exact callsite if the opaque ever gets crossed over,
instead of a mystery crash deep in the function body.

The DR callback keeps its NULL-guard first - a NULL opaque is the
documented signal for fire-and-forget produces, so it's part of the
contract, not an error worth asserting on.

5 weeks agorlm_kafka: bridge librdkafka log output into the server log
Arran Cudbard-Bell [Wed, 22 Apr 2026 16:38:03 +0000 (12:38 -0400)] 
rlm_kafka: bridge librdkafka log output into the server log

Register an rd_kafka_conf_set_log_cb on the shared producer conf in
mod_instantiate.  Every per-thread rd_kafka_conf_dup inherits it, so
broker errors, protocol traces, and any categories enabled via the
top-level `debug` knob now feed through the server's ERROR / WARN /
INFO / DEBUG macros with a pre-rendered "rlm_kafka (<instance>)"
prefix instead of going to librdkafka's default stderr sink.

Callback runs on librdkafka's internal threads so no mctx is in
scope; we stash the prefix on rlm_kafka_t at instantiate time and
reach for it via the producer's opaque (rlm_kafka_thread_t) on each
line.

5 weeks agokafka: Basic unreachable test, and cancellation race
Arran Cudbard-Bell [Wed, 22 Apr 2026 16:10:07 +0000 (12:10 -0400)] 
kafka: Basic unreachable test, and cancellation race

5 weeks agokafka: Actually verify the data made it though
Arran Cudbard-Bell [Wed, 22 Apr 2026 15:55:43 +0000 (11:55 -0400)] 
kafka: Actually verify the data made it though

5 weeks agotests/multi-server: put kafka-produce back in the CI short suite
Arran Cudbard-Bell [Wed, 22 Apr 2026 13:31:05 +0000 (09:31 -0400)] 
tests/multi-server: put kafka-produce back in the CI short suite

The client-cache fix in b56deabae7 ("Create different client cache
lists for TCP and UDP") addresses the underlying reason the
kafka-produce test was timing out in CI - the load-generator's own
Status-Server client lookup was failing the same way as
proxy-multihop-accept's.  Rename short.test.yml back to
short.ci.test.yml so it runs under test.multi-server.ci again.

5 weeks agokafka: Minor style fixes.
Arran Cudbard-Bell [Wed, 22 Apr 2026 13:07:55 +0000 (09:07 -0400)] 
kafka: Minor style fixes.

5 weeks agoCreate different client cache lists for TCP and UDP
Arran Cudbard-Bell [Wed, 22 Apr 2026 13:07:02 +0000 (09:07 -0400)] 
Create different client cache lists for TCP and UDP

If we had both TCP and UDP listeners, one would end up getting an empty client list.

5 weeks agotests/multi-server: drop kafka-produce from the CI short suite
Arran Cudbard-Bell [Wed, 22 Apr 2026 04:15:47 +0000 (00:15 -0400)] 
tests/multi-server: drop kafka-produce from the CI short suite

The kafka-produce multi-server test runs green locally against a
docker-compose redpanda, but on the shared GitHub Actions runners the
redpanda container fails to reach a healthy state reliably, even with
Redpanda's own dev-container preset.  Rather than leave a perennially
red CI job, rename short.ci.test.yml to short.test.yml so the test
runs from `make test.multi-server` but not from
`test.multi-server.ci`.  Local runs and future dedicated kafka
infrastructure can still exercise it.

5 weeks agoci: skip kafka module tests; switch multi-server broker to dev-container mode
Arran Cudbard-Bell [Wed, 22 Apr 2026 03:17:27 +0000 (23:17 -0400)] 
ci: skip kafka module tests; switch multi-server broker to dev-container mode

CI rounds 1-2 showed two different redpanda startup failures:

 - In the ci.yml / ci-sanitizers.yml `services:` stanzas, seastar
   exits EINVAL on the self-hosted runners because GitHub Actions
   services give us no way to override the default command line.
   There's no good workaround via `options:` so drop the redpanda
   service container, remove the kafka_test_server passthrough, and
   let the kafka module tests skip cleanly (the existing
   kafka_require_test_server gate already handles the empty-server
   case).  The multi-server kafka-produce test still exercises the
   full produce path end-to-end.

 - The multi-server docker-compose had a hand-rolled list of redpanda
   start flags (`--overprovisioned --smp=1 ... --unsafe-bypass-fsync`)
   which still failed to boot on the shared runner.  Replace it with
   Redpanda's official single-node preset `--mode dev-container`,
   which sets the right seastar probing and IO defaults for a
   containerised CI environment, and keep only the overrides we
   actually need on top (smp/memory/node-id and the advertised
   listener address).

5 weeks agoci: pull redpanda from its own registry and give it a longer health window
Arran Cudbard-Bell [Wed, 22 Apr 2026 02:47:13 +0000 (22:47 -0400)] 
ci: pull redpanda from its own registry and give it a longer health window

Two things tripped up the first CI run on developer/arr2036:

 - The ci.yml and ci-sanitizers.yml workflows pulled redpanda through
   the FreeRADIUS internal docker mirror (docker.internal.networkradius.com),
   but redpandadata/redpanda is not mirrored there, so every job with a
   redpanda service container died at 'Initialize containers'.  Pull
   directly from docker.redpanda.com, matching what the multi-server
   docker-compose already does.

 - The multi-server redpanda service had a 60s start window and 30s of
   retries.  On a busy self-hosted runner that's marginal - we saw
   kafka-produce-short_ci fail the compose-up health gate.  Bump the
   start_period to 120s and extend retries so we allow up to ~4 minutes
   for the broker to come up.

5 weeks agotests/kafka: cover method dispatch forms, keys, binary and edge payloads
Arran Cudbard-Bell [Wed, 22 Apr 2026 02:17:30 +0000 (22:17 -0400)] 
tests/kafka: cover method dispatch forms, keys, binary and edge payloads

Extend the kafka test harness to exercise:

 - method form with explicit name2 (kafka.produce / send / recv .topic)
 - method form with implicit name2 (bare 'kafka' inside a recv section
   that matches a topic named after the packet type)
 - keyed produces (deterministic partitioning by key attr)
 - binary payloads with embedded NULs and high-bit bytes
 - edge-case xlat inputs (empty string, 16 KiB payload, embedded
   control characters, UTF-8 / multibyte)

Topics referenced by the new tests are declared in module.conf so
unknown-topic handling continues to fail at parse time.

5 weeks agorlm_kafka: tighten error handling and xlat register ctx
Arran Cudbard-Bell [Wed, 22 Apr 2026 01:19:29 +0000 (21:19 -0400)] 
rlm_kafka: tighten error handling and xlat register ctx

A grab-bag of cleanups surfaced while refactoring the module:

 - Trust MEM() for talloc-only failures in kafka_topic_thread_handles
   (rb_tree_alloc, rd_kafka_topic_conf_dup).
 - Duplicate topic handle is now an fr_cond_assert_msg - it cannot
   happen if the declared-topic tree was built correctly.
 - Drop the redundant kafka.produce xlat NULL-arg guard; the xlat
   arg parser already enforces required=true.
 - Register the produce xlat against mi->boot rather than mi->data -
   xlat registration happens in bootstrap, before mi->data is
   allocated and mprotected.
 - Move xlat_arg_parser_t below the signal callback so the xlat
   function and its args sit together.
 - Drop the 'rlm_kafka:' prefix from logger calls; the logging layer
   already tags module-originated messages.

5 weeks agorlm_kafka: type value and key as octets
Arran Cudbard-Bell [Wed, 22 Apr 2026 01:17:09 +0000 (21:17 -0400)] 
rlm_kafka: type value and key as octets

Kafka payloads and keys are opaque byte strings on the wire.  Typing
value/key as FR_TYPE_STRING worked accidentally because fr_value_box_t
carries an explicit length, but it invited NUL-termination or UTF-8
assumptions to creep in from intermediate tmpl expansion.

Switch both the per-topic call_env rules and the xlat value argument
to FR_TYPE_OCTETS, and read .vb_octets instead of .vb_strvalue on the
produce paths.  As a bonus, an integer-typed key attribute now
serialises in network byte order - matching what other Kafka clients
do - so the same numeric key hashes to the same partition regardless
of producer.

5 weeks agorlm_kafka: delegate per-topic value/key parsing to call_env framework
Arran Cudbard-Bell [Wed, 22 Apr 2026 01:16:29 +0000 (21:16 -0400)] 
rlm_kafka: delegate per-topic value/key parsing to call_env framework

The topic-subsection callback was walking value and key by hand with
cf_pair_find + call_env_parse_pair + call_env_parsed_add +
call_env_parsed_set_tmpl, reimplementing what call_env_parse() already
does when given a rules array pointed at a CONF_SECTION.

Replace the bespoke walker with a single static topic_env[] array and
a recursive call_env_parse() against the topic's subsection.  The
framework handles pair lookup, tmpl compilation, offset writes, and
required/nullable enforcement.

5 weeks agorlm_kafka: drop wordy type and local names
Arran Cudbard-Bell [Wed, 22 Apr 2026 01:15:43 +0000 (21:15 -0400)] 
rlm_kafka: drop wordy type and local names

Strip the redundant noise from the type names now that the module is
settled:

    kafka_produce_ctx_t     -> rlm_kafka_msg_ctx_t
    rlm_kafka_produce_env_t -> rlm_kafka_env_t
    rlm_kafka_topic_handle_t -> rlm_kafka_topic_t

Plus the topic handle's rd_kafka_topic_t field and the loop locals in
kafka_topic_thread_handles (rkt/h/tc -> kt/topic_t/ktc).  Pure rename,
no behaviour change.

5 weeks agorlm_kafka: own flush_timeout as a module-level setting
Arran Cudbard-Bell [Wed, 22 Apr 2026 01:15:13 +0000 (21:15 -0400)] 
rlm_kafka: own flush_timeout as a module-level setting

flush_timeout controls how long thread_detach waits for in-flight
messages to drain, which is a policy decision that belongs to the
module using the kafka base library rather than to the library
itself.  Move the CONF_PARSER entry into rlm_kafka's module_config
and store the value on rlm_kafka_t.

5 weeks agoAdd NO_OUTPUT plug to conf parser, rename FR_CONF_FUNC to FR_CONF_PAIR_GLOBAL to...
Arran Cudbard-Bell [Wed, 22 Apr 2026 01:12:06 +0000 (21:12 -0400)] 
Add NO_OUTPUT plug to conf parser, rename FR_CONF_FUNC to FR_CONF_PAIR_GLOBAL to match FR_CONF_SUBSECTION_GLOBAL

5 weeks agoSuppress kafka related leaks
Arran Cudbard-Bell [Tue, 21 Apr 2026 23:32:10 +0000 (19:32 -0400)] 
Suppress kafka related leaks

5 weeks agoDon't overwrite the \0 terminator in fr_globdir_get_path
Arran Cudbard-Bell [Tue, 21 Apr 2026 23:31:59 +0000 (19:31 -0400)] 
Don't overwrite the \0 terminator in fr_globdir_get_path

5 weeks agoDon't truncate all the zeros...
Arran Cudbard-Bell [Tue, 21 Apr 2026 23:31:21 +0000 (19:31 -0400)] 
Don't truncate all the zeros...

5 weeks agoAllow CF_IDENT_ANY to work with sections and pairs in CONF_PARSER arrays
Arran Cudbard-Bell [Tue, 21 Apr 2026 23:29:33 +0000 (19:29 -0400)] 
Allow CF_IDENT_ANY to work with sections and pairs in CONF_PARSER arrays

5 weeks agoInitial commit of kafka producer
Arran Cudbard-Bell [Tue, 21 Apr 2026 23:29:01 +0000 (19:29 -0400)] 
Initial commit of kafka producer

5 weeks agorlm_kafka: implement async producer with event-triggered I/O
Arran Cudbard-Bell [Tue, 21 Apr 2026 17:06:32 +0000 (13:06 -0400)] 
rlm_kafka: implement async producer with event-triggered I/O

Replaces the stub with a full async Kafka producer.

* Per-worker rd_kafka_t: each worker thread owns its own producer handle
  so delivery report callbacks always run on the worker that initiated
  the produce. No cross-thread wakeups, no resume races.

* Self-pipe I/O: librdkafka's main queue is wired to a self-pipe via
  rd_kafka_queue_io_event_enable(). The pipe's read end sits in the
  worker's event loop; kafka_fd_readable() drains it then polls the
  producer with a zero-timeout rd_kafka_poll() loop to dispatch DRs
  and broker errors.

* Module surface: kafka.produce method (topic/key/value/headers
  call_env) plus %kafka.produce(topic, value) xlat. Both yield waiting
  for the delivery report and resume with a rcode that distinguishes
  transient failure (fail), permanent rejection (reject), timeout
  (timeout), and success.

* Cancellation: signal handler detaches request from the in-flight
  ctx rather than trying to recall the message (librdkafka has no
  cancel API). dr_msg_cb sees request == NULL and silently frees.
  Safe against dr_msg_cb racing because both fire on the same worker
  thread.

* Shutdown: thread_detach flushes outstanding produces within the
  configured flush_timeout, then drains any queued DRs before tearing
  down the producer. Inflight ctxs whose DRs never arrive are walked
  and their requests nulled out as a belt-and-suspenders.

The module gates off the build system automatically via the existing
src/lib/kafka/all.mk include if librdkafka isn't available.

5 weeks agolib/kafka: expose fr_kafka_conf_t and accessors to modules
Arran Cudbard-Bell [Tue, 21 Apr 2026 17:06:15 +0000 (13:06 -0400)] 
lib/kafka: expose fr_kafka_conf_t and accessors to modules

Promote kafka_conf_from_cs() and kafka_topic_conf_from_cs() from static
inline to extern, and move the fr_kafka_conf_t / fr_kafka_topic_conf_t
typedefs into the public header so modules can parse kafka config
subsections and hand the resulting rd_kafka_conf_t to rd_kafka_new().

Also fixes a sbuff terminator construction bug in kafka_config_dflt()
where FR_SBUFF_TERM() was being applied to a runtime pointer (sizeof
produces pointer size, not string length), and adds subcs_size metadata
to the topic multi-subsection so cf_parse doesn't assert.

5 weeks agodebian: package freeradius-kafka separately
Arran Cudbard-Bell [Tue, 21 Apr 2026 16:59:36 +0000 (12:59 -0400)] 
debian: package freeradius-kafka separately

5 weeks agoremove unused functions
Alan T. DeKok [Wed, 22 Apr 2026 00:47:11 +0000 (20:47 -0400)] 
remove unused functions

5 weeks agoreplace local function with use of standard talloc API
Alan T. DeKok [Wed, 22 Apr 2026 00:47:42 +0000 (20:47 -0400)] 
replace local function with use of standard talloc API

5 weeks agoenable suppress_secrets by default, ala v3
Alan T. DeKok [Mon, 20 Apr 2026 17:56:54 +0000 (13:56 -0400)] 
enable suppress_secrets by default, ala v3

5 weeks agoReport where too small packets are from in radsniff
Nick Porter [Tue, 21 Apr 2026 15:55:20 +0000 (16:55 +0100)] 
Report where too small packets are from in radsniff

5 weeks agoAdd '-S' and overrides
Alan T. DeKok [Mon, 20 Apr 2026 17:36:06 +0000 (13:36 -0400)] 
Add '-S' and overrides

5 weeks agoadd cf_pair_replace_or_add()
Alan T. DeKok [Mon, 20 Apr 2026 17:27:12 +0000 (13:27 -0400)] 
add cf_pair_replace_or_add()

in preparation for '-S foo.bar=baz'

5 weeks agoremove unused code
Alan T. DeKok [Mon, 20 Apr 2026 15:21:28 +0000 (11:21 -0400)] 
remove unused code

5 weeks agoclarify and separate num objects from pool size
Alan T. DeKok [Wed, 15 Apr 2026 13:46:56 +0000 (09:46 -0400)] 
clarify and separate num objects from pool size

so that the calls to talloc_pooled_object() are clearer

6 weeks agoadd stack
Alan T. DeKok [Wed, 15 Apr 2026 13:41:19 +0000 (09:41 -0400)] 
add stack

6 weeks agoJust reconnect for UDP which will start the status checks
Nick Porter [Fri, 17 Apr 2026 13:16:13 +0000 (14:16 +0100)] 
Just reconnect for UDP which will start the status checks

6 weeks agoIf the connection is status_checking then status_check packets are allowed
Nick Porter [Fri, 17 Apr 2026 13:13:38 +0000 (14:13 +0100)] 
If the connection is status_checking then status_check packets are allowed

6 weeks agoCompare correct time values for last reply within allowed window
Nick Porter [Fri, 17 Apr 2026 12:58:58 +0000 (13:58 +0100)] 
Compare correct time values for last reply within allowed window

6 weeks agoIf we're verifying replies, we need the original packet
Nick Porter [Thu, 16 Apr 2026 13:58:04 +0000 (14:58 +0100)] 
If we're verifying replies, we need the original packet

6 weeks agoLoop correctly after parsing octet sequence
Nick Porter [Wed, 15 Apr 2026 17:52:21 +0000 (18:52 +0100)] 
Loop correctly after parsing octet sequence

After `p = end`, p will be pointing to the next character to parse, so
no need to further increment the pointer.

6 weeks agoupdate docs
Alan T. DeKok [Tue, 14 Apr 2026 19:40:21 +0000 (15:40 -0400)] 
update docs

6 weeks agoadd more items and sort in alphabetical order
Alan T. DeKok [Tue, 14 Apr 2026 19:11:13 +0000 (15:11 -0400)] 
add more items and sort in alphabetical order

6 weeks agoDon't parent temporary dir buffer to ef in exfile_open_mkdir (#5823)
Ethan Thompson [Mon, 13 Apr 2026 18:25:29 +0000 (14:25 -0400)] 
Don't parent temporary dir buffer to ef in exfile_open_mkdir (#5823)

The buffer is always freed before the function returns, so parenting
it to ef implied a lifetime relationship that didn't exist.

Signed-off-by: ethan-thompson <ethan.thompson@networkradius.com>
6 weeks agoDisarm rather than delete timers
Nick Porter [Mon, 13 Apr 2026 14:12:06 +0000 (15:12 +0100)] 
Disarm rather than delete timers

To avoid repeated freeing / allocating

6 weeks agoEnsure parent cleanup timer is disarmed following new TCP connection
Nick Porter [Mon, 13 Apr 2026 14:02:29 +0000 (15:02 +0100)] 
Ensure parent cleanup timer is disarmed following new TCP connection

7 weeks agoOnly standard modules register xlats with their own name
Nick Porter [Thu, 9 Apr 2026 13:05:43 +0000 (14:05 +0100)] 
Only standard modules register xlats with their own name

Without this, if a virtual server, for example, has the same name as a
module which registers an xlat in its name, then, during server
shutdown, removing the process module for the virtual server attempts to
unregister the xlat which it doesn't own and leads to a seg fault.

7 weeks agoAdd name to coord_pair
Nick Porter [Thu, 9 Apr 2026 13:27:28 +0000 (14:27 +0100)] 
Add name to coord_pair

So request names can indicate which coordinator they belong to.

7 weeks agoParent coord_pair_reg off the list of registrations
Nick Porter [Thu, 9 Apr 2026 13:55:16 +0000 (14:55 +0100)] 
Parent coord_pair_reg off the list of registrations

As with coord_reg, the entry component of the registration will change
as additional modules register coord_pair, which conflicts with module
instance data protection.

7 weeks agoParent coordinator registrations off the list of registrations
Nick Porter [Wed, 8 Apr 2026 10:55:46 +0000 (11:55 +0100)] 
Parent coordinator registrations off the list of registrations

When more than one module registers a coordinator, the "previous"
registration changes when the new one is added to the list.  If the
registration is parented off the module instance data then that gets
protected - so a seg fault happens when the second registration is
added.  Parenting the registration off the list removes this issue.

7 weeks agoUse fr_dlist_talloc_init to type check entries
Nick Porter [Wed, 8 Apr 2026 10:14:49 +0000 (11:14 +0100)] 
Use fr_dlist_talloc_init to type check entries

7 weeks agoProtect CONF_SECTION with const
Nick Porter [Mon, 6 Apr 2026 16:13:15 +0000 (17:13 +0100)] 
Protect CONF_SECTION with const

7 weeks agoCONF_SECTION is not changed by map_afrom_cs, so use const
Nick Porter [Mon, 6 Apr 2026 16:09:05 +0000 (17:09 +0100)] 
CONF_SECTION is not changed by map_afrom_cs, so use const

7 weeks agomove "run asciidoctor" code
Alan T. DeKok [Tue, 7 Apr 2026 23:36:33 +0000 (19:36 -0400)] 
move "run asciidoctor" code

into block where we have asciidoctor

7 weeks agodocs-v4: Intergrity check on condition.adoc - fix syntax, added truth table, wordsmithing
nolade [Tue, 7 Apr 2026 21:35:49 +0000 (17:35 -0400)] 
docs-v4: Intergrity check on condition.adoc - fix syntax, added truth table, wordsmithing

7 weeks agodocs-v4: Updated copyright message to current year using Alan's perl magic
nolade [Tue, 7 Apr 2026 20:35:21 +0000 (16:35 -0400)] 
docs-v4: Updated copyright message to current year using Alan's perl magic
`perl -p -i -e 's/Copyright \(C\) 2.../Copyright (C) 2026/'  $(git grep -l 'Copyright' $(find doc/antora/ -name "*.adoc" -print))`

7 weeks agoUpdated the link to the InkBridge Networks website
Marc-Andre Casavant [Tue, 7 Apr 2026 18:09:33 +0000 (14:09 -0400)] 
Updated the link to the InkBridge Networks website

7 weeks agoCorrect comment
Nick Porter [Tue, 7 Apr 2026 11:39:38 +0000 (12:39 +0100)] 
Correct comment

7 weeks agoPacify Coverity (CID #1691057)
Nick Porter [Tue, 7 Apr 2026 07:31:59 +0000 (08:31 +0100)] 
Pacify Coverity (CID #1691057)

Xlat args will prevent in_head being NULL, but Coverity doesn't follow
that path.

7 weeks agoPacify Coverity (CID #1691058)
Nick Porter [Tue, 7 Apr 2026 07:25:20 +0000 (08:25 +0100)] 
Pacify Coverity (CID #1691058)

Module configuration requires that we there will be a "find" query.

7 weeks agoPacify Coverity (#CID 1691059)
Nick Porter [Tue, 7 Apr 2026 07:15:14 +0000 (08:15 +0100)] 
Pacify Coverity (#CID 1691059)

The xlat args will ensure that func is populated, but Coverity doesn't
follow that path.

7 weeks agoAllow Message-Authenticator !* 0x00 for "don't send it"
Alan T. DeKok [Tue, 7 Apr 2026 00:47:08 +0000 (20:47 -0400)] 
Allow Message-Authenticator !* 0x00 for "don't send it"

7 weeks agofr_packet_foo -> fr_radius_packet_foo
Alan T. DeKok [Mon, 6 Apr 2026 22:39:47 +0000 (18:39 -0400)] 
fr_packet_foo -> fr_radius_packet_foo

7 weeks agotweak encoder for static analyzer
Alan T. DeKok [Mon, 6 Apr 2026 20:14:08 +0000 (16:14 -0400)] 
tweak encoder for static analyzer

which changes the use of the random numbers, and therefore the
tests have to be updated

7 weeks agoqualify funtion name with "fr_radius"
Alan T. DeKok [Mon, 6 Apr 2026 20:01:43 +0000 (16:01 -0400)] 
qualify funtion name with "fr_radius"

7 weeks agowe don't need this macro, it's only used once
Alan T. DeKok [Mon, 6 Apr 2026 20:00:53 +0000 (16:00 -0400)] 
we don't need this macro, it's only used once

7 weeks agotweak fr_radius_verify() to keep static analyzer happy
Alan T. DeKok [Mon, 6 Apr 2026 19:28:06 +0000 (15:28 -0400)] 
tweak fr_radius_verify() to keep static analyzer happy

7 weeks agoUpdate action for node.js 24
Nick Porter [Mon, 6 Apr 2026 13:30:51 +0000 (14:30 +0100)] 
Update action for node.js 24

7 weeks agoAdd sample config for CRL delta building
Nick Porter [Mon, 6 Apr 2026 12:58:35 +0000 (13:58 +0100)] 
Add sample config for CRL delta building

Currently `openssl crl` won't take a key on the command line, so `make
rsa/delta.crl` will prompt for the password.

7 weeks agoSend CRL-Expire to worker if refresh of expired CRL fails
Nick Porter [Mon, 6 Apr 2026 10:38:38 +0000 (11:38 +0100)] 
Send CRL-Expire to worker if refresh of expired CRL fails

and expired CRLs are not allowed.

7 weeks agoAdd time validity options to CRL virtual server
Nick Porter [Tue, 31 Mar 2026 13:36:38 +0000 (14:36 +0100)] 
Add time validity options to CRL virtual server

7 weeks agoAdd process_crl.so to RHEL packaging
Nick Porter [Fri, 27 Mar 2026 17:51:02 +0000 (17:51 +0000)] 
Add process_crl.so to RHEL packaging

7 weeks agoUpdate docs from raddb
Nick Porter [Fri, 27 Mar 2026 17:39:53 +0000 (17:39 +0000)] 
Update docs from raddb

7 weeks agoAdd url option to rlm_crl
Nick Porter [Fri, 27 Mar 2026 17:29:11 +0000 (17:29 +0000)] 
Add url option to rlm_crl

To allow pre-fetching of CRLs before they are needed for certificate
verification.

7 weeks agoRework CRL test to handle limitations of unit_test_module
Nick Porter [Fri, 27 Mar 2026 16:17:50 +0000 (16:17 +0000)] 
Rework CRL test to handle limitations of unit_test_module

8 weeks agoAdd %crl.refresh() to forcibly trigger refresh
Nick Porter [Fri, 27 Mar 2026 16:17:03 +0000 (16:17 +0000)] 
Add %crl.refresh() to forcibly trigger refresh

8 weeks agoPlumb coordinator framework into unit_test_module
Nick Porter [Fri, 27 Mar 2026 15:58:43 +0000 (15:58 +0000)] 
Plumb coordinator framework into unit_test_module

8 weeks agoAdd fr_schedule_worker_id_set
Nick Porter [Fri, 27 Mar 2026 15:55:44 +0000 (15:55 +0000)] 
Add fr_schedule_worker_id_set

Only to be used from test frameworks such as unit_test_module.

8 weeks agoUpdate rlm_crl tests with updated config
Nick Porter [Fri, 27 Mar 2026 11:43:16 +0000 (11:43 +0000)] 
Update rlm_crl tests with updated config

8 weeks agoUpdate sample rlm_crl configuration
Nick Porter [Fri, 27 Mar 2026 11:34:27 +0000 (11:34 +0000)] 
Update sample rlm_crl configuration

8 weeks agoConvert rlm_crl to use coordinator thread
Nick Porter [Thu, 26 Mar 2026 16:41:39 +0000 (16:41 +0000)] 
Convert rlm_crl to use coordinator thread

8 weeks agoAdd a sample CRL virtual server
Nick Porter [Fri, 27 Mar 2026 11:25:49 +0000 (11:25 +0000)] 
Add a sample CRL virtual server

8 weeks agoAdd CRL process module
Nick Porter [Thu, 26 Mar 2026 12:17:53 +0000 (12:17 +0000)] 
Add CRL process module

For a coordinator thread to run requests to fetch CRLs

8 weeks agoquiet static analyzer
Alan T. DeKok [Sun, 5 Apr 2026 23:51:09 +0000 (19:51 -0400)] 
quiet static analyzer

via using static[256] for fixed-size buffers, among other tweaks

8 weeks agoinputfp may be NULL
Alan T. DeKok [Sun, 5 Apr 2026 23:41:28 +0000 (19:41 -0400)] 
inputfp may be NULL

8 weeks agoallocation may fail
Alan T. DeKok [Sun, 5 Apr 2026 23:41:17 +0000 (19:41 -0400)] 
allocation may fail

8 weeks agotweak checks for digest attributes
Alan T. DeKok [Sun, 5 Apr 2026 18:04:44 +0000 (14:04 -0400)] 
tweak checks for digest attributes

8 weeks agoclean up radmin
Alan T. DeKok [Sun, 5 Apr 2026 15:04:52 +0000 (11:04 -0400)] 
clean up radmin

double check return paths, exit codes, messages, etc.

8 weeks agoWrite "Including files" only in debug2
Alan T. DeKok [Sun, 5 Apr 2026 14:51:32 +0000 (10:51 -0400)] 
Write "Including files" only in debug2

8 weeks agoremove unused code
Alan T. DeKok [Sun, 5 Apr 2026 14:47:43 +0000 (10:47 -0400)] 
remove unused code

we don't use the tmpl rules for anything, so we might as well
remove it.

8 weeks agoadd tests for the dictionary file parser
Alan T. DeKok [Fri, 3 Apr 2026 22:09:47 +0000 (18:09 -0400)] 
add tests for the dictionary file parser

8 weeks agoadd fr_dict_afrom_file()
Alan T. DeKok [Fri, 3 Apr 2026 22:03:49 +0000 (18:03 -0400)] 
add fr_dict_afrom_file()

only for testing.  And add wrapper to unit_test_attribute

8 weeks agouse different UTF-8 text for test data
Alan T. DeKok [Sat, 4 Apr 2026 16:36:24 +0000 (12:36 -0400)] 
use different UTF-8 text for test data

8 weeks agoremove debug / testing output
Alan T. DeKok [Sat, 4 Apr 2026 16:10:36 +0000 (12:10 -0400)] 
remove debug / testing output

8 weeks agoadd assume() macro
Alan T. DeKok [Sat, 4 Apr 2026 15:57:19 +0000 (11:57 -0400)] 
add assume() macro

which is a hint to the compiler that a variable can have a
particular value.  It's not an assertion, but it lets the compiler
know that it can make more optimizations based on the given
assumption.

8 weeks agoadd notes for run-time DNS resolution of client sockets
Alan T. DeKok [Sat, 4 Apr 2026 14:51:06 +0000 (10:51 -0400)] 
add notes for run-time DNS resolution of client sockets

8 weeks agoallow for END PROTOCOL, and END VENDOR too
Alan T. DeKok [Fri, 3 Apr 2026 21:46:34 +0000 (17:46 -0400)] 
allow for END PROTOCOL, and END VENDOR too

which is obvious to use.  Because using "BEGIN PROTOCOL" followed
by "END-PROTOCOL" is just weird.

Previously it would complain with an entirely opaque error.

8 weeks agotweak dict_from_file to be a bit more forgiving
Alan T. DeKok [Fri, 3 Apr 2026 21:35:43 +0000 (17:35 -0400)] 
tweak dict_from_file to be a bit more forgiving

8 weeks agolook up duplicate number if it's _not_ name-only
Alan T. DeKok [Fri, 3 Apr 2026 21:11:19 +0000 (17:11 -0400)] 
look up duplicate number if it's _not_ name-only

8 weeks agodefault to 0 buffer count
Alan T. DeKok [Fri, 3 Apr 2026 22:04:42 +0000 (18:04 -0400)] 
default to 0 buffer count

which is the least surprising.  Otherwise it is not at all obvious
why there is a delay.

and enforce min/max limits on the buffer count/delay, so that they
aren't zero

8 weeks agoUpdate linelog examples and documentation
Alan T. DeKok [Fri, 3 Apr 2026 20:46:18 +0000 (16:46 -0400)] 
Update linelog examples and documentation

8 weeks agoallow radmin to read custom dictionaries, too.
Alan T. DeKok [Fri, 3 Apr 2026 16:59:40 +0000 (12:59 -0400)] 
allow radmin to read custom dictionaries, too.

the server and radclient assume that the RADIUS protocol is loaded
before reading raddb/dictionary.  So radmin should do that, too