/etc/news/filter/filter_nnrpd.pl is in inn2 2.5.3-3ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #
# $Id: filter_nnrpd.pl 9247 2011-07-17 18:03:49Z iulius $
#
# Sample perl filtering code for nnrpd hook.
#
#
# This file is loaded when nnrpd starts up. If it defines a sub named
# `filter_post', then that function will be called during processing of a
# posting. It has access to the headers of the article via the associative
# array `%hdr'. If it returns a null string then the article is accepted
# for posting. A non-null string rejects it, and the value returned is used
# in the rejection message (make sure that such a message is properly encoded
# in UTF-8 so as to comply with the NNTP protocol).
#
# When filtering is disabled, the filter_end() Perl routine is called,
# if defined, prior to the deactivation of the filter.
#
# Do any initialization steps.
#
my %config = (checkincludedtext => 0,
includedcutoff => 40,
includedratio => 0.6,
quotere => '^[>:]',
antiquotere => '^[<]', # so as not to reject dict(1) output
);
#
# Sample filter
#
sub filter_post {
my $rval = "" ; # assume we'll accept.
### Uncomment this next block to reject articles that have 'make money'
### in their subject, or which have a "Re: " subject, but no References:
### header, or which have an invalid From.
## if ($hdr{"Subject"} =~ /make.*money/i) {
## $rval = "Spam is not acceptable here..." ;
## } elsif ($hdr{'Subject'} =~ /^Re: /o and $hdr{'References'} eq "") {
## $rval = "Followup without References:";
## } elsif ($hdr{'From'} =~ /^\w*$/o or
## $hdr{'From'} !~ /^(.+?)\@([-\w\d]+\.)*([-\w\d]+)\.([-\w\d]{2,})$/o) {
## $rval = "From: is invalid, must be user\@[host.]domain.tld";
## }
### The next block rejects articles with too much quoted text, if the
### config hash directs it to.
if ($config{checkincludedtext}) {
my ($lines, $quoted, $antiquoted) = analyze($body);
if ($lines > $config{includedcutoff}
&& $quoted - $antiquoted > $lines * $config{includedratio}) {
$rval = "Article contains too much quoted text";
}
}
return $rval;
}
sub analyze {
my ($lines, $quoted, $antiquoted) = (0, 0, 0);
local $_ = shift;
do {
if ( /\G$config{quotere}/mgc ) {
$quoted++;
} elsif ( /\G$config{antiquotere}/mgc ) {
$antiquoted++;
}
} while ( /\G(.*)\n/gc && ++$lines );
return ($lines, $quoted, $antiquoted);
}
sub filter_end {
# Do whatever you want to clean up things when Perl filtering is disabled.
}
|