• [RELEASE] cleanfeed 2026 maintenance release for INN2.7/2.8

    From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Sun Jul 12 16:03:41 2026
    From Newsgroup: news.software.nntp

    Hi everyone,

    A few days ago Marco Mook contacted me after noticing binary articles appearing in text-only newsgroups.

    Like many other news administrators, I rely on Cleanfeed to keep transit
    feeds as clean as possible. After investigating the issue, I discovered
    that the latest public version of Cleanfeed (available from Steve
    Crook's GitHub repository) still contains a number of long-standing
    issues, including some that have already been reported over the years.

    Since the project has seen little activity for quite some time, I
    decided to start a maintenance update for my own servers. What initially started as a small fix quickly turned into a much larger cleanup, so I
    thought it might be useful to share it with other INN administrators.


    You can download the package here:

    http://www.bofh.team/software/cleanfeed-2026.zip


    This is intended to be a **maintenance fork**.

    My goal is to preserve Cleanfeed's original philosophy while fixing
    bugs, modernizing the code where appropriate and keeping it usable on
    current INN installations, without turning it into a heavyweight
    filtering framework.

    For the time being I simply renamed the package to avoid confusion with
    the original Cleanfeed distribution. My intention is not to replace the original project, but to keep it maintained and usable on modern INN installations. If development of the original Cleanfeed project resumes
    in the future, I would be happy to see any useful changes merged
    upstream whenever possible.

    ##################
    ### Highlights ###
    ##################
    * Numerous bug fixes throughout the Perl code.
    * Improved detection of misplaced binary articles (yEnc, MIME, Base64, uuencode and related cases).
    * Fixed several long-standing bugs and inconsistencies.
    * Added configuration validation and consistency checks.
    * Added optional peer-based and hierarchy-based policies.
    * Added lightweight operational features (configuration fingerprinting,
    rule inventory, diagnostics, standalone configuration checker and
    article tester).
    * Improved logging and rejection reporting with stable reason codes.
    * Updated the bundled Python helper tools from Python 2 to Python 3 and removed obsolete dependencies.
    * Reorganized and simplified the documentation. The example
    configuration files are now extensively commented and intended to serve
    as the primary and complete reference.
    * General code cleanup and removal of obsolete historical references.
    * Many smaller fixes and maintenance improvements, see README and .md file.

    The package has been tested on one of my transit servers as well as on
    my text-only server and has been running without issues so far. But pay attention, the package is provided "as is", without any warranty.

    Particular attention has been paid to performance. Since this filter
    runs in the article transit, I tried to keep every new feature as
    lightweight as possible, avoiding unnecessary overhead on busy servers.

    This is certainly not a perfect release, but I believe it provides a
    solid foundation for keeping Cleanfeed alive on modern systems.

    Questions, bug reports, suggestions and patches are all welcome, either
    here or by email.

    Although I don't currently have a public Git repository, I am more than
    happy to review and integrate contributions sent by email.
    The goal of this project is not to reinvent Cleanfeed, but to keep a
    proven and widely deployed filter healthy, maintainable and compatible
    with today's INN installations.

    #######################
    ## Special thanks to ##
    #######################

    * Ray Banana (Eternal September), for pointing me in the right direction
    and helping identify where the first fixes were needed.

    * Marco d'Itri and Steve Crook (Linux and Mixmin), for creating and maintaining Cleanfeed over many years.

    * Julien |elie (Trigofacile), for continuing to develop and maintain
    INN2.*, and for the passion and dedication he puts into the project
    every day.

    * Russ Allbery (Eyrie.org|ISC), for his outstanding Perl documentation,
    the INN documentation and the many technical resources that made this
    work considerably easier.

    I also want to thank everyone who reported bugs, discussed Cleanfeed
    over the years and kept Usenet alive. Their reports and discussions were invaluable while reviewing and modernizing the code.

    I hope this maintenance release proves useful to other newsmasters.


    Sincerely

    --
    Ivo Gandolfo
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From doctor@doctor@doctor.nl2k.ab.ca (The Doctor) to news.software.nntp on Sun Jul 12 19:03:04 2026
    From Newsgroup: news.software.nntp

    In article <11306rt$3l5ob$1@paganini.bofh.team>,
    Ivo Gandolfo <usenet@bofh.team> wrote:
    Hi everyone,

    A few days ago Marco Mook contacted me after noticing binary articles >appearing in text-only newsgroups.

    Like many other news administrators, I rely on Cleanfeed to keep transit >feeds as clean as possible. After investigating the issue, I discovered
    that the latest public version of Cleanfeed (available from Steve
    Crook's GitHub repository) still contains a number of long-standing
    issues, including some that have already been reported over the years.

    Since the project has seen little activity for quite some time, I
    decided to start a maintenance update for my own servers. What initially >started as a small fix quickly turned into a much larger cleanup, so I >thought it might be useful to share it with other INN administrators.


    You can download the package here:

    http://www.bofh.team/software/cleanfeed-2026.zip


    This is intended to be a **maintenance fork**.

    My goal is to preserve Cleanfeed's original philosophy while fixing
    bugs, modernizing the code where appropriate and keeping it usable on >current INN installations, without turning it into a heavyweight
    filtering framework.

    For the time being I simply renamed the package to avoid confusion with
    the original Cleanfeed distribution. My intention is not to replace the >original project, but to keep it maintained and usable on modern INN >installations. If development of the original Cleanfeed project resumes
    in the future, I would be happy to see any useful changes merged
    upstream whenever possible.

    ##################
    ### Highlights ###
    ##################
    * Numerous bug fixes throughout the Perl code.
    * Improved detection of misplaced binary articles (yEnc, MIME, Base64, >uuencode and related cases).
    * Fixed several long-standing bugs and inconsistencies.
    * Added configuration validation and consistency checks.
    * Added optional peer-based and hierarchy-based policies.
    * Added lightweight operational features (configuration fingerprinting,
    rule inventory, diagnostics, standalone configuration checker and
    article tester).
    * Improved logging and rejection reporting with stable reason codes.
    * Updated the bundled Python helper tools from Python 2 to Python 3 and >removed obsolete dependencies.
    * Reorganized and simplified the documentation. The example
    configuration files are now extensively commented and intended to serve
    as the primary and complete reference.
    * General code cleanup and removal of obsolete historical references.
    * Many smaller fixes and maintenance improvements, see README and .md file.

    The package has been tested on one of my transit servers as well as on
    my text-only server and has been running without issues so far. But pay >attention, the package is provided "as is", without any warranty.

    Particular attention has been paid to performance. Since this filter
    runs in the article transit, I tried to keep every new feature as >lightweight as possible, avoiding unnecessary overhead on busy servers.

    This is certainly not a perfect release, but I believe it provides a
    solid foundation for keeping Cleanfeed alive on modern systems.

    Questions, bug reports, suggestions and patches are all welcome, either
    here or by email.

    Although I don't currently have a public Git repository, I am more than >happy to review and integrate contributions sent by email.
    The goal of this project is not to reinvent Cleanfeed, but to keep a
    proven and widely deployed filter healthy, maintainable and compatible
    with today's INN installations.

    #######################
    ## Special thanks to ##
    #######################

    * Ray Banana (Eternal September), for pointing me in the right direction
    and helping identify where the first fixes were needed.

    * Marco d'Itri and Steve Crook (Linux and Mixmin), for creating and >maintaining Cleanfeed over many years.

    * Julien |elie (Trigofacile), for continuing to develop and maintain
    INN2.*, and for the passion and dedication he puts into the project
    every day.

    * Russ Allbery (Eyrie.org|ISC), for his outstanding Perl documentation,
    the INN documentation and the many technical resources that made this
    work considerably easier.

    I also want to thank everyone who reported bugs, discussed Cleanfeed
    over the years and kept Usenet alive. Their reports and discussions were >invaluable while reviewing and modernizing the code.

    I hope this maintenance release proves useful to other newsmasters.


    Sincerely


    Thank you!

    --
    Ivo Gandolfo
    --
    Member - Liberal International This is doctor@nk.ca Ici doctor@nk.ca
    Yahweh, King & country!Never Satan President Republic!Beware AntiChrist rising! Look at Psalms 14 and 53 on Atheism ; 31 years in the ISP business!
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From doctor@doctor@doctor.nl2k.ab.ca (The Doctor) to news.software.nntp on Sun Jul 12 19:05:20 2026
    From Newsgroup: news.software.nntp

    In article <11306rt$3l5ob$1@paganini.bofh.team>,
    Ivo Gandolfo <usenet@bofh.team> wrote:
    Hi everyone,

    A few days ago Marco Mook contacted me after noticing binary articles >appearing in text-only newsgroups.

    Like many other news administrators, I rely on Cleanfeed to keep transit >feeds as clean as possible. After investigating the issue, I discovered
    that the latest public version of Cleanfeed (available from Steve
    Crook's GitHub repository) still contains a number of long-standing
    issues, including some that have already been reported over the years.

    Since the project has seen little activity for quite some time, I
    decided to start a maintenance update for my own servers. What initially >started as a small fix quickly turned into a much larger cleanup, so I >thought it might be useful to share it with other INN administrators.


    You can download the package here:

    http://www.bofh.team/software/cleanfeed-2026.zip


    This is intended to be a **maintenance fork**.

    My goal is to preserve Cleanfeed's original philosophy while fixing
    bugs, modernizing the code where appropriate and keeping it usable on >current INN installations, without turning it into a heavyweight
    filtering framework.

    For the time being I simply renamed the package to avoid confusion with
    the original Cleanfeed distribution. My intention is not to replace the >original project, but to keep it maintained and usable on modern INN >installations. If development of the original Cleanfeed project resumes
    in the future, I would be happy to see any useful changes merged
    upstream whenever possible.

    ##################
    ### Highlights ###
    ##################
    * Numerous bug fixes throughout the Perl code.
    * Improved detection of misplaced binary articles (yEnc, MIME, Base64, >uuencode and related cases).
    * Fixed several long-standing bugs and inconsistencies.
    * Added configuration validation and consistency checks.
    * Added optional peer-based and hierarchy-based policies.
    * Added lightweight operational features (configuration fingerprinting,
    rule inventory, diagnostics, standalone configuration checker and
    article tester).
    * Improved logging and rejection reporting with stable reason codes.
    * Updated the bundled Python helper tools from Python 2 to Python 3 and >removed obsolete dependencies.
    * Reorganized and simplified the documentation. The example
    configuration files are now extensively commented and intended to serve
    as the primary and complete reference.
    * General code cleanup and removal of obsolete historical references.
    * Many smaller fixes and maintenance improvements, see README and .md file.

    The package has been tested on one of my transit servers as well as on
    my text-only server and has been running without issues so far. But pay >attention, the package is provided "as is", without any warranty.

    Particular attention has been paid to performance. Since this filter
    runs in the article transit, I tried to keep every new feature as >lightweight as possible, avoiding unnecessary overhead on busy servers.

    This is certainly not a perfect release, but I believe it provides a
    solid foundation for keeping Cleanfeed alive on modern systems.

    Questions, bug reports, suggestions and patches are all welcome, either
    here or by email.

    Although I don't currently have a public Git repository, I am more than >happy to review and integrate contributions sent by email.
    The goal of this project is not to reinvent Cleanfeed, but to keep a
    proven and widely deployed filter healthy, maintainable and compatible
    with today's INN installations.

    #######################
    ## Special thanks to ##
    #######################

    * Ray Banana (Eternal September), for pointing me in the right direction
    and helping identify where the first fixes were needed.

    * Marco d'Itri and Steve Crook (Linux and Mixmin), for creating and >maintaining Cleanfeed over many years.

    * Julien |elie (Trigofacile), for continuing to develop and maintain
    INN2.*, and for the passion and dedication he puts into the project
    every day.

    * Russ Allbery (Eyrie.org|ISC), for his outstanding Perl documentation,
    the INN documentation and the many technical resources that made this
    work considerably easier.

    I also want to thank everyone who reported bugs, discussed Cleanfeed
    over the years and kept Usenet alive. Their reports and discussions were >invaluable while reviewing and modernizing the code.

    I hope this maintenance release proves useful to other newsmasters.


    Sincerely

    --
    Ivo Gandolfo

    Julien please add.
    --
    Member - Liberal International This is doctor@nk.ca Ici doctor@nk.ca
    Yahweh, King & country!Never Satan President Republic!Beware AntiChrist rising! Look at Psalms 14 and 53 on Atheism ; 31 years in the ISP business!
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Mon Jul 13 09:18:13 2026
    From Newsgroup: news.software.nntp

    Il 12/07/2026 21:05, The Doctor ha scritto:

    Julien please add.

    Hey Doc, I see in your innreport stat some trouble:

    Jul 12 13:10:09 gallifrey innd[55794]: filter: Ignoring invalid bad_from regex; keeping previous compiled value: Unterminated \g... pattern in
    regex; marked by <-- HERE


    Check the config :D Some rules you put it's invalid and the filter
    warning you.

    Another request: you can send me via email your news.notice log file
    (filtered of course, I'm only intrested to "filter:" line, for debug pourpouse)?


    Thanks


    Sincerely
    --
    Ivo Gandolfo

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?Q?Julien_=C3=89LIE?=@iulius@nom-de-mon-site.com.invalid to news.software.nntp on Mon Jul 13 13:33:28 2026
    From Newsgroup: news.software.nntp

    Hi Ivo,

    Like many other news administrators, I rely on Cleanfeed to keep transit feeds as clean as possible. After investigating the issue, I discovered
    that the latest public version of Cleanfeed (available from Steve
    Crook's GitHub repository) still contains a number of long-standing
    issues, including some that have already been reported over the years.

    Since the project has seen little activity for quite some time, I
    decided to start a maintenance update for my own servers. What initially started as a small fix quickly turned into a much larger cleanup, so I thought it might be useful to share it with other INN administrators.

    Great news! Many thanks for that, Ivo!


    http://www.bofh.team/software/cleanfeed-2026.zip

    I have just installed your new version.
    I'll keep an eye on the rejects and tell you if I see anything unusual.


    My goal is to preserve Cleanfeed's original philosophy while fixing
    bugs, modernizing the code where appropriate and keeping it usable on current INN installations, without turning it into a heavyweight
    filtering framework.

    Sounds good.


    ##################
    ### Highlights ###
    ##################

    You could mention the new CLEANFEED_CONFIG_DIR variable, which eases
    future updates :)
    We no longer need editing the script to put the actual path.


    * Improved detection of misplaced binary articles (yEnc, MIME, Base64, uuencode and related cases).

    Hopefully they are now correctly caught by Cleanfeed. I confess I was
    relying on the NoCeM notices sent by Eternal September to remove these unwanted binaries!


    * Added optional peer-based and hierarchy-based policies.

    Thanks for this improvement!


    * Reorganized and simplified the documentation. The example
    configuration files are now extensively commented and intended to serve
    as the primary and complete reference.

    A good move.

    Is it planned to revive the bad_hosts_central and bad_url_central files
    that one can regularly download to have a better real-time spam protection?
    --
    Julien |eLIE

    -2-arCo-aI see the world didn't end yesterday.
    rCo Are you sure?-a-+ (Alan Moore, _Watchmen_)

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?Q?Julien_=C3=89LIE?=@iulius@nom-de-mon-site.com.invalid to news.software.nntp on Mon Jul 13 13:38:34 2026
    From Newsgroup: news.software.nntp

    Hi Ivo,

    Another request: you can send me via email your news.notice log file (filtered of course, I'm only intrested to "filter:" line, for debug pourpouse)?

    Are these logs enabled by default? No need to activate anything?
    I'll also send you those lines if I see them.
    --
    Julien |eLIE

    -2-aMais |-coutez ce qu'on vous dit, au lieu de taper comme un sourd-a!-a-+
    (Ast|-rix)

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From doctor@doctor@doctor.nl2k.ab.ca (The Doctor) to news.software.nntp on Mon Jul 13 15:00:29 2026
    From Newsgroup: news.software.nntp

    In article <11323fl$3l5ob$2@paganini.bofh.team>,
    Ivo Gandolfo <usenet@bofh.team> wrote:
    Il 12/07/2026 21:05, The Doctor ha scritto:

    Julien please add.

    Hey Doc, I see in your innreport stat some trouble:

    Jul 12 13:10:09 gallifrey innd[55794]: filter: Ignoring invalid bad_from >regex; keeping previous compiled value: Unterminated \g... pattern in
    regex; marked by <-- HERE


    Check the config :D Some rules you put it's invalid and the filter
    warning you.

    Another request: you can send me via email your news.notice log file >(filtered of course, I'm only intrested to "filter:" line, for debug >pourpouse)?


    I figured it out.

    The filter is working fine.

    The exmaples in the new cleanfeed is a big help.


    Thanks


    Sincerely

    --
    Ivo Gandolfo

    --
    Member - Liberal International This is doctor@nk.ca Ici doctor@nk.ca
    Yahweh, King & country!Never Satan President Republic!Beware AntiChrist rising! Look at Psalms 14 and 53 on Atheism ; 31 years in the ISP business!
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Mon Jul 13 17:05:08 2026
    From Newsgroup: news.software.nntp

    Il 13/07/2026 13:33, Julien |eLIE ha scritto:
    Hi Ivo,



    Hi Julien,

    Many thanks for installing it and for offering to send me your logs.
    Having it tested on your server will be extremely useful.

    Regarding the log lines: rejection logging is enabled by default, and
    the new policy and anomaly checks that use `audit` or `reject` mode are
    also intended to produce diagnostic events when they match. the `audit`
    it's born just to test if everything working fine before switching to
    `reject` mode (just-in-case if you put something wrong in the config,
    the filter warning you something is wrong into the log's, and don't
    apply it but using latest working rules or nothing if no previous rules
    was applied).

    No additional INN setting should normally be required if Cleanfeed
    messages are already reaching `news.notice`. However, the exact
    destination still depends on the local INN/syslog configuration (on my
    Ubuntu systems it's usually `/var/log/news/news.notice`).

    The lines I am mainly interested in are those produced by the filter, especially entries containing `filter:`, `cleanfeed_event`, or one of
    the new `CF-*` reason codes. Naturally, please remove or anonymize
    anything you do not want to share.

    You are also right about `CLEANFEED_CONFIG_DIR`. I should have mentioned
    it in the announcement. It avoids editing the main filter whenever the configuration directory differs from the historical default and should
    make future upgrades much easier.

    For example:

    ```
    CLEANFEED_CONFIG_DIR=/etc/news/cleanfeed
    ```

    I originally added it mainly for offline testing. At first I thought
    that editing the original path (or having the installation script patch
    it automatically) would be the simplest approach for production
    installations.

    However, since you pointed it out, I think you may be right. Keeping `CLEANFEED_CONFIG_DIR` as a permanent feature probably makes future
    upgrades easier and avoids local modifications to the filter itself. I'm
    happy to keep it that way.

    Regarding `bad_hosts_central` and `bad_url_central`: yes, I would like
    to revive that functionality.

    The current release still supports both files, and the new `mtime`-based reload mechanism can detect an atomic replacement and load the updated
    rules without requiring changes to the main filter.

    What is currently missing is a maintained and trustworthy source (and,
    of course, someone willing to maintain it).

    I would not make Cleanfeed itself download anything, because network
    access and update handling should not happen inside the `innd` filtering
    path. My preferred implementation would be a small external updater, run
    from cron or a systemd timer, which would:

    * download the lists from a configured source;
    * verify their syntax before installation;
    * reject unsafe or invalid regular expressions;
    * optionally verify a signature or published SHA-256 digest;
    * retain the previous valid copy if an update fails;
    * replace the files atomically;
    * let Cleanfeed notice the new `mtime` and reload them.

    The difficult part is not the updater itself but deciding who maintains
    the lists, defining inclusion and removal criteria and avoiding stale
    entries and false positives, same as for the NoCEM notice.

    Unfortunately the original central lists from Mixmin are no longer
    maintained, so the real challenge is finding a reliable source for them.
    If the newsmaster community is interested this is definitely something
    we could work on together.


    Thanks again for testing the release and for your feedback.


    Sincerely,

    --
    Ivo Gandolfo

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?Q?Julien_=C3=89LIE?=@iulius@nom-de-mon-site.com.invalid to news.software.nntp on Mon Jul 13 17:29:26 2026
    From Newsgroup: news.software.nntp

    Hi Ivo,

    Regarding the log lines: rejection logging is enabled by default, and
    the new policy and anomaly checks that use `audit` or `reject` mode are
    also intended to produce diagnostic events when they match. the `audit`
    it's born just to test if everything working fine before switching to `reject` mode (just-in-case if you put something wrong in the config,
    the filter warning you something is wrong into the log's, and don't
    apply it but using latest working rules or nothing if no previous rules
    was applied).

    OK, thanks for the explanation of the new `audit` and `reject` modes.
    This will be very useful for news admins.


    No additional INN setting should normally be required if Cleanfeed
    messages are already reaching `news.notice`.

    I asked because I have never seen "filter:" in my news.notice file. I
    bet it is a novelty of your new version.
    I otherwise have a line like that when Cleanfeed rejects an article:

    Jul 7 13:04:08 news innd[2818474]: rejecting[perl] <F253S.65404$fpZb.21747@fx36.iad> 239 Binary: misplaced binary (with dontrejectfiltered)


    The current release still supports both files, and the new `mtime`-based reload mechanism can detect an atomic replacement and load the updated
    rules without requiring changes to the main filter.

    That's great!
    It is what PyClean does (the Python equivalent script for Cleanfeed).


    The difficult part is not the updater itself but deciding who maintains
    the lists, defining inclusion and removal criteria and avoiding stale entries and false positives, same as for the NoCEM notice.

    We may have several different lists maintained by different people who announce their criteria.


    Unfortunately the original central lists from Mixmin are no longer maintained, so the real challenge is finding a reliable source for them.
    If the newsmaster community is interested this is definitely something
    we could work on together.

    Why not create a GitHub fork of Cleanfeed for your new 2026 version?
    Then put in a subdirectory these central lists. As you suggested, news
    admins could then download from there the updated files, by crontab.

    You may give write access to this subdirectory to people allowed to
    distribute their own lists.
    GitHub supports adding a web hook to enforce such an ACL:
    https://docs.github.com/en/webhooks/about-webhooks

    https://git-scm.com/book/en/v2/Customizing-Git-An-Example-Git-Enforced-Policy

    Or if you trust them enough (I bet there won't be many providers for
    such lists), don't bother and give access to the whole repository. They
    may even fix or improve Cleanfeed code besides you :)

    The criteria can be mentioned in the same GitHub page (put a README.md
    file in the subdirectory).

    Wouldn't it suit the needs?
    --
    Julien |eLIE

    -2-aLa vie ne vaut rien. Mais rien ne vaut la vie.-a-+ (Andr|- Malraux)

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Mon Jul 13 20:11:57 2026
    From Newsgroup: news.software.nntp

    Il 13/07/2026 17:29, Julien |eLIE ha scritto:
    Hi Ivo,
    ..

    The criteria can be mentioned in the same GitHub page (put a README.md
    file in the subdirectory).

    Wouldn't it suit the needs?


    Hi Julien,

    So... are you trying to trick me into becoming the Cleanfeed maintainer? *sigh* :-)

    Regarding the log messages: if you want to see the additional
    diagnostics generated by my version, you can have a look at one of The
    Doctor innreport pages:

    https://gallifrey.nk.ca/news-notice.2026.07.12-01.00.00.html

    There are already several examples from the new filter there.

    I suspect your logging configuration simply routes these messages
    somewhere else (perhaps `news.debug` or another syslog destination). It
    would be interesting to compare our configurations and find out where
    they go.

    For reference, I'm simply using the standard syslogd on Ubuntu,
    installed by package manager apt and never changed.

    As for GitHub... you caught me there :-)

    To be completely honest, I have never really used GitHub. The most
    advanced thing I've ever done there was clicking the "Download ZIP"
    button *hrhr* :-P

    I've always written software for my own infrastructure and never
    maintained a public open-source project. My day job is as a system administrator, not as a software developer, so this whole "project
    maintainer" role is rather new to me.

    That said, I understand your point. A public repository would certainly
    make collaboration, bug reporting and maintaining the central lists much easier than exchanging ZIP files by email.

    So perhaps it's time for me to learn. I can't promise I'll become a
    GitHub expert overnight, but I'm certainly willing to give it a try if
    that's the best way to keep the project alive and make it easier for
    others to contribute.

    Many thanks again for your suggestions. They are greatly appreciated.



    Sincerely

    --
    Ivo Gandolfo

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From doctor@doctor@doctor.nl2k.ab.ca (The Doctor) to news.software.nntp on Tue Jul 14 02:38:55 2026
    From Newsgroup: news.software.nntp

    In article <11339pd$3l5ob$4@paganini.bofh.team>,
    Ivo Gandolfo <usenet@bofh.team> wrote:
    Il 13/07/2026 17:29, Julien |eLIE ha scritto:
    Hi Ivo,
    ..

    The criteria can be mentioned in the same GitHub page (put a README.md
    file in the subdirectory).

    Wouldn't it suit the needs?


    Hi Julien,

    So... are you trying to trick me into becoming the Cleanfeed maintainer? >*sigh* :-)

    Regarding the log messages: if you want to see the additional
    diagnostics generated by my version, you can have a look at one of The >Doctor innreport pages:

    https://gallifrey.nk.ca/news-notice.2026.07.12-01.00.00.html

    There are already several examples from the new filter there.

    I suspect your logging configuration simply routes these messages
    somewhere else (perhaps `news.debug` or another syslog destination). It >would be interesting to compare our configurations and find out where
    they go.

    For reference, I'm simply using the standard syslogd on Ubuntu,
    installed by package manager apt and never changed.

    As for GitHub... you caught me there :-)

    To be completely honest, I have never really used GitHub. The most
    advanced thing I've ever done there was clicking the "Download ZIP"
    button *hrhr* :-P

    I've always written software for my own infrastructure and never
    maintained a public open-source project. My day job is as a system >administrator, not as a software developer, so this whole "project >maintainer" role is rather new to me.

    That said, I understand your point. A public repository would certainly
    make collaboration, bug reporting and maintaining the central lists much >easier than exchanging ZIP files by email.

    So perhaps it's time for me to learn. I can't promise I'll become a
    GitHub expert overnight, but I'm certainly willing to give it a try if >that's the best way to keep the project alive and make it easier for
    others to contribute.

    Many thanks again for your suggestions. They are greatly appreciated.



    Sincerely


    I wonder if we need an INN / cleanfeed development committee / committers.

    --
    Ivo Gandolfo

    --
    Member - Liberal International This is doctor@nk.ca Ici doctor@nk.ca
    Yahweh, King & country!Never Satan President Republic!Beware AntiChrist rising! Look at Psalms 14 and 53 on Atheism ; 31 years in the ISP business!
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Tue Jul 14 13:11:23 2026
    From Newsgroup: news.software.nntp

    Il 14/07/2026 04:38, The Doctor ha scritto:

    I wonder if we need an INN / cleanfeed development committee / committers.

    That's an interesting idea, but personally, I think it's still a little
    early for a formal committee... perhaps later :-)

    My first goal is simply to move the project to a public Git repository,
    as Julien suggested, where issues, pull requests and discussions can
    happen naturally.

    In fact, I finally created my very first GitHub repository. (Until a
    couple of days ago, my entire GitHub experience consisted of clicking
    the "Download ZIP" button... so this is a whole new world for me! :-) )

    I also enabled GitHub's account succession feature and asked Julien to
    become my account successor. He kindly accepted... just in case I get
    hit by the proverbial bus one day. *knocks on wood* :-) hopefully, that
    day is still a long way off!

    Actually, I don't see this project as being limited to Cleanfeed
    anymore. I'm also working on modernizing "postfilter", previously
    maintained by Paolo Amoroso (Aioe) the NNRP-side filter for INN, which I expect to release in the next few days. So the idea is gradually
    evolving into a small collection of maintained filters for INN rather
    than a single standalone project.

    My main concern is making sure these projects don't become dormant
    again. That's exactly what happened to the original Cleanfeed and
    postfilter, and I'd really like to avoid repeating that history.

    So, for now, I'd rather keep things simple: one repository, open
    discussions, bug reports, pull requests and contributors. If, over time,
    these projects attract contributors and prove useful to the wider INN community, then having a small group of maintainers or committers would probably be the natural next step. A committee should be the consequence
    of an active project, not its starting point.

    Let's first make the software solid, useful and well tested. If the
    community grows around it, the governance can grow naturally as well.

    Who knows... perhaps in a year's time we'll have enough contributors to justify a proper *INN Filters Project*.

    Or perhaps, if these projects eventually prove useful to the INN
    community, they may even become candidates for inclusion in future INN releases.

    Only time will tell. :-)

    Let's see where this journey takes us. Of course, this is only my
    personal opinion. Julien and Russ have far more experience than I do in maintaining long-lived open-source projects, so I'd be genuinely
    interested in hearing their thoughts as well.


    Sincerely

    --
    Ivo Gandolfo

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Roberto CORRADO@i@secure.corradoroberto.it to news.software.nntp on Tue Jul 14 21:34:33 2026
    From Newsgroup: news.software.nntp

    "Ivo Gandolfo" wrote:
    http://www.bofh.team/software/cleanfeed-2026.zip
    * Numerous bug fixes throughout the Perl code.
    * Improved detection of misplaced binary articles (yEnc, MIME, Base64, > uuencode and related cases).
    * Fixed several long-standing bugs and inconsistencies.
    * Added configuration validation and consistency checks.
    * Added optional peer-based and hierarchy-based policies.
    * Added lightweight operational features (configuration fingerprinting,
    rule inventory, diagnostics, standalone configuration checker and
    article tester).
    * Improved logging and rejection reporting with stable reason codes.
    * Updated the bundled Python helper tools from Python 2 to Python 3 and removed obsolete dependencies.
    * Reorganized and simplified the documentation. The example
    configuration files are now extensively commented and intended to serve
    as the primary and complete reference.
    * General code cleanup and removal of obsolete historical references.
    * Many smaller fixes and maintenance improvements, see README and .md file.
    With the exception of badurls_tool, I've noticed that new configuration directives
    have been implemented starting with the version I'm running on my server...
    Do I need to update right away, or can I wait for new guidelines?
    diff file from my version of cleanfeed: https://news.corradoroberto.it/diff_cleanfeed.html https://news.corradoroberto.it/diff_local.html
    Thank you for all your hard work!
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?Q?Julien_=C3=89LIE?=@iulius@nom-de-mon-site.com.invalid to news.software.nntp on Tue Jul 14 21:46:29 2026
    From Newsgroup: news.software.nntp

    Hi Ivo,

    So... are you trying to trick me into becoming the Cleanfeed maintainer? *sigh* :-)

    :-)
    No obligation of course! I was under the impression you really enjoyed
    taking care of Cleanfeed and improving it. If it interests you and have
    a good time with it, then do not hesitate to take the lead in its
    maintenance.


    Regarding the log messages: if you want to see the additional
    diagnostics generated by my version, you can have a look at one of The Doctor innreport pages:

    https://gallifrey.nk.ca/news-notice.2026.07.12-01.00.00.html

    There are already several examples from the new filter there.

    OK I see.
    I will add an innreport rule so that they do not appear in the reports. innreport currently filters:

    # Cleanfeed status reports
    return 1 if $left =~ /^filter: status/o;
    return 1 if $left =~ /^filter: Reloading bad files/o;
    return 1 if $left =~ /^filter: Saved EMP database/o;
    return 1 if $left =~ /^filter: Restored EMP database/o;

    Adding:

    return 1 if $left =~ /^filter: cleanfeed_event/o;
    return 1 if $left =~ /^filter: metrics articles/o;
    return 1 if $left =~ /^filter: Reloading external cleanfeed
    lists/o;
    return 1 if $left =~ /^filter: Meow/o;

    would probably do the job.
    Do you happen to see other strings that should be discarded in daily
    Usenet reports?


    I suspect your logging configuration simply routes these messages
    somewhere else (perhaps `news.debug` or another syslog destination). It would be interesting to compare our configurations and find out where
    they go.

    I tried to add an invalid regexp, and it was correctly logged to
    news.notice:

    Jul 14 21:17:17 news innd[336979]: filter: Ignoring invalid bad_body
    regex; keeping previous compiled value: Unmatched [ in regex; marked by
    <-- HERE in m/(aeb..|a[ <-- HERE l^:xmt*)/ at /home/news/bin/filter/filter_innd.pl line 2888.


    So it works, and the cleanfeed_event lines will normally also appear as
    they are similarly logged at notice level.
    It is because I haven't received a spam yet. (My testing server does
    not carry many groups. Essentially the fr.* hierarchy.)


    For reference, I'm simply using the standard syslogd on Ubuntu,
    installed by package manager apt and never changed.

    I am using syslog-ng on Debian.


    I've always written software for my own infrastructure and never
    maintained a public open-source project. My day job is as a system administrator, not as a software developer, so this whole "project maintainer" role is rather new to me.

    I understand.
    I am not a software developer either. I just do a bit of development
    for the pleasure on my spare time.
    My day job consists in meetings, mails and PowerPoint ^^ :-)
    Various things in project management, people coordination, functional
    and technical roadmaps, requirements specifications in the domain of
    public transport in Paris.


    That said, I understand your point. A public repository would certainly
    make collaboration, bug reporting and maintaining the central lists much easier than exchanging ZIP files by email.

    Exactly!


    So perhaps it's time for me to learn. I can't promise I'll become a
    GitHub expert overnight, but I'm certainly willing to give it a try if that's the best way to keep the project alive and make it easier for
    others to contribute.

    I hope you'll enjoy it and learn things!
    Sure it will be easier for people to contribute.
    --
    Julien |eLIE

    -2-aLe bonheur, c'est de continuer |a d|-sirer ce que l'on poss|?de.-a-+
    (Saint-Augustin)

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?Q?Julien_=C3=89LIE?=@iulius@nom-de-mon-site.com.invalid to news.software.nntp on Tue Jul 14 21:59:18 2026
    From Newsgroup: news.software.nntp

    Hi Ivo,

    I finally created my very first GitHub repository.

    The first step of a very long journey :)


    Actually, I don't see this project as being limited to Cleanfeed
    anymore. I'm also working on modernizing "postfilter", previously
    maintained by Paolo Amoroso (Aioe) the NNRP-side filter for INN, which I expect to release in the next few days. So the idea is gradually
    evolving into a small collection of maintained filters for INN rather
    than a single standalone project.

    You see, you'll have other very useful things to share!


    So, for now, I'd rather keep things simple: one repository, open discussions, bug reports, pull requests and contributors. If, over time, these projects attract contributors and prove useful to the wider INN community, then having a small group of maintainers or committers would probably be the natural next step. A committee should be the consequence
    of an active project, not its starting point.

    Sounds good.


    Let's first make the software solid, useful and well tested. If the community grows around it, the governance can grow naturally as well.

    Exactly!
    --
    Julien |eLIE

    -2-a|o temps suspends ton vol-a! Et vous heures propices, Suspendez votre
    cours.-a-+ (Alphonse de Lamartine)

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Tue Jul 14 23:28:53 2026
    From Newsgroup: news.software.nntp

    Hi everyone,

    Following the encouraging feedback received over the past few days, I am pleased to announce that the project has now officially moved to GitHub
    under its definitive name:

    cleanfeed-ng

    GitHub repository:

    https://github.com/infybofh/cleanfeed-ng

    The project is intended to be a community-maintained continuation of the historical Cleanfeed project, originally created by Marco d'Itri and
    later maintained by Steve Crook.

    What initially started as a small maintenance update to investigate
    reports of misplaced binary articles in text-only newsgroups quickly
    evolved into a much more extensive review of the entire codebase.

    During this work, numerous long-standing issues were fixed, obsolete
    code was removed, helper tools were modernized, documentation was
    completely rewritten and several new optional features were introduced,
    while always trying to preserve Cleanfeed's original philosophy: remain lightweight, efficient and suitable for busy INN transit servers.

    The feedback received from the community, especially from Julien |eLIE,
    The Doctor and several other news administrators, has been invaluable.
    Testing on production servers helped identify edge cases, refine several
    parts of the filter and improve the overall quality of the project.

    For this reason I decided it was finally time to move the project to a
    public GitHub repository, where development, issue tracking and future contributions can happen much more naturally than exchanging ZIP
    archives by email.

    ====================================================================== Versioning ======================================================================

    Starting with cleanfeed-ng, the project adopts a date-based versioning
    scheme inspired by Ubuntu releases:

    YYYY-MM-VV

    where:

    YYYY = release year
    MM = release month
    VV = incremental release number for that month

    Examples:

    2026-07-01
    2026-07-02
    2026-07-03

    Release Candidates append the "RC" suffix (for example 2026-07-03 RC1),
    while stable releases simply use the version number.

    The goal is to make the age and evolution of every release immediately
    obvious.

    ====================================================================== Development history ======================================================================

    The project has intentionally been developed through small incremental
    public releases.

    2026-07-01 (Alpha 1)

    First public maintenance snapshot.

    This release established the initial modernized baseline, fixed the
    most urgent issues, reorganized the package and completely rewrote
    the documentation and example configuration files.

    2026-07-02 (Alpha 2)

    Second public maintenance snapshot.

    This version introduced additional bug fixes, new configuration
    directives, runtime configuration validation, improved diagnostics,
    new policy mechanisms and several internal improvements.

    More importantly, it became the first version tested on production
    servers other than my own. The feedback received during this phase
    proved extremely valuable for identifying edge cases and improving
    compatibility.

    2026-07-03 RC1

    First public Release Candidate published on GitHub.

    RC1 incorporates the feedback collected during the public Alpha
    testing phase.

    Several internal components have been reviewed and optimized,
    including substantial work on the binary detection engine to improve
    both accuracy and execution speed.

    The codebase has also been simplified by removing obsolete
    compatibility code and historical workarounds that are no longer
    relevant on current INN installations and modern Perl releases.

    Additional profiling and optimization work has been performed with
    the specific goal of minimizing execution time on busy transit
    servers processing very large article volumes.

    The Alpha releases remain available in the GitHub Releases page for
    historical reference and comparison. I removed the oldest version from
    my website. Don't use them, it's now obsolete.

    ====================================================================== Highlights ======================================================================

    * Extensive review of the original Perl code.

    * Numerous bug fixes throughout the filter.

    * Improved detection of misplaced binary articles, including yEnc, MIME,
    Base64, uuencode and related encodings.

    * Runtime configuration validation before activation.

    * Automatic rollback to the last known-good external rule set whenever
    invalid regular expressions are detected.

    * Optional peer-based and hierarchy-based policies.

    * New audit mode allowing administrators to evaluate new rules before
    switching them to reject mode.

    * Stable reject reason codes.

    * Improved diagnostics and logging.

    * Runtime configuration consistency checks.

    * Modernized helper utilities (Python 3).

    * Standalone configuration checker.

    * Standalone article testing tool.

    * Audit log analyzer.

    * Internal code cleanup and performance optimizations.

    * Completely rewritten documentation.

    * Fully commented example configuration files.

    ======================================================================
    Design principles ======================================================================

    cleanfeed-ng follows a few simple principles.

    rCo Performance first.

    The filter executes for every article accepted by innd. Every new
    feature therefore needs to justify its execution cost of CPU and
    RAM and time.

    rCo Safe by default.

    New policy mechanisms are designed to support an audit mode before
    enabling reject mode, allowing administrators to observe the effects
    of configuration changes before enforcing them. In case of errors or
    mistakes, the filter does not disable itself and continues to work.

    rCo Simplicity over complexity.

    The goal is to improve Cleanfeed, not to replace it with a heavyweight
    filtering framework.

    rCo Backwards-friendly configuration.

    Existing installations should continue to work with little or no
    configuration changes, while administrators may gradually adopt the
    new optional features.

    rCo Modern codebase.

    cleanfeed-ng intentionally targets modern Perl versions and current
    INN releases. Obsolete compatibility code has been removed whenever
    doing so simplified the implementation and improved maintainability.
    So this means the old INN versions or old OS not updated cant use CF.

    ======================================================================
    Current status ======================================================================

    The current GitHub release is published as **2026-07-03 RC1**.

    Although it has already been successfully tested on several production
    servers, I would greatly appreciate additional testing before publishing
    the first stable release.

    In particular, I would welcome reports about:

    * false positives;
    * false negatives;
    * performance;
    * portability;
    * unusual articles;
    * suggestions for improvements.

    ====================================================================== Contributions ======================================================================

    Issues, discussions, pull requests and patches are all welcome.

    One of the motivations for moving to GitHub was to make collaboration considerably easier than exchanging ZIP archives by email.

    My intention is not only to keep Cleanfeed actively maintained, but also
    to build a healthy, collaborative project around it.

    Many thanks again to everyone who has already tested the software,
    reviewed the code and provided suggestions.

    Special thanks go to Marco d'Itri, Steve Crook, Paolo Amoroso,
    Julien |eLIE, Russ Allbery, The Doctor, Ray Banana and everyone else who
    has contributed to INN, Cleanfeed and Usenet over the years, this
    version is dedicated to them.


    I hope cleanfeed-ng will prove useful to the wider INN community.



    Sincerely

    --
    Ivo Gandolfo
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Tue Jul 14 23:40:28 2026
    From Newsgroup: news.software.nntp

    Il 14/07/2026 23:28, Ivo Gandolfo ha scritto:
    Hi everyone,

    A little tip for all newsmasters:

    When installing cleanfeed, configure your cleanfeed.local with all rules
    set to "audit". This serves a dual purpose: it doesn't reject the post (accept), but saves the reason for its rejection in your news.notice.
    Keep this configuration for a couple of days, then check your
    news.notice for the various filters it contains, and verify via
    M-Id whether this is actually the case. At this point, you can
    safely set them to "reject" and you will no longer receive that type of
    post.

    This also applies to binary servers, not just text-only servers. The
    rule that filters binaries has been completely rewritten (including the
    issue of too many cross-posts or text-only groups), but I can't
    guarantee it's perfect.

    Any feedback is welcome (if you set logging for the rules in
    cleanfeed.local, everything is saved in news.notice, so you can forward
    it to me for debugging).


    Sincerely
    --
    Ivo Gandolfo
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Tue Jul 14 23:52:51 2026
    From Newsgroup: news.software.nntp

    Il 14/07/2026 21:34, Roberto CORRADO ha scritto:
    With the exception of badurls_tool, I've noticed that new configuration directives
    have been implemented starting with the version I'm running on my server... Do I need to update right away, or can I wait for new guidelines?

    diff file from my version of cleanfeed: https://news.corradoroberto.it/diff_cleanfeed.html https://news.corradoroberto.it/diff_local.html

    Thank you for all your hard work!

    Ciao Roberto,

    you see <11369ml$1couf$1@paganini.bofh.team> I have released a new
    version (much more stable and debugged). That version you downloaded
    it's old, buggy and superseded.

    cleanfeed-ng maintains backward compatibility with older config files
    and uses defaults if it can't find the parameters in cleanfeed.local.
    So you can just put "cleanfeed" perl script on your installation,
    restart your INN and all work fine

    My suggestion is to download the package from github, read all the
    READMEs and docs (I've worked hard to ensure everything is commented
    properly and is understandable even for Perl newbies, so they can
    understand the individual parameters and compile regex in Perl).

    You'll find everything you need in docs/, samples/, and .md files. Then
    try merging with what you already have. However, I should point out that
    if you're using Steve's files, they still contain things that have been
    dead and buried for ages.

    It's up to you whether you start clean or attempt the merge your cleanfeed.local, but I don't recommend it.



    Sincerely
    --
    Ivo Gandolfo
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Wed Jul 15 00:52:53 2026
    From Newsgroup: news.software.nntp

    Il 14/07/2026 21:46, Julien |eLIE ha scritto:

    OK I see.
    I will add an innreport rule so that they do not appear in the reports. innreport currently filters:

    [...]

    would probably do the job.
    Do you happen to see other strings that should be discarded in daily
    Usenet reports?

    Why discard or hide them? Let's give them their own section instead!
    (I know the Perl and Python filter sections already exist, but I have to
    feed my ego somehow, right? :P)

    See:

    https://www.bofh.team/software/cleanfeed-ng-innreport-patch.zip

    The ZIP archive contains:

    * a text file listing all messages currently generated by cleanfeed-ng,
    grouped by category and severity;
    * the patch itself;
    * the two already-patched files, ready for easier review and testing;

    I prepared the patch against the current innreport files from the INN
    2.8 development branch.

    The new section provides:

    * a total count of cleanfeed-ng events;
    * counters grouped by action and rule;
    * a configurable number of representative event samples.

    The number of displayed samples can be changed in
    innreport-display.conf, for example to 5, 10 or 20 entries.

    Routine housekeeping messages are removed from the "Unknown entries"
    section, while configuration warnings and actual errors remain visible,
    as they may require administrator attention.

    I tried to make the message inventory exhaustive for the current
    release, although naturally new messages may be added as cleanfeed-ng
    evolves.

    The Perl module passes its syntax check, and I tested the parser with
    real cleanfeed_event lines. I have not yet tested the patch through a complete end-to-end innreport HTML generation, so please consider it an initial proposal for review and testing rather than a final
    upstream-ready patch.

    Happy testing! :-)


    I understand.
    I am not a software developer either. I just do a bit of development
    for the pleasure on my spare time.
    My day job consists in meetings, mails and PowerPoint ^^ :-)
    Various things in project management, people coordination, functional
    and technical roadmaps, requirements specifications in the domain of
    public transport in Paris.

    Ainsi, la prochaine fois que je serai |a Paris, je saurai |a qui demander
    quel m|-tro prendre pour aller chercher un pain au chocolat et un bon
    verre de vin. :D


    Sincerely,

    --
    Ivo Gandolfo
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?Q?Julien_=C3=89LIE?=@iulius@nom-de-mon-site.com.invalid to news.software.nntp on Wed Jul 15 22:55:53 2026
    From Newsgroup: news.software.nntp

    Hi Ivo,

    Following the encouraging feedback received over the past few days, I am pleased to announce that the project has now officially moved to GitHub
    under its definitive name:

    -a-a-a cleanfeed-ng
    -a-a-a https://github.com/infybofh/cleanfeed-ng

    That's very great news! Thanks for your involvement!
    Even with a modern banner to advertise it :)


    The project is intended to be a community-maintained continuation of the historical Cleanfeed project, originally created by Marco d'Itri and
    later maintained by Steve Crook.

    "Cleanfeed was originally developed by Jeremy Nixon who maintained it
    until 1998. At that time, futher developments were taken on by Marco
    d'Itri who produced the last release in August 2001 with a beta version following in May 2002. [Then Steve Crook] produced a couple of updates
    in December 2007."


    What initially started as a small maintenance update to investigate
    reports of misplaced binary articles in text-only newsgroups quickly
    evolved into a much more extensive review of the entire codebase.

    The beginning of An Unexpected Journey :)


    Starting with cleanfeed-ng, the project adopts a date-based versioning
    scheme inspired by Ubuntu releases:

    -a-a-a YYYY-MM-VV

    where:

    -a-a-a YYYY-a = release year
    -a-a-a MM-a-a-a = release month
    -a-a-a VV-a-a-a = incremental release number for that month

    Examples:

    -a-a-a 2026-07-01
    -a-a-a 2026-07-02
    -a-a-a 2026-07-03

    Release Candidates append the "RC" suffix (for example 2026-07-03 RC1),
    while stable releases simply use the version number.

    The goal is to make the age and evolution of every release immediately obvious.

    If I may say, 2026-07-01 looks a bit confusing to my mind; I understand
    July 1st. Wouldn't a naming closer to Ubuntu releases (as you mention
    them) be less confusing?
    For example "cleanfeed-ng 26.07.1" etc. "cleanfeed-ng 26.07.3 RC1"?


    -a-a-a The codebase has also been simplified by removing obsolete
    -a-a-a compatibility code and historical workarounds that are no longer
    -a-a-a relevant on current INN installations and modern Perl releases.

    I'm wondering whether Cleanfeed is still used today on other news
    servers than INN. The original version used to work with Diablo (and
    probably other news servers) but I do not know whether Marco's and
    Steve's version still work with Diablo.
    If anyone knows? (DNews, Diablo...)

    Just a remark in case some other admins of servers other than INN would
    be interested?
    If nobody cares any longer, then let's go with INN only. It will be
    easier to maintain and test!
    --
    Julien |eLIE

    -2-arCo Il est temps d'aller d|-guster une bonne cervoise de derri|?re les
    fagots-a!
    rCo Accompagn|-es de sangliers dodus r||tis sur ces m|-mes fagots, bien
    s|+r-a!-a-+ (Ast|-rix)

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?Q?Julien_=C3=89LIE?=@iulius@nom-de-mon-site.com.invalid to news.software.nntp on Wed Jul 15 23:03:06 2026
    From Newsgroup: news.software.nntp

    Hi Ivo,

    Do you happen to see other strings that should be discarded in daily
    Usenet reports?

    Why discard or hide them?-a Let's give them their own section instead!

    It is another possibility, indeed!


    https://www.bofh.team/software/cleanfeed-ng-innreport-patch.zip

    The new section provides:

    * a total count of cleanfeed-ng events;
    * counters grouped by action and rule;
    * a configurable number of representative event samples.

    Oh, many thanks for it!
    I'll have a look soon.


    Ainsi, la prochaine fois que je serai |a Paris, je saurai |a qui demander quel m|-tro prendre pour aller chercher un pain au chocolat et un bon
    verre de vin. :D

    Ce sera avec grand plaisir ! Je vois que tu es amateur de bonnes
    p|otisseries et de vignobles :) J'appr|-cie bien |-galement un bon Chianti
    ou Valpolicella !
    --
    Julien |eLIE

    -2-aMy wife and I were happy for twenty years. Then we met.-a-+ (Henny
    Youngman)

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Riley@riley813058@gmail.invalid to news.software.nntp on Thu Jul 16 11:24:04 2026
    From Newsgroup: news.software.nntp

    Ivo Gandolfo wrote:

    * Improved detection of misplaced binary articles, including yEnc, MIME,
    Base64, uuencode and related encodings.

    Is the update working as expected? The following misplaced binaries
    showed up in my news reader.

    infos obtained via telnet -
    group rec.food.cooking
    xover 3193957-3193966
    multiple Message-ID: <18c2acd8471aeef7$1006182$260416$60d9188e@news.vipernews.com> <18c2acd85dfad296$1006190$260416$60d9188e@news.vipernews.com> <18c2acd88284e700$1006201$260416$60d9188e@news.vipernews.com> <18c2acd9240c4a79$1013374$2346$66d91e8e@news.vipernews.com> <18c2acd96f15c2c3$1006277$260416$60d9188e@news.vipernews.com> <18c2acde3af73622$1006680$260416$60d9188e@news.vipernews.com> <18c2acdeae998102$1013836$2346$66d91e8e@news.vipernews.com> <18c2acded14a3dcf$1013847$2346$66d91e8e@news.vipernews.com> <18c2acda6b4bebf2$1013480$2346$66d91e8e@news.vipernews.com> <18c2acd8c35ddc40$1006221$260416$60d9188e@news.vipernews.com>

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Thu Jul 16 15:54:34 2026
    From Newsgroup: news.software.nntp

    Il 16/07/2026 13:24, Riley ha scritto:
    Ivo Gandolfo wrote:

    * Improved detection of misplaced binary articles, including yEnc, MIME,
    Base64, uuencode and related encodings.

    Is the update working as expected? The following misplaced binaries
    showed up in my news reader.

    If you're referring to articles on paganini, yes, I'm aware of that.
    Since it's the only server I have, it's also my "test" server (I'll have
    to make one sooner or later), so when I'm programming or testing the
    filter might shut down, and any article might get through.

    I'll make it up to you, I promise :)


    Sincerely
    --
    Ivo Gandolfo
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Riley@riley813058@gmail.invalid to news.software.nntp on Thu Jul 16 15:47:51 2026
    From Newsgroup: news.software.nntp

    Ivo Gandolfo wrote:

    If you're referring to articles on paganini, yes, I'm aware of that.
    Since it's the only server I have, it's also my "test" server (I'll have
    to make one sooner or later), so when I'm programming or testing the
    filter might shut down, and any article might get through.

    Okay! paganini.bofh.team is working as expected. Thanks for working
    on and updating cleanfeed. We lowly users appreciate it.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Thu Jul 16 20:22:08 2026
    From Newsgroup: news.software.nntp

    Il 15/07/2026 22:55, Julien |eLIE ha scritto:

    "Cleanfeed was originally developed by Jeremy Nixon who maintained it
    until 1998.-a At that time, futher developments were taken on by Marco d'Itri who produced the last release in August 2001 with a beta version following in May 2002.-a [Then Steve Crook] produced a couple of updates
    in December 2007."

    *scribb*scribb*



    If I may say, 2026-07-01 looks a bit confusing to my mind; I understand
    July 1st.-a Wouldn't a naming closer to Ubuntu releases (as you mention them) be less confusing?
    For example "cleanfeed-ng 26.07.1" etc. "cleanfeed-ng 26.07.3 RC1"?

    *scribb*scribb* updated on -rc2 on github, with some improvement :)


    Just a remark in case some other admins of servers other than INN would
    be interested?
    If nobody cares any longer, then let's go with INN only.-a It will be
    easier to maintain and test!

    I've been doing some research on it, and here are the results:


    * DNews *: Closed sources, paid license, classified as "Abandonware" by
    the same company that sells it, and I think it's pointless to develop on
    it, and I doubt anyone still has a valid license, and it has so many
    CVEs that it would make Microslop pale.
    Looking at the files, it would appear to have been developed until 2004.



    * Diablo *: The last stable release (5.1) from the official maintainer
    was released in 2007. It was unofficially patched by engineer Miquel van Smoorenburg, who worked for XS4ALL (a Dutch provider) until 2009.
    Version 6.0 from 2013 (I think it only includes XS4ALL patches and small changes, probably released by the same engineer) is still in
    circulation, dating back to 2017, this version patched seems in use on
    XS4ALL servers. Too many years have passed without further development,
    even though the official website continues to take snapshots every day,
    but no changes have been made. I think this too can be considered "abandonware" if no one is thinking of continuing development. I
    checked, and it also still has some active CVEs (although they don't
    seem too dangerous, but you never know).
    Some newsmaster here use them (Jesse Bluewordhosting I know) and alot of
    USP (Abavia, XSNews, etc) as transit server, see:

    news@viotti ~ $ telnet feed-out.ams.abavia.com 119
    Trying 2001:67c:174:101:ff:67:202:5...
    Connected to feed-out.ams.abavia.com.
    Escape character is '^]'.
    200 abo002.abavia.com NNTP Service Ready - Peering requests to peering@abavia.com (DIABLO 1.0-1.3.4)
    quit
    205 abo002.abavia.com closing channel.
    Connection closed by foreign host.
    news@viotti ~ $ telnet usenet.blueworldhosting.com 119
    Trying 76.235.89.209...
    Connected to usenet.blueworldhosting.com.
    Escape character is '^]'.
    200 diablo2.usenet.blueworldhosting.com Welcome, you are cleared for
    liftoff - usenet@blueworldhosting.com (DIABLO 6-20230531-01-JR)
    quit
    205 diablo2.usenet.blueworldhosting.com closing channel.
    Connection closed by foreign host.

    I think Jesse compiled the version himself, and USP use latest "stable
    and ancient" version.



    * Highwings Cyclone and Typhoon *: NNTP software (proxy reader and
    transit server) developed by Highwings Media, closed source and under a
    pay license, and used by it and all its USP resellers. Cleanfeed
    probably supported this type of server, but reading the manual,
    unfortunately, reveals that external Perl filters are barely (if at all) supported. It's full-blown abandonware. Don't laugh: it doesn't even
    support IPv6, and the latest release is from 2010 and requires Linux
    Kernel 2.6 (!!!) or Solaris 10 (!!!!!!). I wouldn't install a Solaris
    server today even if they showered me with gold.



    *NNTPSwitch*: It's an NNTP proxy, not an NNTP server (it uses INN or
    Diablo servers as a backend for the articles, see the manual itself).
    Starting out as closed-source, after NVE news-service.com's court defeat against the RIAA, one of the developers released the sources. Some USPs
    (and their resellers) still use it, but I think they've continued
    developing in-house, in fact, some support IPv6 and have other features
    that the version I found doesn't have. Regardless, it can be considered abandonware or closed-source, but no longer officially developed.



    Leafnode or similar: These aren't considered true NNTP servers, so I'm
    not sure if it makes sense to talk about them.



    I have the sources for all of these (unless otherwise specified) or at
    least the installers (for closed-source ones).

    This is what I've found so far, and paradoxically, the only server still actively supported is INN2, so I don't know if it's actually worth the
    effort to "support" something that isn't even actively maintained
    anymore. However, if someone were to revamp Diablo and guarantee support
    for Perl filters, I don't see why it couldn't be done. However, if Jesse
    could read and tell us if he uses upstream filters, maybe we could work
    on it.

    I haven't found any other NNTP servers. If anyone has more up-to-date information, please share it.


    Sincerely
    --
    Ivo Gandolfo

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Kevin Bowling@kevin.bowling@kev009.com to news.software.nntp on Thu Jul 16 14:12:07 2026
    From Newsgroup: news.software.nntp

    On 7/16/26 13:36, Jesse Rehmer wrote:
    On Jul 16, 2026 at 1:22:08rC>PM CDT, "Ivo Gandolfo" <usenet@bofh.team> wrote:

    * Diablo *: The last stable release (5.1) from the official maintainer
    was released in 2007. It was unofficially patched by engineer Miquel van
    Smoorenburg, who worked for XS4ALL (a Dutch provider) until 2009.
    Version 6.0 from 2013 (I think it only includes XS4ALL patches and small
    changes, probably released by the same engineer) is still in
    circulation, dating back to 2017, this version patched seems in use on
    XS4ALL servers. Too many years have passed without further development,
    even though the official website continues to take snapshots every day,
    but no changes have been made. I think this too can be considered
    "abandonware" if no one is thinking of continuing development. I
    checked, and it also still has some active CVEs (although they don't
    seem too dangerous, but you never know).
    Some newsmaster here use them (Jesse Bluewordhosting I know) and alot of
    USP (Abavia, XSNews, etc) as transit server, see:

    I think Jesse compiled the version himself, and USP use latest "stable
    and ancient" version.

    Diablo isn't publicly maintained, but the commercial NSPs seem to have furthered development/fixed bugs, but no contribution has been made public (that I'm aware of). Which is really sad, because it is a beast in terms of throughput capabilities compared to INN.

    * Highwings Cyclone and Typhoon *: NNTP software (proxy reader and
    transit server) developed by Highwings Media, closed source and under a
    pay license, and used by it and all its USP resellers. Cleanfeed
    probably supported this type of server, but reading the manual,
    unfortunately, reveals that external Perl filters are barely (if at all)
    supported. It's full-blown abandonware. Don't laugh: it doesn't even
    support IPv6, and the latest release is from 2010 and requires Linux
    Kernel 2.6 (!!!) or Solaris 10 (!!!!!!). I wouldn't install a Solaris
    server today even if they showered me with gold.

    Highwinds doesn't publish any current information about Cyclone or Typhoon, but I believe it is still actively maintained, but is commercial only. (Also, don't be afraid of Solaris, it's quite a nice operating environment IMHO.) I'm
    currently using OmniOS, an illumos-based distribution, which is a fork from OpenSolaris.

    *NNTPSwitch*: It's an NNTP proxy, not an NNTP server (it uses INN or
    Diablo servers as a backend for the articles, see the manual itself).
    Starting out as closed-source, after NVE news-service.com's court defeat
    against the RIAA, one of the developers released the sources. Some USPs
    (and their resellers) still use it, but I think they've continued
    developing in-house, in fact, some support IPv6 and have other features
    that the version I found doesn't have. Regardless, it can be considered
    abandonware or closed-source, but no longer officially developed.

    I used NNTPSwitch for several years when it would compile on RHEL 5/6. I really enjoyed it and its features, but was unable to successfully compile on newer versions of Linux. I would *love* to see someone pick this project up.

    However, if Jesse could read and tell us if he uses upstream filters, maybe we
    could work
    on it.

    Steve Crook's version of Cleanfeed works with Diablo. I'm not currently using it on my Diablo transit server, but did at one time.

    I'd be happy to setup a Diablo instance and give your filter a try.

    I was looking into these servers a bit to see how they worked, and one interesting thing in Typhoon and Diablo wrt CleanFeed: both daemons
    share the same filter ABI, although Diablo doesn't have the FastFilter
    shm option. Typhoon is heavily threaded, per connection and some helper pools, so filter and auth run in helper pools so you don't have to wait
    for exec perl every time.

    extern int filterapi_init(int shm_key, int size);
    extern const char * filterapi_fetch(unsigned long offset, size_t *len);
    extern void filterapi_destroy(void);

    Wire protocol:
    1. Daemon side
    - socketpair(AF_UNIX) + shmget(10 MiB) + `fork()` +
    execve(FilterProgram) per child.
    - Sends 4-line handshake over the socket:
    Version = 2.0
    Mode = FastFilter
    Key = <shm key>
    Length = 10485760
    - Per article: writes <offset> <msgid>\r\n to child stdin
    (signal: new article waiting at that shm offset).
    - Reads back 335 <msgid>\r\n (accept) or 435 <msgid>\r\n (reject).
    2. Filter side (Perl or C using the SDK):
    - filterapi_init(key, size) raA shmget(key, size, 0400) + shmat
    (read-only attach).
    - Reads <offset> <msgid> from stdin.
    - filterapi_fetch(offset, &len) - reads 4-byte LE length prefix at
    shm + offset`, returns pointer to shm + offset + 4.
    - Decides accept/reject.
    - Writes verdict line to stdout.

    I guess cleanfeed could regrow that support. Not sure it matters on inn (currently) because perl is embedded and single process/thread but
    something to consider if that changes.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Fri Jul 17 01:25:05 2026
    From Newsgroup: news.software.nntp

    Il 16/07/2026 22:36, Jesse Rehmer ha scritto:
    Diablo isn't publicly maintained, but the commercial NSPs seem to have furthered development/fixed bugs, but no contribution has been made public (that I'm aware of). Which is really sad, because it is a beast in terms of throughput capabilities compared to INN.

    Only a few USPs have done so. Many are using older versions without ever having touched them (I have email confirm of this).

    Highwinds doesn't publish any current information about Cyclone or Typhoon, but I believe it is still actively maintained, but is commercial only. (Also, don't be afraid of Solaris, it's quite a nice operating environment IMHO.) I'm
    currently using OmniOS, an illumos-based distribution, which is a fork from OpenSolaris.

    I'm in contact with HW, and that's their latest version on his website, they've never touched it again. He also confirmed to me that they're
    stuck with those versions. You understand why I asked HW for this,
    reading follow.

    I used NNTPSwitch for several years when it would compile on RHEL 5/6. I really enjoyed it and its features, but was unable to successfully compile on newer versions of Linux. I would *love* to see someone pick this project up.


    Then you'll celebrate reading what I'm about to write. I took that
    software and basically rewrote it (because I have a project in mind).
    The public version is 0.12. I'm up to 16.9.0-rc5. You can imagine how
    much I worked on it (2 years and half and counting).
    To get an idea, check out this: https://www.bofh.team/software/README_NNTPbofh.md
    I won't release the sources for now, but I can provide you with a
    compiled copy for Linux. If you prefer BSD, it's only compatible with
    FreeBSD, but I need to install a VM and compile it for you, so you'll
    have to give me a few days (and probably need some changes in the code,
    I work only on linux) if you want to be a betatester :)


    I'd be happy to setup a Diablo instance and give your filter a try.

    Thanks :) Or if you prefer you can send me your compiled copy of Diablo,
    and I can do the tests locally (preferably Linux, but if you only have
    BSD it's fine too).


    Sincerely
    --
    Ivo Gandolfo
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Fri Jul 17 01:42:41 2026
    From Newsgroup: news.software.nntp

    Il 16/07/2026 23:12, Kevin Bowling ha scritto:

    I was looking into these servers a bit to see how they worked, and one interesting thing in Typhoon and Diablo wrt CleanFeed:-a both daemons
    share the same filter ABI, although Diablo doesn't have the FastFilter
    shm option.-a Typhoon is heavily threaded, per connection and some helper pools, so filter and auth run in helper pools so you don't have to wait
    for exec perl every time.

    Al lot of difference between INN and that.

    I guess cleanfeed could regrow that support.-a Not sure it matters on inn (currently) because perl is embedded and single process/thread but
    something to consider if that changes.


    this is much more interesting than I initially expected.

    If Diablo and Typhoon really share that FastFilter ABI, then supporting
    them does not look like a complete port of cleanfeed-ng. The filtering
    engine itself only needs an article, its headers and body, and must
    eventually produce an accept or reject decision.

    The main difference is therefore not the filtering logic, but the host
    adapter:

    * INN embeds Perl inside innd and directly provides the article data and
    INN logging functions;
    * FastFilter runs as an external persistent process, retrieves the raw
    article from shared memory and returns a 335 or 435 response.

    A possible design would be to keep one common cleanfeed-ng engine and
    provide two adapters:

    INN adapter
    FastFilter adapter for Diablo/Typhoon

    The FastFilter adapter would handle the handshake, shared-memory access,
    raw article parsing, logging and conversion of the cleanfeed-ng result
    into the 335/435 wire response.

    There are a few details that still need investigation.

    Does the FastFilter interface expose the identity of the incoming
    peer/feed, or only the raw article and Message-ID?

    That matters because cleanfeed-ng has optional peer-based policies.
    Audit mode can easily be implemented by logging a finding and returning
    335, but quarantine may not have a direct equivalent if the ABI only
    supports accept and reject.

    Another point is worker state. If Diablo or Typhoon runs several filter helpers, each process would have its own caches, counters, EMP state and rate-limit data. Local caches are fine, but global state and persistent
    files would need to be handled carefully without adding expensive IPC to
    the article path.

    If the Diablo adapter works cleanly, Typhoon compatibility may follow
    from the shared ABI, although it should still be tested on a real
    installation before being documented as supported, but in one case it's
    need to pay, and I don't think it's necessary to spend time and money on
    that, HW don't filter anything.



    Sincerely,

    --
    Ivo Gandolfo
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Kevin Bowling@kevin.bowling@kev009.com to news.software.nntp on Thu Jul 16 22:54:41 2026
    From Newsgroup: news.software.nntp

    On 7/16/26 16:42, Ivo Gandolfo wrote:
    Il 16/07/2026 23:12, Kevin Bowling ha scritto:

    I was looking into these servers a bit to see how they worked, and one
    interesting thing in Typhoon and Diablo wrt CleanFeed:-a both daemons
    share the same filter ABI, although Diablo doesn't have the FastFilter
    shm option.-a Typhoon is heavily threaded, per connection and some
    helper pools, so filter and auth run in helper pools so you don't have
    to wait for exec perl every time.

    Al lot of difference between INN and that.

    I guess cleanfeed could regrow that support.-a Not sure it matters on
    inn (currently) because perl is embedded and single process/thread but
    something to consider if that changes.


    this is much more interesting than I initially expected.

    If Diablo and Typhoon really share that FastFilter ABI, then supporting
    them does not look like a complete port of cleanfeed-ng.-a The filtering engine itself only needs an article, its headers and body, and must eventually produce an accept or reject decision.

    Fair warning that I've never used Diablo or Typhoon, I only was looking
    at them to see if they had any interesting tricks.

    My understanding is Diablo _copied_ Typhoon's (or whatever other product
    name it used) API because that was established, and cleanfeed actually supported this back in the day. Looking back at old cleanfeed code, it doesn't look like it had any special FastFilter code, so it must have
    been a shim that Typhoon would provide (and Diablo could easily
    implement if people still work on it -- the exec for a perl script per
    article is expensive compared to Typhoon).


    The main difference is therefore not the filtering logic, but the host adapter:

    * INN embeds Perl inside innd and directly provides the article data and
    -a INN logging functions;
    * FastFilter runs as an external persistent process, retrieves the raw
    -a article from shared memory and returns a 335 or 435 response.

    It looks like it just passes the full message so only what is in headers
    and body: https://github.com/jpmens/diablo/blob/master/filter/diab-filter.c

    A possible design would be to keep one common cleanfeed-ng engine and
    provide two adapters:

    -a-a-a INN adapter
    -a-a-a FastFilter adapter for Diablo/Typhoon

    The FastFilter adapter would handle the handshake, shared-memory access,
    raw article parsing, logging and conversion of the cleanfeed-ng result
    into the 335/435 wire response.

    There are a few details that still need investigation.

    Does the FastFilter interface expose the identity of the incoming
    peer/feed, or only the raw article and Message-ID?

    That matters because cleanfeed-ng has optional peer-based policies.
    Audit mode can easily be implemented by logging a finding and returning
    335, but quarantine may not have a direct equivalent if the ABI only
    supports accept and reject.

    Another point is worker state.-a If Diablo or Typhoon runs several filter helpers, each process would have its own caches, counters, EMP state and rate-limit data.-a Local caches are fine, but global state and persistent files would need to be handled carefully without adding expensive IPC to
    the article path.

    If the Diablo adapter works cleanly, Typhoon compatibility may follow
    from the shared ABI, although it should still be tested on a real installation before being documented as supported, but in one case it's
    need to pay, and I don't think it's necessary to spend time and money on that, HW don't filter anything.



    Sincerely,

    --
    Ivo Gandolfo

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Fri Jul 24 21:13:05 2026
    From Newsgroup: news.software.nntp

    Il 12/07/2026 16:03, Ivo Gandolfo ha scritto:
    Hi everyone,

    Hello again,

    a small update about cleanfeed-ng after last patch.

    The repository has now been public for a little over a week:

    https://github.com/infybofh/cleanfeed-ng

    According to GitHub's traffic statistics for the last 14 days, it has
    received:

    72 repository clones
    46 unique cloners
    283 page views

    There was also a new peak on July 23, with 19 clones from 14 unique
    cloners whn I released the latest patch.

    For a project as specialized as a Perl transit filter for INN, these
    numbers are honestly much higher than I expected.

    There is, however, a slightly worrying discrepancy:

    quite a few clones,
    almost no feedback.

    Apart from the invaluable testing and comments from Julien, The Doctor
    and a few other people, I have very little idea whether the people who
    cloned the repository:

    installed it successfully;
    only looked at the source;
    found it unusable;
    are running it without problems;
    encountered false positives;
    encountered false negatives;
    or silently threw it into /dev/null.

    So, before begging for feedback, here are some production results from
    the RC2 series.

    Production test 1: large backfill server ----------------------------------------

    The first server is processing a large historical backfill containing
    both text and binary traffic.

    During one complete 24-hour period:

    Articles passed to the Perl filter: 4,726,375
    Average processing rate: 54.70 articles/second
    Cleanfeed average processing time: 8.67 ms/article
    Lowest measured hourly average: 7.86 ms/article
    Highest measured hourly average: 9.52 ms/article

    Cleanfeed verdicts during the same period:

    Rejected articles: 547,158
    Structured cleanfeed_event reject lines: 547,158
    INN rejecting[perl] lines: 547,158

    The three numbers matched exactly. No duplicated reject events and no
    missing reject events were found.

    There were also no occurrences of:

    filter_art died
    SERVER perl filtering disabled
    cleanfeed-ng fatal
    incomplete initialization
    uninitialized-value errors
    file descriptor exhaustion
    CNFS errors
    overview errors
    history errors

    The server was operating near its ingestion limit. The measured time
    was divided approximately as follows:

    Cleanfeed Perl filtering: 47.38%
    INN history operations: 47.19%
    Overview processing: 3.20%
    Everything else: 2.23%

    Article storage itself accounted for only about 0.21% of the measured processing time, so the storage subsystem was not the bottleneck.

    The backfill averaged about 4.7 million articles per day while applying
    the complete filter.

    Production test 2: normal text-only server ------------------------------------------

    The second server has much lighter, ordinary transit traffic and is
    configured to reject binary payloads categorically.

    During the measured day:

    Calls to filter_art: 7,424
    Reject verdicts: 1,184
    Audit events: 98

    For ordinary text traffic:

    Weighted average processing time: 2.79 ms/article
    Median processing time: 2.77 ms/article
    Approximate 95th percentile: 6.00 ms/article

    A batch containing large binary articles took substantially longer,
    typically about 80-100 ms per article, because the bodies had to be
    parsed and classified.

    Even during the worst ten-minute binary burst, Cleanfeed consumed only
    about 5.4% of the interval and the INN server remained approximately
    92.6% idle.

    Across the complete period, the server was about 99.5% idle.

    Again, no Cleanfeed crashes or automatic disabling of the Perl filter
    were observed.

    Problems found through production testing -----------------------------------------

    Real-world testing has already uncovered and fixed several issues,
    including:

    correct multipart yEnc size validation;
    restoration of the historical allexclude behaviour;
    prevention of duplicate policy reject events;
    correct rule identifiers for policy rejects;
    protection against an undefined MID history queue;
    explicit logging when the embedded Perl version is too old;
    correct statistics generation immediately after a filter reload;
    correct accounting for articles accepted through allexclude;
    a dedicated binary.image reason code;
    warnings when INN has dontrejectfiltered enabled;
    documentation for CLEANFEED_CONFIG_DIR;
    automatic checking and preparation of statistics and metrics paths.

    INN's innreport support and documentation have also been updated to
    recognize cleanfeed-ng events.



    And now the shameless request
    -----------------------------

    Please send feedback.

    Seriously. Even a one-line reply such as:

    "Installed on INN 2.x / Perl 5.x / operating system X.
    Running for N days. No problems found."

    would be extremely useful.

    I am especially interested in:

    installation or migration problems;
    INN and Perl versions being used;
    text-only versus binary-capable servers;
    false positives;
    false negatives;
    performance under real traffic;
    confusing configuration options;
    missing documentation;
    unusual MIME or yEnc articles;
    behaviour on systems other than Debian or Ubuntu;
    successful installations with no issues at all.

    A minimal report could simply be:

    Operating system:
    INN version:
    Perl version:
    cleanfeed-ng version:
    Server type: text-only / binary / mixed
    Time in production:
    Result:
    Problems or suspicious behaviour:

    Please do not assume that silence means I know everything is working.

    At the moment I have considerably more clone statistics than human
    reports, which is a slightly unsettling way to maintain a transit
    filter.

    The RC2 series is now running successfully on real production servers.
    If no further discrepancies appear during the next few days, I intend
    to promote it to the first non-RC cleanfeed-ng release.

    So please: if you cloned it, installed it, tested it, disliked it,
    removed it, or merely discovered that one of my comments contains a
    typo, tell me.

    Positive feedback is useful.
    Negative feedback is more useful.
    Bug reports are extremely useful.
    Even "it works here" is useful.

    Silence is the only result from which I cannot learn anything.

    Thanks in advance to everyone who has already tested it, and especially
    to those who have taken the time to inspect logs and report actual results.



    Sincerely,

    --
    Ivo Gandolfo
    bofh.team
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Kevin Bowling@kevin.bowling@kev009.com to news.software.nntp on Fri Jul 24 14:51:02 2026
    From Newsgroup: news.software.nntp

    On 7/24/26 12:13, Ivo Gandolfo wrote:
    Il 12/07/2026 16:03, Ivo Gandolfo ha scritto:
    Hi everyone,

    Hello again,

    a small update about cleanfeed-ng after last patch.

    The repository has now been public for a little over a week:

    -a-a-a https://github.com/infybofh/cleanfeed-ng

    According to GitHub's traffic statistics for the last 14 days, it has received:

    -a-a-a 72 repository clones
    -a-a-a 46 unique cloners
    -a-a-a 283 page views

    There was also a new peak on July 23, with 19 clones from 14 unique
    cloners whn I released the latest patch.

    For a project as specialized as a Perl transit filter for INN, these
    numbers are honestly much higher than I expected.

    There is, however, a slightly worrying discrepancy:

    -a-a-a quite a few clones,
    -a-a-a almost no feedback.

    Apart from the invaluable testing and comments from Julien, The Doctor
    and a few other people, I have very little idea whether the people who
    cloned the repository:

    -a-a-a installed it successfully;
    -a-a-a only looked at the source;
    -a-a-a found it unusable;
    -a-a-a are running it without problems;
    -a-a-a encountered false positives;
    -a-a-a encountered false negatives;
    -a-a-a or silently threw it into /dev/null.

    I haven't had time to consider it, but I do plan to package it for
    FreeBSD ports once you hit a stable version.

    Given that it is going well, one thought in the back of my mind is maybe dropping the '-ng' suffix and taking over 'cleanfeed', even if we can't
    get ahold of Steve? There's probably no reason to sustain both in a distribution as long as you ship a reasonable default rule set.


    So, before begging for feedback, here are some production results from
    the RC2 series.

    Production test 1: large backfill server ----------------------------------------

    The first server is processing a large historical backfill containing
    both text and binary traffic.

    During one complete 24-hour period:

    -a-a-a Articles passed to the Perl filter:-a-a-a-a 4,726,375
    -a-a-a Average processing rate:-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a 54.70 articles/second
    -a-a-a Cleanfeed average processing time:-a-a-a-a-a-a-a-a-a 8.67 ms/article
    -a-a-a Lowest measured hourly average:-a-a-a-a-a-a-a-a-a-a-a-a-a 7.86 ms/article
    -a-a-a Highest measured hourly average:-a-a-a-a-a-a-a-a-a-a-a-a 9.52 ms/article

    Cleanfeed verdicts during the same period:

    -a-a-a Rejected articles:-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a 547,158
    -a-a-a Structured cleanfeed_event reject lines:-a-a 547,158
    -a-a-a INN rejecting[perl] lines:-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a 547,158

    The three numbers matched exactly.-a No duplicated reject events and no missing reject events were found.

    There were also no occurrences of:

    -a-a-a filter_art died
    -a-a-a SERVER perl filtering disabled
    -a-a-a cleanfeed-ng fatal
    -a-a-a incomplete initialization
    -a-a-a uninitialized-value errors
    -a-a-a file descriptor exhaustion
    -a-a-a CNFS errors
    -a-a-a overview errors
    -a-a-a history errors

    The server was operating near its ingestion limit.-a The measured time
    was divided approximately as follows:

    -a-a-a Cleanfeed Perl filtering:-a-a-a-a-a-a 47.38%
    -a-a-a INN history operations:-a-a-a-a-a-a-a-a 47.19%
    -a-a-a Overview processing:-a-a-a-a-a-a-a-a-a-a-a-a 3.20%
    -a-a-a Everything else:-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a 2.23%

    Article storage itself accounted for only about 0.21% of the measured processing time, so the storage subsystem was not the bottleneck.

    The backfill averaged about 4.7 million articles per day while applying
    the complete filter.

    Production test 2: normal text-only server ------------------------------------------

    The second server has much lighter, ordinary transit traffic and is configured to reject binary payloads categorically.

    During the measured day:

    -a-a-a Calls to filter_art:-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a 7,424
    -a-a-a Reject verdicts:-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a 1,184
    -a-a-a Audit events:-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a 98

    For ordinary text traffic:

    -a-a-a Weighted average processing time:-a-a-a-a 2.79 ms/article
    -a-a-a Median processing time:-a-a-a-a-a-a-a-a-a-a-a-a-a-a 2.77 ms/article
    -a-a-a Approximate 95th percentile:-a-a-a-a-a-a-a-a-a 6.00 ms/article

    A batch containing large binary articles took substantially longer,
    typically about 80-100 ms per article, because the bodies had to be
    parsed and classified.

    Even during the worst ten-minute binary burst, Cleanfeed consumed only
    about 5.4% of the interval and the INN server remained approximately
    92.6% idle.

    Across the complete period, the server was about 99.5% idle.

    Again, no Cleanfeed crashes or automatic disabling of the Perl filter
    were observed.

    LLM-assisted code generally does not hit those kinds of issues once you
    know how to steer it, and your included test suite are the right
    direction and imperative to exercise a dynamically typed language.

    The limitations are more difficult to spot and typically behavioral, so continue to think about designing unit tests that prove the runtime
    behavior is good for any new function.

    Then more time on integration tests that prove messages you want
    accepted are, and rejected aren't (perhaps even including a corpus of
    real usenet messages, or creating a second github project to run the 'realworld' integration tests with a large corpus of messages.


    Problems found through production testing -----------------------------------------

    Real-world testing has already uncovered and fixed several issues,
    including:

    -a-a-a correct multipart yEnc size validation;
    -a-a-a restoration of the historical allexclude behaviour;
    -a-a-a prevention of duplicate policy reject events;
    -a-a-a correct rule identifiers for policy rejects;
    -a-a-a protection against an undefined MID history queue;
    -a-a-a explicit logging when the embedded Perl version is too old;
    -a-a-a correct statistics generation immediately after a filter reload;
    -a-a-a correct accounting for articles accepted through allexclude;
    -a-a-a a dedicated binary.image reason code;
    -a-a-a warnings when INN has dontrejectfiltered enabled;
    -a-a-a documentation for CLEANFEED_CONFIG_DIR;
    -a-a-a automatic checking and preparation of statistics and metrics paths.

    INN's innreport support and documentation have also been updated to
    recognize cleanfeed-ng events.



    And now the shameless request
    -----------------------------

    Please send feedback.

    Seriously. Even a one-line reply such as:

    -a-a-a "Installed on INN 2.x / Perl 5.x / operating system X.
    -a-a-a-a Running for N days.-a No problems found."

    would be extremely useful.

    I am especially interested in:

    -a-a-a installation or migration problems;
    -a-a-a INN and Perl versions being used;
    -a-a-a text-only versus binary-capable servers;
    -a-a-a false positives;
    -a-a-a false negatives;
    -a-a-a performance under real traffic;
    -a-a-a confusing configuration options;
    -a-a-a missing documentation;
    -a-a-a unusual MIME or yEnc articles;
    -a-a-a behaviour on systems other than Debian or Ubuntu;
    -a-a-a successful installations with no issues at all.

    A minimal report could simply be:

    -a-a-a Operating system:
    -a-a-a INN version:
    -a-a-a Perl version:
    -a-a-a cleanfeed-ng version:
    -a-a-a Server type: text-only / binary / mixed
    -a-a-a Time in production:
    -a-a-a Result:
    -a-a-a Problems or suspicious behaviour:

    Please do not assume that silence means I know everything is working.

    At the moment I have considerably more clone statistics than human
    reports, which is a slightly unsettling way to maintain a transit
    filter.

    The RC2 series is now running successfully on real production servers.
    If no further discrepancies appear during the next few days, I intend
    to promote it to the first non-RC cleanfeed-ng release.

    So please: if you cloned it, installed it, tested it, disliked it,
    removed it, or merely discovered that one of my comments contains a
    typo, tell me.

    Positive feedback is useful.
    Negative feedback is more useful.
    Bug reports are extremely useful.
    Even "it works here" is useful.

    Silence is the only result from which I cannot learn anything.

    Welcome to Open Source maintainership, it can be a lonely place :)

    Thanks in advance to everyone who has already tested it, and especially
    to those who have taken the time to inspect logs and report actual results.



    Sincerely,

    --
    Ivo Gandolfo
    bofh.team

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Sat Jul 25 01:20:09 2026
    From Newsgroup: news.software.nntp

    Il 24/07/2026 23:51, Kevin Bowling ha scritto:
    I haven't had time to consider it, but I do plan to package it for
    FreeBSD ports once you hit a stable version.


    Hi Kevin,

    thank you. The prospect of a FreeBSD port is excellent news and exactly
    the kind of external testing and adoption I was hoping for.

    Regarding the name, I understand the distribution-level argument, and I
    agree that there is probably little value in maintaining both the old, unmaintained Cleanfeed and cleanfeed-ng indefinitely.

    For the first stable release, however, I would prefer to retain the cleanfeed-ng name.

    The suffix makes it clear that this is a maintained continuation rather
    than an attempt to claim the identity of Steve/Marco/Jeremy original
    project
    without his involvement. It also keeps historical versions,
    documentation and
    bug reports unambiguous.

    A distribution can still package cleanfeed-ng as the supported successor
    and make it conflict with, or replace, the historical package where appropriate. If cleanfeed-ng becomes the generally accepted continuation
    after a stable release and wider deployment, the naming question can be revisited with broader community agreement. A fork, if you wish.


    LLM-assisted code generally does not hit those kinds of issues once you [cut]


    On LLM-assisted development, I fully agree that a strong test suite is imperative, but I am somewhat less optimistic that good steering alone
    prevents this class of problem.

    Several of the defects found here were semantic or integration issues:
    reload ordering, persistent state, interactions with INN configuration,
    and tests based on an incorrect interpretation of the expected
    behaviour. An LLM can also generate a test that faithfully confirms the
    same incorrect assumption used in its implementation.

    My conclusion from this work is that the necessary combination is:

    unit tests;
    independent review;
    production observation;
    real article samples;
    and a regression test for every confirmed incident.

    While developing cleanfeed-ng, I used three different LLMs, which is GPT5.6-Sol, Fable5 and K3. Watching them review, challenge
    and occasionally argue over each other's work was sometimes a spectacle
    worth seeing xD and after that I used only a few thing's from all of three.

    More seriously, I tried to take the most useful suggestions from all
    three, compare them against the existing code and documentation, and
    then test the resulting changes on my own servers before considering
    them ready for wider testing.

    Even with that process, real production traffic still exposed semantic
    and integration problems that the initial tests had not detected. That experience is precisely why I do not think steering and unit tests alone
    are sufficient, regardless of whether the code was written by a person,
    an LLM, or both.

    I completely agree with your integration-testing suggestion.

    I am considering a corpus runner that checks complete articles against
    an expected action, stable rule identifier and CF-* result. A small,
    sanitized and redistributable corpus could be included publicly, while a
    much larger corpus of real articles would remain private because of
    size, copyright, personal-data and content concerns.

    Something along these lines:

    article file;
    expected accept/reject/audit result;
    expected rule identifier;
    expected CF-* code;
    optional expected secondary audit events.

    This should catch behavioral regressions that isolated function tests
    cannot detect, particularly changes in rule ordering and interactions
    between multiple detectors.



    Welcome to Open Source maintainership, it can be a lonely place :)


    And yes, I am beginning to understand the lonely part of open-source maintenance :)

    Thanks again, especially for offering to prepare the FreeBSD port.


    Sincerely,

    --
    Ivo Gandolfo
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?Q?Julien_=C3=89LIE?=@iulius@nom-de-mon-site.com.invalid to news.software.nntp on Sat Jul 25 20:07:56 2026
    From Newsgroup: news.software.nntp

    Hi Ivo,

    According to GitHub's traffic statistics for the last 14 days, it has received:

    -a-a-a 72 repository clones
    -a-a-a 46 unique cloners
    -a-a-a 283 page views

    For a project as specialized as a Perl transit filter for INN, these
    numbers are honestly much higher than I expected.

    I wouldn't have expected such numbers too!


    Even during the worst ten-minute binary burst, Cleanfeed consumed only
    about 5.4% of the interval and the INN server remained approximately
    92.6% idle.

    Across the complete period, the server was about 99.5% idle.

    That's great!


    INN's innreport support and documentation have also been updated to
    recognize cleanfeed-ng events.

    It will indeed be shipped with the next 2.7.5 release.

    cleanfeed-ng events [Top 50]:
    Action Rule
    Count
    audit policy.binary
    81
    reject binary.mime
    81
    audit binary.byte_profile
    8

    TOTAL: 3 -
    170



    As for the naming, cleanfeed-ng is currently used. If the project
    eventually keeps the Cleanfeed name, I will naturally change it.

    NB: Why NG in uppercase for Postfilter? (because of the uppercase P?)

    Thanks again Ivo!
    --
    Julien |eLIE

    -2-aQuand on retire tout ce qu'on a dit, il reste tout ce qu'on n'a pas
    dit.-a-+ (Philippe Geluck)

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Sat Jul 25 22:42:39 2026
    From Newsgroup: news.software.nntp

    Il 25/07/2026 20:07, Julien |eLIE ha scritto:

    It will indeed be shipped with the next 2.7.5 release.

    That is excellent news. Thank you again for integrating cleanfeed-ng
    support into innreport and for including it in the next INN release.

    cleanfeed-ng events [Top 50]:
    Action-a-a-a-a-a-a-a Rule -aCount
    audit-a-a-a-a-a-a-a-a policy.binary -a-a-a 81
    reject-a-a-a-a-a-a-a binary.mime -a-a-a 81
    audit-a-a-a-a-a-a-a-a binary.byte_profile -a-a-a-a 8

    TOTAL: 3-a-a-a-a-a - -a-a 170


    This output looks coherent.

    The matching counts probably refer to the same 81 articles. I'm
    intrested to the timing too, if you have on your log (verbose 4 or
    greater).

    The policy engine detected binary content and reported it in audit mode,
    while the historical MIME check independently rejected the misplaced
    binary payload. The eight binary.byte_profile events are additional
    diagnostic signals for a subset of the processed articles.

    This is also a useful reminder that the total represents cleanfeed-ng
    events, not necessarily unique articles: one article may generate an
    audit event and then a reject event from another detector.

    It is exactly the kind of real-world reporting behaviour that I wanted innreport to make visible.

    As for the naming, cleanfeed-ng is currently used.-a If the project eventually keeps the Cleanfeed name, I will naturally change it.

    For the first stable release I intend to retain the cleanfeed-ng name.

    I understand Kevin's argument from a distribution-maintenance point of
    view, but I would prefer not to claim the identity of the historical
    Cleanfeed project without Steve's involvement.

    The suffix also keeps old and new versions, documentation and bug
    reports unambiguous.

    If cleanfeed-ng eventually becomes the generally accepted continuation
    of Cleanfeed after wider deployment, the naming question can be
    revisited with broader community agreement.

    So there is no need to change the name used by innreport for INN 2.7.5.


    NB: Why NG in uppercase for Postfilter?-a (because of the uppercase P?)

    Honestly, there is no technical reason. It was an inconsistent
    typographical choice on my part.

    I inherited the capitalized spelling "Postfilter" from original package
    and treated "NG" as the abbreviation for "Next Generation", while for cleanfeed-ng I had mostly followed the lowercase repository and package
    name.

    If need I will standardize the name and documentation accordingly before
    the stable release, but for now it doesn't seem like a big problem to
    me, since on Github, command and the documentation everything is
    lower-case anyway.

    Thank you again, Julien. Your testing, suggestions and INN integration
    have been invaluable.


    Sincerely

    --
    Ivo Gandolfo
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?Q?Julien_=C3=89LIE?=@iulius@nom-de-mon-site.com.invalid to news.software.nntp on Sat Aug 1 16:56:57 2026
    From Newsgroup: news.software.nntp

    Hi Ivo,

    It will indeed be shipped with the next 2.7.5 release.

    That is excellent news.-a Thank you again for integrating cleanfeed-ng support into innreport and for including it in the next INN release.

    FWIW, I have also added a reference to Postfilter-NG:

    https://github.com/InterNetNews/inn/commit/ed5025663fa6ec61c40c756f769f05df54d4d071


    cleanfeed-ng events [Top 50]:
    Action-a-a-a-a-a-a-a Rule -aCount
    audit-a-a-a-a-a-a-a-a policy.binary -a-a-a 81
    reject-a-a-a-a-a-a-a binary.mime -a-a-a 81
    audit-a-a-a-a-a-a-a-a binary.byte_profile -a-a-a-a 8

    TOTAL: 3-a-a-a-a-a - -a-a 170

    This output looks coherent.

    The matching counts probably refer to the same 81 articles. I'm
    intrested to the timing too, if you have on your log (verbose 4 or
    greater).

    I have just sent them to you in a private mail.


    The policy engine detected binary content and reported it in audit mode, while the historical MIME check independently rejected the misplaced
    binary payload.-a The eight binary.byte_profile events are additional diagnostic signals for a subset of the processed articles.

    This is also a useful reminder that the total represents cleanfeed-ng
    events, not necessarily unique articles: one article may generate an
    audit event and then a reject event from another detector.

    Indeed. Thanks for the explanation!
    If one is interested in the count of unique articles, it is mentioned at
    the beginning of the report, but from the start of the filter (not since
    the last innreport run):
    Perl filter stats: Pass: 1735 Reject: 102 Refuse: 0 MD5: 13 PHL:
    0 PHN: 3 PHR: 0 FSL: 0


    It is exactly the kind of real-world reporting behaviour that I wanted innreport to make visible.

    Thanks for it!

    Incidentally, would there also be something similar to do for
    Postfilter-NG logs?


    So there is no need to change the name used by innreport for INN 2.7.5.

    Noted.


    Thank you again, Julien.-a Your testing, suggestions and INN integration
    have been invaluable.

    Thanks to you too for your work for Usenet!
    --
    Julien |eLIE

    -2-aL'ennui dans ce monde, c'est que les idiots sont s|+rs d'eux et les
    gens sens|-s pleins de doutes.-a-+

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Ivo Gandolfo@usenet@bofh.team to news.software.nntp on Sun Aug 2 00:12:57 2026
    From Newsgroup: news.software.nntp

    Il 01/08/2026 16:56, Julien |eLIE ha scritto:
    Hi Ivo,


    Thanks for it!

    Incidentally, would there also be something similar to do for
    Postfilter-NG logs?

    https://www.bofh.team/software/innreport-postfilter-ng-main-20260801.patch

    As requested :-)

    I used patch against INN2.8-main branch from Github. Feel free to move
    the sections around as you like.


    Sincerely
    --
    Ivo Gandolfo

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?Q?Julien_=C3=89LIE?=@iulius@nom-de-mon-site.com.invalid to news.software.nntp on Tue Aug 11 19:19:27 2026
    From Newsgroup: news.software.nntp

    Hi Ivo,

    Incidentally, would there also be something similar to do for
    Postfilter-NG logs?

    As requested :-)

    I used patch against INN2.8-main branch from Github. Feel free to move
    the sections around as you like.

    Oh, many thanks for your patch for a first-class integration in daily Usenet reports!
    Will be in the next INN 2.7.5 release.

    It looks like this:

    Postfilter-NG article results [Top 50]:
    Result Action Audit Reason Count accepted accept no Article accepted by all checks 6 rejected reject no Badword in body 5 accepted accept yes Badword in body 2 accepted accept yes Invalid Distribution header 1 accepted accept yes Too many hierarchies 1 rejected reject no Re: without References 1 rejected reject no UUEncoded binaries are forbidden 1 rejected reject no Your IP has sent too many articles 1

    TOTAL: 8 - - - 18

    Postfilter-NG processing time:
    Result Count Total(ms) Avg(ms) Min(ms) Max(ms) accepted 10 4346.736 434.674 8.944 1321.228 rejected 8 446.819 55.852 4.502 201.771

    TOTAL: 2 18 4793.555 266.309 - -

    Postfilter-NG rule matches [Top 50]:
    Event Action Rule Target Count badword_rule_matched score=10 badword-x body 1

    TOTAL: 1 - - - 1 --
    Julien |eLIE

    -2-aLe travail, c'est le refuge des gens qui n'ont rien de mieux |a
    faire.-a-+ (Oscar Wilde)

    --- Synchronet 3.22a-Linux NewsLink 1.2