Path: ...!news.mixmin.net!aioe.org!news.alphanet.ch!alphanet.ch!.POSTED!not-for-mail From: Marc SCHAEFER Newsgroups: fr.comp.usenet.serveurs Subject: Re: =?ISO-8859-1?Q?v=E9rification?= de l'action des controls, cancels et nocems Date: Sat, 11 Jun 2022 10:34:02 -0000 (UTC) Organization: Posted through ALPHANET Message-ID: References: <2ad8ah109acge7isgtt9v8l200bdoc30n8@consensus-omnium> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Injection-Date: Sat, 11 Jun 2022 10:34:02 -0000 (UTC) Injection-Info: shakotay.alphanet.ch; posting-account="schaefer"; logging-data="12857"; mail-complaints-to="usenet@alphanet.ch"; posting-host="634ce6c9682d817d72f6177875e2bb4f.nnrp.alphanet.ch" User-Agent: tin/2.4.3-20181224 ("Glen Mhor") (UNIX) (Linux/4.19.0-20-amd64 (x86_64)) Cancel-Lock: sha256:K6+/6Jr3t8OKXs676QhxJe4K9l81XmFuhfD0Hv+CTEs= sha256:rBKGw/PMfk0Bnv2aiohkKb78U5FMo3SLno/W5I+/JJ0= Bytes: 3237 Lines: 54 jdd 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.