BBS:      TELESC.NET.BR
Assunto:  exec/tests/system/findstr.jssrc/sbbs3/findstr.c
De:       Rob Swindell (on Debian Linux)
Data:     Fri, 22 May 2026 18:23:43 -0700
-----------------------------------------------------------
https://gitlab.synchro.net/main/sbbs/-/commit/eee438b0b04b274843abd65b
Added Files:
	exec/tests/system/findstr.js
Modified Files:
	src/sbbs3/findstr.c
Log Message:
findstr: add IPv6 CIDR support for ip.can / .can matching (issue #1145)

The .can filter matching path (findstr.c) was IPv4-only  parse_cidr used
sscanf("%u.%u.%u.%u/%u", ...) and is_cidr_match did a 32-bit XOR-shift, so
an IPv6 CIDR entry like `2001:db8::/32` in ip.can / ip-silent.can was
silently treated as a literal-string pattern and never matched a real
connecting IPv6 client. This made the web server's rate-limit auto-filter
asymmetric: rate_limit_key() correctly bucketizes IPv6 traffic by
RateLimitSubnetPrefix6 and writes the subnet to ip.can, but the
accept-time read-back didn't enforce it.

Add parallel IPv6 functions: parse_ipv6_address (inet_pton), parse_ipv6_cidr,
is_ipv6_cidr_match (byte-then-bit prefix compare). findstr_compare dispatches
to the right family by which one the input parsed as; find2strs_in_list and
find2strs pre-parse both forms up-front into a small internal findstr_ip_t.

Also fix two latent bugs surfaced by the new test cases:

  - is_cidr_match's `>> (32 - subnet)` is undefined behavior when subnet
    is 0 (a 32-bit shift by 32); on x86 it modulo-32s to 0, so /0
    never matched anything except via exact host hit. Now guarded.

  - parse_cidr returned uint32_t with 0 overloaded as both "parse failed"
    and "0.0.0.0", so the literal pattern `0.0.0.0/0` (the canonical
    "match-any IPv4") fell through to string-only matching. Changed to
    bool + out-param, matching the new IPv6 convention.

Add exec/tests/system/findstr.js covering string-pattern features,
IPv4 CIDR (including /0 and boundaries), IPv6 exact + CIDR (/32 through
/128, with bit-boundary stress at /33), reverse-match (!) for both
families, cross-family no-false-match, and malformed-pattern rejection.

Co-Authored-By: Claude Opus 4.7 
n
---
  mSynchronetn  hgVertrauen n hHome of Synchronet n gh[vert/cvs/bbs].synchro.net

-----------------------------------------------------------
[Voltar]