Newsgroup: it.comp.os.linux.iniziare
Titolo: INN e Subject

Salve a tutti!
Sono appena passato  da Leafnode a INN, e volevo  chiedervi se esiste un
modo per filtrare i  messaggi in ingresso per correggere i  R: in Re:. A
quanto  ho visto  mi e`  parso di  capire che  INN possa  utilizzare dei
filtri in perl, ma non ne capisco molto.
Grazie
-- 
Ho fatto 'cat /boot/vmlinuz > /dev/audio' e mi e` parso di udire Dio

 filtri in perl, ma non ne capisco molto.
Hmm. Si`, non ci avevo pensato. Ho visto che il filtro d'esempio incluso
nella distribuzione permette di rifiutare  i messaggi di spam, basandosi
su delle regole di pattern-matching.  Ma in effetti nulla ti impedirebbe
di usare quello stesso filtro, che fa un matching sul campo subject, per
*modificare* quel campo. Si`, si`, mi pare proprio possibile: basterebbe
modificare il valore della variabile  $hdr{"Subject"} con un altro con i
"R:" filtrati via, e saresti a posto.
Io ho una macro per vim che lo fa:
    1,10s/Subject: \(\(R:\|Re:\) *\)* /Subject: Re: /e
Basta fare l'equivalente in perl, che non e` molto diverso.
-- 
  _      ___ ____
 | | /| / (_)_  / >>> aka Luciano Di Lucrezia
 | |/ |/ / / / /_   . Radiance BBS: 
+39-0362-332921
 - JOIN THE FUN NOW!
 |__/|__/_/ /___/   . Ban Micro$oft from Universities! Support Free Software.
 
La tecnologia MMX aumenta le prestazioni sessuali. (Wiz)

Basta fare l'equivalente in perl, che non e` molto diverso.
Un abbozzo, se ho interpretato correttamente la sostituzione sopra, potrebbe
essere:
     while (<>) {
        if (/^Subject:/) {
           s/^Subject: ((R:|Re:) *)+/Subject: Re: /;
           print $_;
           last;
        }
        print $_;
     }
     while (<>) {
        print $_;
     }
(Non so come si comporti vim, ma quella seconda chiusura * mi farebbe
pensare che venga aggiunto un "Re:" anche quando non c'e`; certamente cosi`
e` in perl, da cui il +.)
Si potrebbe risolvere con un'unica espressione di ricerca, ma cosi` si ha il
vantaggio di interrompere la ricerca alla prima occorrenza di /^Subject:/.
Il punto meno banale, comunque, mi pare rendere operativo il filtro in INN.
Non so poi se INN rende vantaggioso usare perl piuttosto che altro, perche'
altrimenti la cosa potrebbe essere fatta con meno dispendio di risorse in
sed.
Ciao.
 

 sed.
[..cut]
<premessa>
Sono disponibilissimo a qualsiasi prova, tanto ho un installazione di
debian su un altra partizione per delle prove con INN, quindi provare
anche quest'altra cosa non mi creerebbe problemi.
</premessa>
Io ci avevo provato con sed, direttamente sullo spool, un po di tempo
fa, ma ho lasciato perdere, si creavano casini; corretti erano corretti
ma poi mi capitava di trovare sporadicamente articoli non integri.
Una cosa e` certa, se lo si fa, lo si fa utilizzando gli strumenti di
INN e direttamente nel mommento dell'iniezione degli articoli nello
spool, quindi IMHO, utilizzando solo perl (che fra le altre cose sto
tentando di imparare, almeno un pochino;-)) ).
Ciao, `matte.
-- 
err: signature too big

 sed.
Ho cavato qualcosa che per intercettare intercetta tutto, ma in quanto a
cambiarlo quel subject, non ci pensa nemmeno :( Aiuto! ;-)
Tutto questo nel file /etc/news/filter/
filter_nnrpd.pl
 .
#v+
sub filter_post {
    my $rval = "" ;
    if ($hdr{"Subject"} =~ /^(RE: |Re: |R: ){2,}/) {
       #                  ^^^^^^^^^^^^^^^^^^^^^^^
       # Se ci sono due o piu` occorrenze di R: o Re:
       $hdr{"Subject"} =~ s/(RE: |Re: |R: ){2,}/Re: /;
    } elsif ($hdr{"Subject"} =~ /^R: /) {
       #                       ^^^^^^^
       # Se c'e` un occorrenza di R:
       $hdr{"Subject"} =~ s/^R: /Re: /;
    } elsif ($hdr{"Subject"} =~ /^RE: /) {
       #                       ^^^^^^^^
       # Se c'e` un occorrenza di RE:
       $hdr{"Subject"} =~ s/^RE: /Re: /;
    }
    $rval ;
}
 
#v-
Ho dovuto dividerlo in 3 regole, per prendere tutti i casi possibili, in
un unica espressione non mi era possibile (o non sono capace io).


 filtri in perl, ma non ne capisco molto.
Ok ci sono riuscito. Se sei in Debian ;
apri /etc/news/filter/
filter_nnrpd.pl
, e mettici questo :
#v+
[INIZIO 
filter_nnrpd.pl
]
sub filter_post {
    my $rval = "" ;
    $modify_headers = 1;
    if ($hdr{"Subject"} =~ /^(RE: |Re: |R: ){2,}/) {
	$hdr{"Subject"} =~ s/(RE: |Re: |R: ){2,}/Re: /;
 
    } elsif ($hdr{"Subject"} =~ /^R: /) {
	$hdr{"Subject"} =~ s/^R: /Re: /;
    } elsif ($hdr{"Subject"} =~ /^RE: /) {
	$hdr{"Subject"} =~ s/^RE: /Re: /;
    }
    $rval ;
}
 
[FINE 
filter_nnrpd.pl
]
#v-
Come al solito mi era sfuggita la parte piu` importante della
documentazione, cioe` quella relativa al dover settare la variabile
$modify_headers, altrimenti non fungeva ;-)
Ah, qui va da 5 minuti, domani lo provo iniettando 80 mega di spool,
prima di usarlo facci due prove su local.test ;-) gruppo che oggi qui ha
ricevuto 65 post ;-))))))


spool
Questa problematica, come tentavo perlappunto di suggerire, mi e`, non solo
a grandi a linee ma anche, e ben piu` compiutamente, in ogni specifico
dettaglio, del tutto e totalmente ignota.
Quanto al perl in senso stretto, invece, mi sento, se ce ne fosse bisogno,
di poter aiutare.
Ciao.