-
-
Notifications
You must be signed in to change notification settings - Fork 465
Expand file tree
/
Copy pathChangeLog
More file actions
7269 lines (7111 loc) · 353 KB
/
ChangeLog
File metadata and controls
7269 lines (7111 loc) · 353 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
4.0.1: 05 Apr 2026
** Features **
* [Feature] Add settings merge infrastructure with layered collect-then-merge flow
* [Feature] Add weak dependencies and disabled status to symcache
* [Feature] Add force-enable override for settings conflicts
* [Feature] Add dynamic block API to fuzzy storage worker
* [Feature] Allow custom response codes for fuzzy dynamic blocks
* [Feature] Expose ratelimit_whitelist check to Lua via worker method
** Bug fixes **
* [Fix] Keep original fd in proxy session after milter dup (fd leak since 4.0.0)
* [Fix] Use task_timeout instead of upstream timeout for proxy self-scan
* [Fix] Use LPeg grammar for AAR header parsing (#5963)
* [Fix] Use ev_now() instead of rspamd_get_ticks() for dynamic ban expiry
* [Fix] Enable deps in pre/postfilters and fix settings flow
* [Fix] Create rdeps for same-stage non-filter dependencies
* [Fix] Add missing #include <memory> in redis_backend.cxx
4.0.0: 30 Mar 2026
** Incompatible changes **
* [Rework] Replace Jump Hash with Ring Hash (Ketama) for consistent upstream hashing;
per-user Bayes with Redis sharding requires migration via rspamadm statistics_dump migrate
* [Feature] Include content URLs by default in URL API calls (include_content_urls = true);
set include_content_urls = false in local.d/options.inc to restore old behavior
* [Feature] Auto-detect SSL from bind sockets, remove ssl = true worker option
* [Feature] Replace libfasttext with built-in mmap-based shim; ENABLE_FASTTEXT cmake option removed
* [Feature] Replace builtin_suspicious TLDs with map-based configuration (conf/maps.d/suspicious_tlds.inc)
* [Feature] Rename neural autolearn options to match RBL module naming
* [Feature] proxy: Enable token bucket load balancing by default
* [Conf] Disable Validity SenderScore RBLs by default (requires MyValidity account)
* [Fix] Make unknown and broken DKIM keys behaviour conforming to RFC
** Major features **
* [Feature] Add /checkv3 multipart scan endpoint with per-part zstd compression
* [Feature] protocol: Zero-copy piecewise writev for v3 multipart responses
* [Feature] protocol: Add v3 multipart response parsing for proxy and body decompression
* [Feature] rspamc: Add --msgpack flag for v3 protocol
* [Feature] Pluggable async hyperscan cache backend with Redis storage support
* [Feature] Route all hyperscan cache operations through Lua backend
* [Feature] Use async hyperscan compilation for language detection stop words
* [Feature] Compile small hyperscan databases in memory without file caching
* [Feature] Add multi-flag fuzzy hash support with Lua-based Redis update path (epoch 12)
* [Feature] Add dual-mode HTML fuzzy: template matching + phishing detection (FUZZY_HTML_PHISHING)
* [Feature] Add shard migration and multi-class support to statistics_dump
* [Feature] Implement HTTPS server support for workers
* [Feature] proxy: Implement token bucket load balancing for upstreams
* [Feature] Expose milter headers and extended symbols in legacy RSPAMC/SPAMC protocol
* [Feature] Add native UUID v7 per task with Lua binding
* [Feature] Add UUID v7 column support to ClickHouse plugin
* [Feature] Sync UUID v7 random portion with Log-Tag header
* [Feature] Add structured formatter to metadata_exporter with zstd compression
* [Feature] arc: Add trusted_authserv_id option for reuse_auth_results
* [Feature] Add external pretrained neural model support
* [Feature] Fasttext embed: multi-model, mean+max pooling, SIF word weighting
* [Feature] Multi-layer funnel architecture for LLM embeddings
* [Feature] Add language-based model/URL selection for LLM embeddings
* [Feature] Add expression-based autolearn for neural LLM providers
* [Feature] Add rspamadm autolearnstats subcommand
* [Feature] Rewrite rspamd_stats.pl and mapstats.pl as rspamadm Lua subcommands
* [Feature] headers_checks: Add Reply-To address validity checks
* [Feature] Store matched fuzzy hashes in Redis history
* [Feature] Add HTTP content negotiation framework with zstd compression for /stat
* [Feature] Extend /stat and /bayes/classifiers endpoints with classifier metadata
* [Feature] WebUI: Add multi-class classifier support to learning UI
* [Feature] Split attachment filenames into sub-tokens for Bayes classifier
* [Feature] Make GPT consensus thresholds configurable with context_augment hook
* [Feature] Add follow_master option for proxy mirror connections
* [Feature] Per-class deterministic regexp IDs in re_cache
* [Feature] Add GELU activation and expose dropout in KANN bindings
* [Feature] Add ignore_link_domains option for HTML fuzzy rules
* [Feature] fuzzy_storage: Enhance blacklist handler with richer context
* [Feature] WebUI: Add fuzzy hash copy and delist buttons
* [Feature] Add worker:get_mem_config() Lua method for jemalloc stats
* [Feature] Add missing Jinja2 filters and tests to Lupa template engine
** Bug fixes **
* [CritFix] Stop ev_io watcher in fuzzy UDP session destroy
* [Fix] Fix CPU busy-loop in fuzzy TCP client due to EV_WRITE not being cleared
* [Fix] Clear inherited address family flags when creating new SPF addr nodes
* [Fix] Weighted round-robin not respecting upstream weights across cycles
* [Fix] bypass RHEL/CentOS 10+ crypto-policies for SHA-1 DKIM verification
* [Fix] Fix EVP_PKEY_CTX memory leak in DKIM RSA signing
* [Fix] ratelimit: Fix compatibility with old records
* [Fix] Prevent SIGSEGV when sign_headers is not a string
* [Fix] lua_magic: Avoid misdetecting HTML with embedded SVG as SVG
* [Fix] Exclude injected parts from SA body/rawbody regexp scanning
* [Fix] Handle OpenAI-compatible response format in Ollama GPT module
* [Fix] Add text attachment fallback in get_displayed_text_part
* [Fix] Self-healing hyperscan cache: delete stale blobs and trigger recompile
* [Fix] Move binary data from KEYS to ARGV in fuzzy, neural, and Bayes Redis scripts
* [Fix] Prevent LuaJIT GC stalls after neural training
* [Fix] Backward-compatible version negotiation for multi-flag fuzzy
* [Fix] Defeat PDF object padding evasion in extract_outer_objects
* [Fix] Store small PDF objects without counting toward limit
* [Fix] Add ASCII85 decode support for PDF text extraction
* [Fix] PDF ligature substitution fix in text handler
* [Fix] Correct CSS duplicate property handling to use last declaration
* [Fix] Fix JSON emission for implicit arrays in libucl
* [Fix] Fasttext shim: fix quantized model support and hierarchical softmax
* [Fix] Fasttext shim: fix binary format parsing and harden against corrupt models
* [Fix] Rework alternative parts detection
* [Fix] R_PARTS_DIFFER: handle multipart/related, empty parts, and parts without words
* [Fix] Fix subprocess cleanup race in spawn_process SIGCHLD handler
* [Fix] Add PCRE2 complexity checks before JIT compilation
* [Fix] Remove unsupported Delta codec from ClickHouse UUID column
* [Fix] Clear pending multipatterns and regexp maps on config reload to prevent use-after-free
* [Fix] re_cache: Always use charset-converted content for SARAWBODY matching
* [Fix] re_cache: Respect disable_hyperscan option in loading functions
* [Fix] re_cache: Fix stale hyperscan ID handling during config reload
* [Fix] Defer settings application for symbols registered after settings init
* [Fix] Default map URL path to "/" when no path component is present
* [Fix] Skip HELO IP address literals for SPF domain resolution
* [Fix] Preserve content flags for injected query URLs
* [Fix] Preserve duplicate URLs across MIME parts
* [Fix] Refactor control socket to use ID-based request/reply matching
* [Fix] Reduce control message size to prevent sendmsg crash
* [Fix] Fix proxy mirror SSL/keepalive config parsing
* [Fix] Use OpenMetrics base name for counter TYPE declarations
* [Fix] Silence zlib preset dictionary inflate errors
* [Fix] Skip empty In-Reply-To header in replies check
** Minor changes **
* [Minor] Tune jemalloc for single-threaded multi-process architecture
* [Minor] Backport ucl_object_iterate_end() from libucl to fix iterator leak
* [Conf] Add Redis backend example and configuration support for hs_helper worker
* [WebUI] Add frequency stddev column and units to symbols table
* [WebUI] Deduplicate fuzzy hashes in multipart messages
3.14.3: 08 Jan 2026
* [Feature] Add task registry for safe Lua task reference validation
* [Feature] Add text quality analysis for PDF garbage filtering
* [Feature] Implement basic PDF text extraction with UTF-16 detection
* [Feature] Add extra tables API for clickhouse plugin
* [Feature] Add confighelp documentation for RBL module
* [Feature] WebUI: add backend API interaction error log
* [Fix] Neural: by default include symbols with no flags
* [Fix] Symcache: make FINE propagation deterministic
* [Fix] URL: Prevent false positives from numeric IP regeneration in mailto URLs
* [Fix] Settings: Allow spaces in selector regexps
* [Fix] Prevent use-after-free in Redis callbacks after session cleanup
* [Fix] Lua 5.4 compatibility in clickhouse and elastic plugins
* [Fix] Use exact map lookup for DKIM key_table instead of glob
* [Fix] Handle connection errors with io_uring backend in HTTP client
* [Minor] Update public suffix list
3.14.2: 10 Dec 2025
* [Feature] DMARC: Add --recheck-rua option to dmarc_report for RUA filtering at send time
* [Feature] Metadata exporter: Add multipart and msgpack formatters
* [Feature] Milter headers: Add remove_ar_from option for selective Authentication-Results header removal
* [Fix] Security: Backport security fixes from libucl 0.9.3
* [Fix] HTTP: Handle early server responses during request write
* [Fix] HTTP: Only apply early response handling for HTTP clients
* [Fix] MIME: Prevent splitting UTF-8 sequences in header encoding
* [Fix] URL: Normalize URLs with multiple slashes between host and path
* [Fix] URL: Use locale-independent patterns in URL encoding
* [Fix] Milter headers: Allow default_headers_order to be configured
* [Fix] Milter headers: Fix hierarchical domain matching in remove_ar_from map lookups
* [Fix] Aliases: Enable plugin by default to restore plus-addressing
* [Fix] DCC: Handle nil opts in plugin initialization
* [Fix] Neural: Fix Lua 5.4 compatibility issues
* [Fix] Reputation: Fix whitelist schema and selector-aware checking
* [Fix] Logging: Fix off-by-one when at the maximum tag length
* [Fix] Logging: Null-terminate the log tag when copying the header
* [Fix] Prometheus: Use double type for rspamd_scan_time_average metric
* [Fix] Build: FreeBSD 15 inotify build compatibility
* [Fix] Build: Remove deprecated OpenSSL engine.h include
* [Fix] Lua: Use 0 instead of LUA_OK for lua_pcall result comparison (Lua 5.1 compat)
* [Fix] Lua: Handle Lua 5.4 require returning two values
* [Fix] Lua: Use math.floor for Lua 5.4 integer division compatibility
* [Fix] Lua: Improve loadstring error handling for Lua 5.4 compatibility
* [Fix] Lua: Use userdata __gc for UCL objects in all Lua versions
* [Fix] Lua: Use ipairs for ordered iteration in header checks
* [Fix] Lua: Fix other places of Lua 5.4 rounding issues
* [Fix] Performance: Avoid repeated simdutf implementation detection on each call
* [Minor] Update public suffix list
* [Minor] Debian: Allow skipping ASAN build
* [Test] Add Lua 5.4 and cffi-lua support for testing
* [Test] Fix Python 3.12+ compatibility in test scripts
* [Test] Fix TCP tests for HTTP/1.1 compliance
3.14.1: 1 Dec 2025
* [Feature] Composites: Add inverted index for fast composite rule evaluation
* [Feature] Composites: Add bloom filter for fast negative symbol lookups
* [Feature] Composites: Add statistics tracking and control protocol command
* [Feature] Composites: Precompute atom types at config time
* [Feature] Multimap: Add combinator option for selector rules
* [Feature] SPF: Add rspamadm spf_flatten tool with macro preservation
* [Feature] URL: Add deep processing architecture with C-to-Lua filter consultation
* [Feature] URL: Add obfuscated URL detection to url_suspect plugin
* [Feature] URL: Add rspamd_util.decode_html_entities for HTML entity decoding
* [Feature] lua_shape: Add new validation library as tableshape replacement
* [Feature] lua_shape: Add T.callable() type for function validation
* [Feature] lua_shape: Add callable defaults support
* [Feature] Whitelist: Auto-mark symbols with SYMBOL_TYPE_FINE flag
* [Fix] url_suspect: Fix plugin causing massive false positives
* [Fix] url_suspect: Optimize for high URL volume messages
* [Fix] Network: Prevent infinite loop in split_networks_into_chunks()
* [Fix] Memory: Fix leak in custom tokenizer result handling
* [Fix] Composites: Fix group matchers handling in inverted index
* [Fix] Composites: Improve atom polarity detection in inverted index
* [Fix] Composites: Copy expression string to memory pool for Lua composites
* [Fix] lua_shape: Fix transform logic and tableshape compatibility
* [Fix] lua_shape: Fix registry to recursively resolve nested schemas
* [Fix] lua_shape: Improve error safety
* [Fix] Settings: Keep groups_*/symbols_* fields for runtime processing
* [Fix] URL: Encode redirect URLs to handle unencoded spaces and special characters
* [Fix] external_relay: Fix mixins and confighelp
* [Fix] RBL: Fix plugin transform schemas
* [WebUI] Update D3 libs with bug fixes and validation
* [WebUI] Restore hover colors for symbols
* [WebUI] Fix hover behavior outside status tables
* [Minor] Whitelist: Use contemporary API for maps
* [Minor] Migrate all plugins and libraries from tableshape to lua_shape
* [Minor] Simplify configuration by removing use_*_map flags
* [Minor] Add plugins registry with reworked mixins
* [Test] Add comprehensive tests for URL deep processing
* [Test] Isolate url_suspect tests with symbols_enabled
3.14.0: 10 Nov 2025
* [Feature] Fuzzy check: Add HTML fuzzy hashing for structural similarity matching
* [Feature] Fuzzy check: Add per-rule text_hashes toggle for HTML-only fuzzy rules
* [Feature] Fuzzy check: Add structured checks configuration with backward compatibility
* [Feature] Fuzzy storage: Implement full TCP protocol support with auto-switch
* [Feature] Fuzzy check: Add TCP connection management and error handling
* [Feature] URL: Add task:get_cta_urls() API for proper CTA domain extraction
* [Feature] URL: Move CTA processing into dedicated module
* [Feature] URL: Add url:get_hash() method for efficient deduplication without string conversion
* [Feature] GPT: Add web search context support with Redis caching
* [Feature] HTML: Add infrastructure for async URL rewriting with Lua bindings
* [Feature] HTML: Add task:rewrite_html_urls() and task:get_html_urls() Lua API
* [Feature] WebUI: Implement dark mode with theme toggle and auto detection
* [Feature] Aliases: Add advanced resolution with loop detection for converging paths
* [Feature] Milter: Add ESMTP argument parsing with Lua API access
* [Feature] Milter: Add per-recipient ESMTP args parsing and metadata access
* [Feature] Milter: Support array of positions for remove_headers operations
* [Feature] Proxy: Add client IP preservation in message headers through chain
* [Feature] Rspamc: Add milter.add_headers object format support to --mime
* [Feature] Configwizard: Add Postfix integration wizard using postconf utility
* [Feature] Build: Add comprehensive BSD workflows (FreeBSD, NetBSD, OpenBSD) with Lua version selection
* [Feature] Build: Add automated code review GitHub Actions workflow with Rspamd-specific guidelines
* [Feature] Build: Add Docker-based integration test suite with ASAN and real corpus
* [Feature] Build: Add automatic public suffix list synchronization
* [Feature] Multimap: Add support for symbols with leading numerals
* [Feature] DMARC: Add Auto-Reply-To and Precedence headers to prevent out-of-office replies
* [Feature] Platform: Add NetBSD memory usage tracking support
* [Feature] Utilities: Add fuzzy Redis migration utility
* [Feature] Bayes: Allow skipping local/authenticated mail in autolearn condition
* [Feature] ARC: Add DKIM signing key API for flexible ARC signing
* [Feature] Logger: Add type specifiers support for better formatting
* [Feature] Heap: Add rspamd_heap_push_slot to eliminate double allocation
* [Fix] DNS: Preserve req->pos during reply validation to prevent packet truncation on UDP-to-TCP retransmits
* [Fix] DNS: Regenerate transaction ID before copying to TCP buffer to avoid collisions
* [Fix] DNS: Fix nameserver round-robin when using /etc/resolv.conf
* [Fix] DNS: Fix TCP uninitialized memory leak
* [Fix] DMARC: Add batching and forced GC for Redis connections to prevent pool exhaustion
* [Fix] DMARC: Validate and normalize batch_size to prevent fractional indexing and loop errors
* [Fix] DMARC: Refactor reporting to use helper functions and async maps
* [Fix] Allocator: Fix jemalloc/system malloc mixing in getline() to prevent crashes
* [Fix] Allocator: Fix allocator mismatches in hiredis
* [Fix] Allocator: Fix allocator mismatches in libucl
* [Fix] Hyperscan: Use runtime version instead of compile-time for database validation
* [Fix] Hyperscan: Auto-recreate invalid unserialized cache files on version mismatch
* [Fix] Memory: Fix leaks in fuzzy storage khash tables
* [Fix] Memory: Fix leaks in upstream address parsing
* [Fix] Memory: Fix leaks in *-any address parsing
* [Fix] Memory: Fix OpenSSL providers cleanup
* [Fix] Memory: Fix UCL object memory leak in Lua integration
* [Fix] Memory: Fix stat metadata tokenization leak
* [Fix] Fuzzy TCP: Fix double-release in fuzzy_tcp_session
* [Fix] Fuzzy TCP: Fix refcount leak in destructor
* [Fix] Fuzzy TCP: Fix timeout handling and buffer overflow
* [Fix] Fuzzy TCP: Fix endianness mismatch in framing protocol
* [Fix] Fuzzy TCP: Fix race conditions and fd reuse bugs
* [Fix] Fuzzy TCP: Use pure ev_timer for session timeouts
* [Fix] Fuzzy TCP: Fix server replies and client event handling
* [Fix] Shutdown: Keep srv events active during shutdown to track auxiliary processes
* [Fix] ARC: Restore strict header ordering to comply with RFC 8617
* [Fix] ARC: Add ed25519 key support
* [Fix] Composites: Implement two-phase evaluation for postfilter dependencies
* [Fix] Composites: Use null-terminated string for symbol lookup
* [Fix] URL: Refactor extraction to prevent DoS with hash-based deduplication
* [Fix] URL: Add 50k URL limit with warning for DoS protection
* [Fix] URL: Skip HTML_DISPLAYED URLs in CTA detection
* [Fix] URL: Fix CTA priority preservation in extract_specific_urls
* [Fix] Bayes: Improve Redis server discovery
* [Fix] Bayes: Only bypass learn when header value matches
* [Fix] ESMTP: Robust per-recipient parsing in milter with safe cursor advance
* [Fix] ESMTP: Refcount ESMTP args in proxy_session_refresh to avoid use-after-free
* [Fix] ESMTP: Correct Lua stack cleanup in lua_task_get_rcpt_esmtp_args
* [Fix] HTML: Correct attribute value offset calculation for URL rewriting
* [Fix] HTML: Add HTML entity encoding for URL rewriting
* [Fix] HTML: Fix segfault due to incorrect HTML features access
* [Fix] HTML: Fix frequency-based ordering in domain hashing
* [Fix] HTML: Fix shingles hash generation bugs
* [Fix] HTML: Fix memory leaks in shingles generation
* [Fix] HTML: Fix memory management in html_cta.process_html_links
* [Fix] HTML: Fix CSS class normalization in fuzzy tokens
* [Fix] HTML: Fix cache key collision between text and HTML fuzzy hashes
* [Fix] OpenBSD: Fix kinfo_proc structure member names
* [Fix] OpenBSD: Disable Hyperscan (not available)
* [Fix] FreeBSD: Fix zstd package name
* [Fix] FreeBSD: Add IGNORE_OSVERSION for package version mismatches
* [Fix] NetBSD: Setup pkgin and PKG_PATH before installing packages
* [Fix] NetBSD: Fix missing dependencies and package names
* [Fix] BSD: Remove -j flag from ninja in all BSD workflows
* [Fix] Multimap: Handle symbols with leading numerals
* [Fix] Aliases: Prevent creation of malformed email addresses
* [Fix] Aliases: Fix alias loop detection for converging paths
* [Fix] Aliases: Fix is_local_domain to support backend objects
* [Fix] Aliases: Correct to_local when no recipients present
* [Fix] Aliases: Fix set_addr validation to prevent malformed addresses
* [Fix] MIME: Remove Authentication-Results and anonymize envelope-from in Received headers
* [Fix] Mempool: Prevent double-free in destructor cleanup
* [Fix] Rspamadm: Unbreak dnstool command
* [Fix] Integration tests: Fix ASAN configuration and startup diagnostics
* [Minor] Replace GHashTable with khash in fuzzy_check.c and lua_textpart_get_cta_urls
* [Minor] Update cache key prefix to match module name in llm_search_context
* [Minor] Fix llm_search_context to follow Rspamd idioms
* [Minor] Refactor llm_search_context to use lua_cache module
* [Minor] Address review comments in various modules
* [Minor] Fix droid usage
* [Minor] Use GPT-5 Codex for code reviews
* [Minor] Update libucl with automatic stack management
* [Rework] Prioritize CTA URLs in redirector and Lua helpers
* [Rework] RBL configuration: Add new from selectors, content_urls checks, and lower_utf8 for hashed domains
* [Rework] Make Bayes learn guards configurable
* [Rework] Refactor element visibility control to use Bootstrap classes
* [Rework] Use postconf utility for Postfix configuration in configwizard
* [Rework] Remove Lua-level HTTP header parsing in ESMTP args getters
* [Rework] Add CFG_REF_* macros with debug logging for config refcounting
* [Rework] Move OpenSSL providers from global to libs_ctx
* [Rework] Convert heap to fully intrusive kvec-based implementation
* [Rework] Add specialized pool types for long-lived and short-lived allocations
* [Rework] Improve memory pool destructors with smart preallocation based on pool type
* [Project] Restrict code review workflow to authorized maintainers
* [Project] Add Claude Code and Cursor AI assistant configuration
* [WebUI] Replace Glyphicons with FontAwesome SVG icons
* [WebUI] Update CodeJar to version 4.3.0
* [WebUI] Update Node.js and ESLint
* [WebUI] Update D3-based visualization libs
* [WebUI] Replace deprecated alert-error class with alert-danger
* [WebUI] Add search syntax hint to history table filter input
* [WebUI] Fix theme toggle default to auto
* [WebUI] Keep classifiers list when request is skipped
* [WebUI] Repopulate classifier dropdown
* [WebUI] Add comment for removeEventListener
* [WebUI] Fix icon rendering race condition in tab initialization
* [Test] Add comprehensive Lua unit tests for HTML URL rewriting
* [Test] Add unit tests for HTML URL rewriting patch engine
* [Test] Add functional tests for HTML fuzzy hashing
* [Test] Add ARC chain verification tests with multiple signatures
* [Test] Add e2e for classifier dropdown population
* [Test] Multimap symbol with leading numerals
* [Test] Sync public suffix list automatically
* [Test] Update JS linters
* [Test] Fix integration test environment variable passing
* [Test] Add detailed error output for integration test failures
3.13.2: 5 Oct 2025
* [Feature] Fuzzy check: Add separate encryption keys for read and write operations
* [Feature] DKIM: Add ED25519 support for DKIM signing and verification with OpenSSL version checks
* [Feature] Vault: Add HashiCorp Vault KV version 2 support for DKIM key management
* [Feature] MetaDefender: Add MetaDefender Cloud Lua module for SHA256 hash lookups
* [Feature] LLM: Add user/domain context support for LLM-based classification with Redis-based conversation context
* [Feature] DMARC: Add RUA address exclusion configuration option
* [Fix] DKIM: Fix relaxed bodyhash calculation for lines with only spaces to comply with RFC 6376
* [Fix] DKIM: Fix ED25519 key loading to prevent memory corruption in union handling
* [Fix] HTTP maps: Enforce server-controlled refresh intervals and prevent aggressive polling
* [Fix] HTTP maps: Prevent time_t overflow in expires header processing
* [Fix] Once received plugin: Fix duplicate symbol addition by changing break to return
* [Fix] Redis: Propagate unused Sentinel options properly
* [Fix] Fuzzy check: Fix reply decryption when using separate read/write keys
* [Fix] Fuzzy check: Add fallback when only one specific encryption key is set
* [Fix] Fuzzy check: Fix duplicate key filtering in reply decryption
* [Fix] Fuzzy ping: Allow read/write servers configuration
* [Minor] Fuzzy check: Refactor encryption key selection into helper functions
* [Minor] Fuzzy check: Stop early when found a correct key
* [Minor] Add cursor rules for development
3.13.1: 30 Sep 2025
* [Feature] Archive module: Full support for encrypted ZIP archives with ZipCrypto and AES encryption
* [Feature] Archive module: Both reading and writing of AES-encrypted ZIP archives is supported
* [Feature] Archive module: Updated Lua bindings for libarchive
* [Feature] Encrypted maps: Support for encrypted maps to enable new distribution scenarios
* [Feature] Redis TLS: Configurable TLS connections in Redis backend
* [Feature] Map helpers alignment: Enforce 64-byte alignment to prevent unaligned memory access
* [Feature] Enhanced CLI for secretbox with additional security test coverage
* [Fix] MIME encoding: Major overhauls and multiple fixes for MIME encoding logic
* [Fix] MIME encoding: Improved handling and decoding of UTF-8 in MIME headers
* [Fix] Learning system: Numerous fixes to learn checks and autolearn flag handling
* [Fix] Learning system: Prevention of duplicate message learning
* [Fix] Learning system: Extended multiclass learning test coverage
* [Fix] Critical: Fixed bug when converting zero-length strings to numbers
* [Fix] Critical: Fixed XML prolog detection in lua_magic module
* [Fix] Build: Fixed build issues on 32-bit platforms
* [Fix] Compatibility: Improved compatibility with Lua versions above 5.1
* [Fix] Empty input: Addressed issues with empty input handling in lua_magic
* [Fix] Testing: Improved stability of automated testing with multiple test fixes
* [Fix] Minor compatibility improvements (buffer allocation, missing cmath include)
3.13.0: 17 Sep 2025
* [Conf] Add defaults
* [Conf] Fix JB IDE damage
* [Feature] Add a signal from main to workers for workers ready state
* [Feature] Add lua_util.fold_header_with_encoding
* [Feature] Add some convenience options to rspamc
* [Feature] Add some more OS utility functions
* [Feature] Add symbols proxy for piecewise changes
* [Feature] Allow lua callback maps to be filled line by line
* [Feature] Allow selectors in regexp maps expressions
* [Feature] Allow to pass expression flags in the regexp plugin
* [Feature] Detect part types in mime parser
* [Feature] Resolve DNS nameservers names using getaddrinfo
* [Fix] Bayes: Try to be bug-to-bug compatible
* [Fix] Check skip_hashes for the returned hashes
* [Fix] Fix DL lists initialisations
* [Fix] Fix double free in the client...
* [Fix] Fix end-to-end proxy compression
* [Fix] Fix l= calculations again
* [Fix] Fix lua state setting ambiguity
* [Fix] Fix order of descriptor closing
* [Fix] Fix probabilities overflow
* [Fix] Fix rules setup
* [Fix] Fix statfiles ordering
* [Fix] Fix various corner cases and tests
* [Fix] Fix whitelist options in the arc module
* [Fix] GPT: Fix occasional damage
* [Fix] GPT: fix processing of messages with no subject
* [Fix] Prevent WebUI crash with empty RRD
* [Fix] Store html attributes that are empty
* [Fix] Try to fix learned order
* [Fix] Use C++20 standard consistently to resolve ODR violations
* [Fix] Use a more straightforward approach for learn cache
* [Fix] fix error check in lua_dkim_tools.lua
* [Project] Add CTA analytics engine
* [Project] Add ability to create custom tokenizers for languages
* [Project] Add controller learn endpoints
* [Project] Add support of granular timeouts to plugins and maps
* [Project] Add tests and fix stuff
* [Project] Add tests for LLM provider, fix various issues with metatokens
* [Project] Apply changes to bayes_expiry plugin
* [Project] Create an isolated API for external tokenizers
* [Project] Extract more features from HTML messages
* [Project] Fix Lua API and some constexpr compatibility
* [Project] Fix binary classification and lua scripts
* [Project] Fix more calculation issues
* [Project] Fix other classification and learning issues
* [Project] Fix scoped compilation again
* [Project] Fix symbols finalisation
* [Project] Fix unlearn stuff
* [Project] Fix various issues
* [Project] Fix various other issues
* [Project] Further updates
* [Project] Implement backoff for upstreams revival
* [Project] Implement more flexible http timeouts
* [Project] Implement scoped compilation
* [Project] Implement scoped regexp cache system
* [Project] Multi-class classification project baseline
* [Project] Rework rspamc to allow training of different neural types
* [Project] Rework system of html tags to allow more tag types
* [Project] Rework tokenizers initialisation
* [Project] Some rework of the CTA defaults
* [Project] Start implementation of the rules maps
* [Project] Start to implement better revive strategy for upstreams
* [Project] Store regexp rules state to avoid incomplete/orphaned rules
* [Project] Support more common html attributes
* [Project] Take button weight into consideration
* [Project] Use re_cache scopes for maps
* [Rework] Fix logger format string mismatch
* [Rework] MIME detection via Lua Magic; enforce cfg in Lua task API
* [Rework] Return back N-ary optimizations for arithmetic-alike expressions
* [Rework] Use GLib agnostic type for words
* [Rework]Refactor MIME detection via Lua Magic; enforce cfg in Lua task API
* [Rules] Make bitcoin expression to use explicit flags
3.12.1: 17 Jun 2025
* [Feature] Add /bayes/classifiers HTTP endpoint
* [Feature] Further improvements in scheduling next checks
* [Fix] Another fix for maps concurrent load
* [Fix] Do not add log tag header in milter logic
* [Fix] Do not explicitly add Connection header if it's there
* [Fix] Fix proxy headers duplication
* [Fix] Fix several issues with the lua_logger
* [Fix] Make logger more graceful when dealing with format arguments
* [Fix] Try to avoid incomplete writes
* [Rework] Eliminate maps locking
3.12.0: 09 Jun 2025
* [CritFix] In lua-ucl disable macros and file variables by default
* [Feature] Add keep-alive support
* [Feature] Add some convenience methods
* [Feature] Add support for separate read and write servers in fuzzy check
* [Feature] Allow CDB files as external maps
* [Feature] Allow to specify Redis version
* [Feature] Allow to specify extra headers in Rspamd proxy
* [Feature] Allow to specify log tag in proxy
* [Feature] Allow to specify max log tag length for all log messages
* [Feature] Allow to use HTTPS when connection to backends in proxy
* [Feature] Output content for all maps
* [Feature] Plugin to integrate with Contextal platform
* [Feature] Show all maps status
* [Fix] Add fail check for cfg transform for some corner cases
* [Fix] Add header with reason everytime (not only for ham) and use correct value for header
* [Fix] Add null check for master_conn->up in proxy backend error handler
* [Fix] Allow 'Hash' in Access-Control-Allow-Headers
* [Fix] Arc: Use tonumber when comparing
* [Fix] As we have replxx library, always use it
* [Fix] Backport some issues from libucl
* [Fix] Filter invalid domains in fuzzy extra data
* [Fix] Fix maps ids
* [Fix] Fix race condition in maps loading by unlocking backend on switch
* [Fix] Fix static maps description passing
* [Fix] Fix variable propagation (no functional change)
* [Fix] Fix various issues
* [Fix] Greylist: Improve body hash calculations
* [Fix] Known senders: More recipients test logic
* [Fix] Known senders: Use the same logic as in the replies module
* [Fix] Prevent crashes when accessing upstream address in self-scan mode
* [Fix] Really fix local objects filtering, sigh...
* [Fix] Update default URL for openphish
* [Fix] Use bundled libfmt everywhere
* [Fix] Use safe parsers everywhere except configuration
* [Fix] correct logic error in milter_headers.lua: skip_wanted()
* [Fix] initialize ollama result table
* [Fix] libmime: declare comparators const for doctest 2.4.12 compatibility
* [Project] Modernize cmake
* [Project] Rework OSDep
* [Rework] Replies: consider all recipients and use smtp ones
* [Rework] Store shared maps data separately
* [Rework] Use locks/loaded per backend for all maps
3.11.1: 08 Mar 2025
* [Feature] Add 'noop' redis backend for scripts running
* [Feature] Add Redis caching framework
* [Feature] Add UTF8 `sub` and `len` variants for rspamd_text
* [Feature] Allow adding timers to task (respecting symbols)
* [Feature] Allow additional categories to be defined in GPT
* [Feature] Allow fine-grained control on keys permissions
* [Feature] Allow individual `read_only` flag per key
* [Feature] Allow multiple lua scripts for fuzzy storage
* [Feature] Allow to add periodic functions in Lua API
* [Feature] Allow to disable rbls from map
* [Feature] Allow to hash any Lua types
* [Feature] Allow to store shingles as opaque Lua data
* [Feature] Cache LLM replies
* [Feature] GPT: Add ollama support
* [Feature] GPT: Support reason adding
* [Feature] Improve prompt and use plaintext instead of JSON
* [Feature] Lua_task: Allow to load data into the existing task
* [Feature] More additions
* [Feature] Pass shingles to Lua scripts
* [Feature] Preliminary implementation of LLM based anonymizing
* [Feature] Support LLM models consensus
* [Feature] Try to check maps earlier if their expires is too long
* [Feature] Use debug module name from caller in lua_cache
* [Fix] Add timer update before timer setting
* [Fix] Allow to work with no ratelimits
* [Fix] Always create ratelimit buckets
* [Fix] Avoid collision hacks in mempool variables hash
* [Fix] Expire neural ham and spam sets so they not hangup in redis indefinitely
* [Fix] Fix crash on FreeBSD when Rspamd is built without hyperscan
* [Fix] Make table digests consistent
* [Fix] RBL: fix use of `content_urls` and `images` inside `checks`
* [Fix] Verify key type to match DKIM signature type
* [Fix] connIP is not correctly added to request
* [Fix] properly close multipart/related boundary when adding text footer
* [Rework] GPT: Use cache framework
3.11.0: 16 Dec 2024
* [Conf] Add lua.local.d folder
* [Conf] Add more ways to extend Rspamd configuration
* [Conf] Allow to install examples conditionally
* [Conf] Fix comments in elastic.conf
* [Conf] Install examples
* [Conf] Use full hostnames for SURBL
* [CritFix] Allow to reupload scripts when Redis is restarted
* [CritFix] Fix ARC-Seal signing
* [CritFix] Properly check dynamic keys in fuzzy storage
* [Feature] Add LRU cache for last filled ratelimit buckets
* [Feature] Add include/exclude logic for headers
* [Feature] Add ratelimit util to manage last filled ratelimit buckets
* [Feature] Dump current ratelimits for fuzzy keys
* [Feature] GPT: Try harder to find JSON in NN reply
* [Feature] Improve address rotation algorithm
* [Feature] Show stats in rspamadm
* [Feature] Unify displayed part selection
* [Fix] Avoid null-bytes in Log-Tag header value.
* [Fix] Another story about char sign
* [Fix] Check DNS limits when resolving MX/PTR records
* [Fix] Dmarc: Properly encode structured headers
* [Fix] Do not abort when OpenSSL is broken, report that to a user
* [Fix] Fix dealing with happy eyeballs in SPF
* [Fix] Fix memory leak in `lua_new_text` invocations
* [Fix] Fix usage of the logging function
* [Fix] Load "default" provider as well as "legacy"
* [Fix] Milter headers: fold before encoding
* [Fix] More fixes to rfc2047 encoding
* [Fix] More things to fix
* [Fix] Phishing: Fix many cases of FP for the same domains
* [Fix] Remove USPOOF_SINGLE_SCRIPT_CONFUSABLE from the checks
* [Fix] Restore propagation of spam/ham learns
* [Fix] Sigh, another fix
* [Fix] Some fixes to `rspamadm ratelimit`
* [Fix] Some more fixes
* [Fix] Use `dkim_signing` for `sign_headers` option
* [Fix] Use correct type for keylen in lua_ucl_newindex
* [Fix] Use cumulative timeout when dealing with TCP connections
* [Fix] Use unsigned char for ragel machines
* [Project] Add routine to strip attachments
* [Project] Add tool to rspamadm
* [Project] Initial stuff to implement messages anonymization
* [Project] Keep Changelog updated
* [Project] Various fixes and `rspamadm mime strip` command
* [Rework] Allow `Content-Encoding` standard header for zstd compression
* [Rework] Breaking: Actualize elastic module, support Elastic 8 & OpenSearch 2, add index policy with logs retention and many more
* [Rework] Multimap should use only distinct text parts for content matching
* [Rework] Replace fastutf with simdutf
* [Rework] Rewrite rfc2047 encoding as it was totally broken
* [Rework] Update hiredis to 1.2.0
3.10.2: 21 Oct 2024
* [CritFix] Fix ARC-Seal signing
* [Fix] add EOF to openmetrics response in proxy and server
3.10.1: 16 Oct 2024
* [Feature] Update effective_tld_names.dat by @wdhdev in #5176
* [Fix] Use correct type for keylen in lua_ucl_newindex by @arkamar in #5169
* [Fix] Avoid null-bytes in Log-Tag header value by @smarsching in #5179
* [Fix] Do not abort when OpenSSL is broken, report that to a user by @vstakhov in #5188
* [Fix] Update hiredis library removing all hacks by @vstakhov in #5167
* [Fix] Remove proxy from url_redirector.conf as it not the option by @dragoangel in #5164
* [Fix] Some build fixes by @vstakhov in #5189
* [Fix] Some more fixes by @vstakhov in #5190
3.10.0: 30 Sep 2024
* [Conf] Add SenderScore RPBL return codes
* [Conf] Add SenderScore Reputationlist RBL
* [Conf] Increase scores for strange things in the archives
* [CritFix] The max size for signing key is actually 65 bytes for p256
* [Feature] Add rspamadm secretbox command
* [Feature] Add rspamd_cxx_unit_cryptobox for unit testing
* [Feature] Add support for OpenSSL 3.0
* [Feature] Add support for OpenSSL 3.0 for DKIM
* [Feature] Add tests for rspamd_cryptobox
* [Feature] Add tooling to encrypt strings in Lua
* [Feature] Allow differen modes for fuzzy rules
* [Feature] Allow to set negative group score limit via `min_score`
* [Feature] DMARC: Implement reporting.only_domains setting
* [Fix] Add workaround for the bug in OpenSSL < 3.0.8
* [Fix] Another fix for Redis schema
* [Fix] Another safe-guards for learning/classifying an empty message
* [Fix] Apply the same workaround for signing keys
* [Fix] Check message before trying to dereference pointer
* [Fix] Do not install doctest stuff
* [Fix] Encode headers that we send to milter add header
* [Fix] Fix DCC `rep` handling
* [Fix] Fix Redis scripts uploading when Redis is not ready
* [Fix] Fix and rework various parts
* [Fix] Fix compatibility with OSSL 1.0
* [Fix] Fix glib internals by setting locale in `rspamc`
* [Fix] GPT: Fix bug in condition check
* [Fix] Get rid of EVP_PKEY_CTX_set1_rsa_keygen_pubexp
* [Fix] Iterate over dynamic keys in fuzzy storage
* [Fix] Make tostring in UCL a bit less brain-damaged
* [Fix] More bogus sizes fix
* [Fix] Preserve the previous behaviour of RDNS_* checks
* [Fix] Rework DMARC to correctly handle spaces in DMARC records Issue: #4906
* [Fix] Sign key != encryption key, omg
* [Fix] Unify lua symbols registration
* [Fix] Use proper keys when doing asymmetric encryption
* [Project] Add API method to push unwrapped UCL object
* [Project] Add more stuff to transparent UCL
* [Project] Add parsing of key limits and expire date
* [Project] Add ratelimit parsing for fuzzy keys
* [Project] Allow manipulations with opaque UCL objects
* [Project] Allow to change log tag from HTTP request
* [Project] Implement expiration
* [Project] Implement per-key ratelimit
* [Project] Move ratelimit parsing stuff to a common library
* [Project] Remove NIST (OpenSSL) mode from cryptobox
* [Project] Remove NIST mode from everywhere
* [Project] Rework ratelimits check
* [Project] Some more fixes
* [Project] Start support of MIME UTF8
* [Project] Try to allow more transparent access of ucl elements
* [Rework] Allow more flexible keypair encoding
* [Rework] Breaking: Rewrite cfg transform and remove legacy
* [Rework] Change fuzzy error symbols
* [Rework] Change the logic of skipping symbols
* [Rework] Clean up legacy code
* [Rework] Implement new replies logic on the server's side
* [Rework] Remove control block support
* [Rework] Resolve rdns in a separate function
* [Rework] Use __builtin_cpu_supports where possible
* [Rework] Use a more straight structure for DKIM keys
* [Rules] Fix some old rules
3.9.1: 23 Jul 2024
* [Conf] Spf: Add R_SPF_PLUSALL symbol with some score
* [Feature] Spf: Treat SPF +all in a special way
* [Minor] Ensure some safety when checking weights
* [Minor] Fix several issues with flag propagation
* [Minor] Gpt: Improve prompt and add some conversion heursitics
* [Minor] Gpt: Remove top_p reduce temperature to 0
* [Minor] Gpt: Set response_format
* [Minor] Gpt: Use gpt-4o-mini by default
3.9.0: 12 Jul 2024
* [CritFix] Protect regexp matcher from regexps with empty patterns
* [Feature] Allow adding X-CMAE-Score header
* [Feature] Allow custom milter quarantine and tempfail messages
* [Feature] Allow to specify minimum weight in GPT plugin
* [Feature] Cloudmark: Add scores_symbols setting
* [Feature] Further optimization to the hot path
* [Feature] Make min_resolve_interval configurable
* [Feature] Report slow synchronous rules
* [Feature] Rspamc: add `files-list` option
* [Feature] Support metrics command in normal/proxy workers
* [Feature] Support reply in message pack format
* [Feature] Use msgpack in the client
* [Feature] Verify sanity of l= tag in DKIM
* [Feature] milter_headers: support not removing headers
* [Fix] Allow autolearn for the controller worker
* [Fix] Allow spaces in DMARC records
* [Fix] Allow to set 0 as number of rows to disable roll history
* [Fix] Always set the unlearn flag when relearning
* [Fix] Apply detection phase if fasttext could not detect language
* [Fix] Backport fixes from libucl
* [Fix] Backport multiple fixes from libucl
* [Fix] Change expiration logic for redis_cache
* [Fix] Check nconns when firing the final termination event
* [Fix] Do not apply tableshape for known senders
* [Fix] Do not crash if symbol is missing in the metric
* [Fix] Do not read out-of-boundary when doing base64 encoding
* [Fix] Do not save multipatterns to FS in certain cases
* [Fix] Fix another corner case that allows candidates to be freed without init
* [Fix] Fix documentation nesting
* [Fix] Fix dynamic_symbols in the multimap plugin
* [Fix] Fix inconsistent nesting in mime parts
* [Fix] Fix parsing of maps definitions
* [Fix] Fix shared memory proxying when compression is set
* [Fix] Fuzzy add/delete handlers are badly broken for compression
* [Fix] Honor dynamic thresholds for greylisting module
* [Fix] If we have one statfile disabled we need to disable all
* [Fix] Increase/decrease hash_key value for tokens depending on is_unlearn
* [Fix] Libucl: Fix messagepack autodetection
* [Fix] Resgore the collaterally removed line
* [Fix] Unset autolearn flag if we learn explicitly
* [Fix] Update `nconns` in proxy
* [Fix] Update greylisting threshold as it can be easily dynamic
* [Fix] Update is_spam in learned_ids when relearning
* [Fix] Use explicit timeouts in the metadata exporter
* [Fix] metric_exporter: avoid sending `nil` in metric values
* [Project] Add GPT plugin
* [Project] Add a tool to perform statistical analysis of classifiers
* [Project] Finally fix slow timer behaviour
* [Project] Implement fuzzy check retransmits backpressure
* [Project] Improve stats processing
* [Project] Reduce default window size of OSB tokenizer to 2
* [Project] Rework grow factor
* [Project] Start optimization of userdata hashing
* [Project] Use libarchive for troublesome archives
* [Rework] Allow metrics endpoint to be enabled for each scanner
* [Rework] Allow multiple conditions for dkim signing when using vault/redis
* [Rework] Introduce dynamic_rate_limit for ratelimits
* [Rework] Serialize control commands
* [Rework] Update fmt to version 11
* [Rework] Use direct hashing instead of string hashing
* [Rules] Added rules for detecting likely malware
3.8.2: 20 Feb 2024
* [Feature] Add extraction type for `from` maps
* [Feature] Allow to add templates to redis history prefix
* [Feature] Implement dynamic keys map in fuzzy storage
* [Feature] Lua_url: Add `to_http` method
* [Feature] Support JSON logging when in syslog mode
* [Fix] Deal with `Connection` and `Host` headers on proxying
* [Fix] Encode headers in metadata exporter
* [Fix] Fix initial maps load
* [Fix] Make stat tokens allocation consistent
* [Fix] Resolve issue with bayes stat in `rspamadm` mode
* [Fix] Try to fix url path issue
* [Rework] Breaking: Do not report module as action
* [Rework] Use khash instead of glib hashes for many reasons
3.8.1: 25 Jan 2024
* [Fix] Fix headers insertion in the ordered list
* [Fix] Fix learn error propagation
* [Fix] Fix learning with long prefixes
* [Fix] Fix potential double free by expclicitly zeroing pointers
* [Fix] Fix storing of the bayes tokens
* [Fix] Use short comments rather than long one
3.8.0: 19 Jan 2024
* [Project] Rspamadm fuzzyping command
* [Project] Use Redis scripts for Bayes statistics and cache
* [Project] Support JSON logging
* [CritFix] - Fix reported length of logging structure
* [Feature] Allow to set `max_users` for Redis bayes backend
* [Feature] Escape JSON when needed
* [Feature] Proxy: Allow `encrypted_only` option
* [Feature] Reiterate on gtube patterns
* [Feature] Support ping command in fuzzy storage
* [Feature] Support suppressing DMARC reporting for particular recipients
* [Feature] rbl: support disabling or replacing url_whitelist per RBL
* [Fix] Another try to fix setproctitle
* [Fix] Cleanup session on exit
* [Fix] Do not cleanup hyperscan files unless new ones are loaded
* [Fix] Fix bad access when printing pending events on failure path
* [Fix] Fix issues with the raw header on header insertion/modification
* [Fix] Fix overflow in fuzzy_stats command
* [Fix] Fix some corner cases when parsing maps with no newlines
* [Fix] Fix various issues with canonicalisation of the paths
* [Fix] Fix wrong raw_len usage
* [Fix] Make words selection random deterministic upon content
* [Fix] Properly set config field when creating tasks from Lua
* [Fix] Really fix the language detector statistical heuristic
* [Fix] Set loaded variable explicitly
* [Fix] dkim_signing: siging_table: lowercase before lookup
* [Fix] known_senders: fix config handling
* [Fix] rbl: fix `exclude_local`
3.7.5: 15 Dec 2023
* Add support for loongarch
* [Fix] Fix rspamadm lua logger
* [Fix] Fix systemd logging
* [Fix] dkim_signing: siging_table: lowercase before lookup
* [Minor] Fix build with no hyperscan
* [Minor] Try improve test stability
3.7.4: 14 Nov 2023
* [Enhancement] Add composite rule for suspicious URLs in suspicious messages
* [Fix] Another try to fix setproctitle
* [Fix] Do not cleanup hyperscan files unless new ones are loaded
* [Fix] Fix various issues with canonicalisation of the paths
* [Fix] Properly set config field when creating tasks from Lua
* [Fix] Set loaded variable explicitly
* [Fix] known_senders: fix config handling
* [Fix] rbl: fix `exclude_local`
* [Minor] Add missing <algorithm> include for gcc 14
* [Minor] Add rule for messages missing both X-Mailer and User-Agent header
* [Minor] Bundle fasttext as linux distributives are just useless
* [Minor] Enable fasttext on RPM based linux
* [Minor] Forgot it in one more place
* [Minor] Improve FREEMAIL_AFF capture rates
* [Minor] Limit fasttext to amd64 only
* [Minor] Properly search for fasttext include
* [Minor] Treat *.zpaq attachments as archives and harmful
* [Minor] Update to 3.7.4
* [Minor] force_actions: set a group for symbols
* [WebUI] Update map editor
3.7.3: 27 Oct 2023
* [Fix] Emergency fix for the hyperscan path error
3.7.2: 26 Oct 2023
* [Feature] rbl: support checking returncodes by CIDR
* [Feature] rbl: support checking returncodes by regex
* [Feature] rbl: support globbed return codes
* [Fix] DMARC reporting: fix reporting for subdomains
* [Fix] Deal with fmtlib exceptions properly
* [Fix] backport fix for dlfcn.h from backward-cpp
* [Rules] Blank spam detection
3.7.1: 07 Oct 2023
* [CritFix] Fix leak in `gzip` function
* [Feature] Add ICAP Content-Type and Filename
* [Feature] Add `logging`->`task_max_elts` option
* [Feature] Add utility to split string like stuff for C++ code
* [Feature] Allow to set HTTP auth parameters for the maps
* [Feature] Check for plugin configuration errors on `configtest`
* [Feature] `known_senders` plugin
* [Feature] Use backward-cpp instead of manual libunwind stuff
* [Feature] rbl: support checking numeric URLs in isolation
* [Fix] CMakeLists.txt remove whitespace added by linter as it makes tests fail
* [Fix] Change Date: header location to conform with RFC
* [Fix] Correct format pattern for RE tree tempfile name
* [Fix] Correct format string for unw_word_t
* [Fix] Do not accept invalid ucl object types
* [Fix] Do not pollute public headers with libev internals
* [Fix] Do not set output type if list application failed
* [Fix] Fix `url:set_redirected` method
* [Fix] Fix format string and some length issues
* [Fix] Fix grammar definition for content-disposition attributes
* [Fix] Fix lua schema enrichment logic for Redis params
* [Fix] Fix lua stack corruption when logging large tables
* [Fix] Fix merge table utility
* [Fix] Fix output of non-RSA DKIM keys
* [Fix] Fix some corner cases of single-host urls parsing
* [Fix] Fix various issues in the `url_redirector` plugin
* [Fix] MISSING_MIMEOLE: avoid matching messages from Android GMail app (#4561)
* [Fix] Prevent DNSWL sabotage
* [Fix] Try to fix unzip function
* [Fix] rbl: really fix dependency registration when symbols_prefixes is used
* [Fix] rspamadm mime: arguments beginning with letter `t`
* [Rework] Breaking: return back to semver
* [Rework] Move rcl logic to C++
3.6: 03 Aug 2023
* [Conf] Add `one_shot` to some specific multimap rules
* [Conf] Add language detection configuration
* [Conf] Add missing attributes for the language detection configuration
* [Conf] Remove outdated composite rules
* [Feature] Add `sentinel_password` option
* [Feature] Add ability to deny specific fuzzy flags by default
* [Feature] Add controller endpoint to get fuzzy hashes from messages
* [Feature] Add extra symbol when URL redirector reaches nested limit
* [Feature] Add function to transliterate utf8 to ascii with some normalisation
* [Feature] Add html parsing limit
* [Feature] Add order to urls structure
* [Feature] Add some missing functions to `lua_rsa` library
* [Feature] Allow fuzzy workers to exchange blocked information
* [Feature] Allow to have weak flags in fuzzy storage
* [Feature] Allow to read options from maps in the multimap plugin
* [Feature] Allow to use other methods when fasttext detection is enabled
* [Feature] Count stats per key per flag
* [Feature] Finish all features of dkim_keygen in Lua
* [Feature] Khash: Allow static initialisation
* [Feature] Maps: Add on_load support
* [Feature] Preliminary implementation of dynamic composites
* [Feature] Process HTML parts before text ones
* [Feature] Reorganise struct rspamd_url to be 64 bytes size
* [Feature] Save fuzzy ratelimit buckets
* [Feature] Use in-place deflation for strings
* [Feature] external_relay: add ip_map strategy
* [Fix] Avoid race between config new/free by using a counter
* [Fix] Do not use `rspamadm.dkim_keygen`
* [Fix] Feed fasttext language model with the pre-tokenized words
* [Fix] Fix `rspamd_has_only_html_part`
* [Fix] Fix an old issue with order of destruction race between redis pool and lua
* [Fix] Fix format string usage
* [Fix] Fix parsing due to old bug revealed
* [Fix] Fix parsing of the mask values that are invalid
* [Fix] Ignore non-unique stop words
* [Fix] Include the last character when parsing the last header with no value
* [Fix] More fixes to fuzzystat
* [Fix] Set proper counter
* [Fix] Try harder to clean pending bucket
* [Fix] Try harder to remove bad hyperscan files
* [Fix] Update stats before encryption...
* [Fix] dmarc gramar - allow spaces before ";"
* [Fix] rbl: fix dependency registration when symbols_prefixes is used
* [Fix] remove obsolete rspamd-redirector files
* [Fix] test external_relay: count should always be the last rule, as it have no matching condition
* [Project] Allow to register multimap symbols dynamically
* [Project] Implement fasttext language detection
* [Rework] Default max shots must not influence options
* [Rework] Write dkim keygen tool in lua
* [Rules] Add thread hijacking composite rule
3.5: 17 Mar 2023
* [Conf] Clarify `timeout` in rspamd_proxy
* [Conf] Fix hashbl
* [Conf] Add SURBL hashbl support (WIP)
* [Conf] RBL: Fix selector
* [Conf] Reduce the default timeout
* [CritFix] Deserialise hyperscan to the page-aligned space to prevent alignment issues
* [CritFix] Fill path field in hyperscan notice command
* [Feature] Add `thresholds` field to the scan result
* [Feature] Add possibility to execute lua scripts for blocked fuzzy clients
* [Feature] Add preliminary support of the external maps in the multimap plugin
* [Feature] Allow to build a map by combining tuples of selectors
* [Feature] Allow to query external maps for settings
* [Feature] Allow to specify `selector_alias` in the maps definition
* [Feature] Enable Mime part filters on antivirus module
* [Feature] Improve ratelimit redis scripts
* [Feature] Selectors: Add specific_urls_filter_map extractor
* [Feature] Some rework of the selectors framework
* [Fix] Add O_CREAT flag when creating a file
* [Fix] Add a database check function unless we have anything from Hyperscan
* [Fix] Add hyperscan databases sanity check
* [Fix] Add workaround for ENOBUFS error on sending
* [Fix] Do not do `lstat` when we are creating file
* [Fix] Finally get rid of RSPAMD_USE_47BIT_LIGHTUSERDATA_HACK
* [Fix] Fix boundaries that contain only dashes
* [Fix] Fix off-by-one error in css tokenizer
* [Fix] Fix url reputation plugin
* [Fix] Fix usage of the Redis config schema as `extra_fields`
* [Fix] Further checks for the hs_scratch_alloc
* [Fix] Honor group flag for one shot
* [Fix] Normalize glob paths to avoid hash table misses
* [Fix] Ratelimit: Use unpack for `HMGET` return value
* [Fix] Rbl: Fix helo check pipeline
* [Fix] Replace broken strict_domains with phishing_exceptions
* [Fix] Restore `strict_domains` support
* [Fix] Return true from has_urls(true) if only emails are present
* [Fix] Rework lists applications
* [Fix] Set symcache item in coroutine calls
* [Fix] Treat `hs_allocate_scratch` errors as non-fatal
* [Fix] Treat hostnames with no dots as eSLD of their own
* [Fix] received: filtering of artificial header
* [Project] Add external maps support
* [Rework] Breaking: Do not report soft reject in history
* [Rework] Convert chartable plugin to c++ for convenience
* [Rework] Use a different approach for customization of the settings
* [Rules] Mid: Add MID_END_EQ_FROM_USER_PART rule
3.4: 01 Nov 2022