Sujet : Re: vérification de l'action des controls, cancels et nocems
De : schaefer (at) *nospam* alphanet.ch (Marc SCHAEFER)
Groupes : fr.comp.usenet.serveursDate : 11. Jun 2022, 11:34:02
Autres entêtes
Organisation : Posted through ALPHANET
Message-ID : <t81r2q$chp$1@shakotay.alphanet.ch>
References : 1 2 3 4 5 6 7
User-Agent : tin/2.4.3-20181224 ("Glen Mhor") (UNIX) (Linux/4.19.0-20-amd64 (x86_64))
jdd <
jdd@dodin.org> wrote:
pasdenom.info!dodin.fr.nf!.POSTED.82-64-122-108.subs.proxad.net!not-for-mai
d'accord. Une idée pour déterminer par script (ou cron) quelle est
l'origine? (le premier serveur). Avec mes yeux j'y arrive à peu près,
1) si c'est filter_nnrpd.pl, alors c'est un post d'un utilisateur local
2) si c'est filter_innd.pl / cleanfeed, alors c'est local ou distant
Voici un code pour /etc/news/cleanfeed/cleanfeed.local, qui est appelé
avec les entêtes de l'article qui porte le cancel et l'article qui est
la cible du cancel (target, t)
sub is_local_cancel($$) {
my ($r_h, $t_h) = @_;
my $local_r_post = ($r_h->{Path} =~ /^\.POSTED[^!]*!not-for-mail$/);
my $local_t_post = ($t_h->{Path} =~ /^news\.alphanet\.ch!alphanet\.ch!\.POSTED[^!]*!not-for-mail$/);
Je contrôle que l'article qui porte le cancel qui n'a pas encore été
injecté est local, et je contrôle de plus que la cible, déjà injectée,
est locale.
Cela ne marchera pas si les utilisateurs mettent des choses en plus dans
le Path: avant l'injection, ou si ça provient d'un autre serveur.
Et ensuite je vérifie les droits d'accès de cancel (même user dans le
Injection-Info).
Bien sûr, c'est traité *sans* le cancel-lock, voir le code appelant:
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);
}
else {
my $r = is_local_cancel($r_hdr, \%headers);
if (!defined($r)) {
# no cancel-lock: go ahead and cancel anyway!
INN::cancel($target);
}
else {
return $r;
}
}
return undef;
}
Sur ALPHANET, vu que désormais je génère aussi des Cancel-Lock serveurs,
ce cas ne s'applique plus: j'ai laissé le code pour le mois de
transition.