Am 04.11.2020 um 14:40 schrieb Markus Fritsche:
> Mahlzeit,
>
> ich bastel gerade im lokalen Netz an einem Newsserver
> und hänge momentan an dem Thema Cleanfeed.
>
Nachdem ich mehrere Posts in einer eigenen Testgruppe,
gepostet. Wollte ich nun testen, ob das Cancel mit Key funktioniert.
Beim INN ist "innflags: -C" in der Config gesetzt.
Jedoch werden keine Cancels ausgeführt, weder Local - noch werden diese
an den zweiten Testserver weitergereicht.
In der Syslog ist folgendes hinterlegt:
-----------
news nnrpd-ssl[5742]:
xxxxxxxxxxxxxx.xxxxxxx.de post ok
<
xxxxx...@news.mydomain.de>
-----------
Der Cancel Lock Eintrag ist im Header des Posts korrekt gesetzt.
Die mit INN::syslog definierten Meldungen werden nicht in der Syslog
vermerkt.
Die cleanfeed.local sieht wie folgt aus:
Auschnitt:
##############################################################################################
###### Cancel-Lock
##############################################################################################
#
# local_filter_cancel
#
sub local_filter_cancel {
unless($hdr{Control} =~ m/^cancel\s+(<[^>]+>)/i) {
return "Cancel with broken target ID";
}
return verify_cancel(\%hdr, $1, 'Cancel');
}
sub local_filter_after_emp {
if (exists( $hdr{'Supersedes'} )) {
#return verify_cancel(\%hdr, $hdr{'Supersedes'}, 'Supersedes');
# verify_cancel is called, but not returned, so the
# posting is unconditionally accepted
# verify_cancel calls INN:cancel() if verification suceeds
verify_cancel(\%hdr, $hdr{'Supersedes'}, 'Supersedes');
}
return undef;
}
sub verify_cancel($$$) {
my $r_hdr = shift || die;
my $target = shift;
my $descr = shift;
my $headers = INN::head($target) || return "$descr of
non-existing ID $target";
my %headers;
for my $line(split(/\s*\n/, $headers)) {
if ($line =~ m/^([[:alnum:]-]+):\s+(.*)/) {
$headers{$1} = $2;
}
}
my $lock = $headers{'Cancel-Lock'};
if (defined($lock)) {
my $key = $r_hdr->{'Cancel-Key'} || return "$descr of $target
without Cancel-Key";
#return verify_cancel_key($key, $lock, ' target=' . $target);
return verify_cancel_key($key, $lock, $target);
}
return undef;
}
sub verify_cancel_key($$$) {
my $cancel_key = shift;
my $cancel_lock = shift;
my $msg = shift;
$msg = '' unless(defined($msg));
# -thh
my $target = $msg;
$msg = ' target=' . $msg;
my %lock;
for my $l(split(/\s+/, $cancel_lock)) {
next unless($l =~ m/^(sha1|md5):(\S+)/);
$lock{$2} = $1;
}
for my $k(split(/\s+/, $cancel_key)) {
unless($k =~ m/^(sha1|md5):(\S+)/) {
INN::syslog('notice', "Invalid Cancel-Key syntax '$k'.$msg");
next;
}
my $key;
if ($1 eq 'sha1') {
$key = Digest::SHA1($2); }
elsif ($1 eq 'md5') {
$key = Digest::MD5::md5($2);
}
$key = MIME::Base64::encode_base64($key, '');
if (exists($lock{$key})) {
INN::syslog('notice', "Valid Cancel-Key $key found.$msg");
# -thh
# article is canceled now
INN::cancel($target) if ($target);
return undef;
}
}
INN::syslog('notice',
"No Cancel-Key[$cancel_key] matches
Cancel-Lock[$cancel_lock]$msg"
);
return "No Cancel-Key matches Cancel-Lock.$msg";
}
##############################################################################################
... Script Ende
Ich bin bei dem ganzen nach der Anleitung von Thomas Hochstein
vorgegangen.
(
https://netz-rettung-recht.de/archives/1473-INN-Cancel-Lock-und-Cancel-Key.html)
Habe ich irgendwas übersehen?
Gruß,
Markus Fritsche