Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Andrey Slusar                        2:467/126      24 Apr 2003  01:57:30
 To : Alexander Ogol
 Subject : Re: ifmail MSGID не совпадают
 -------------------------------------------------------------------------------- 
 
 
 On Sat, 19 Apr 2003 02:08:35 +0300 Alexander Ogol wrote:
 
 >>>>> "SO" == Serg Oskin writes:
  AO> [kham-kham-kham....argh....]
 
  SO>> Hеправильный: Заставить свою читалку/писалку генерить Message-ID, в
  AO> котором
  SO>> перед @ только цифры (int32). Я по ленности пошел по этому пути,
  AO> правда
  SO>> правил не читалку, а inn (патч есть в комплекте ifmail-os). :)
 
  AO> кстати, кому надо в gnus генерить такой Message-Id (и не хочется
  AO> патчить сервер :)), можно вот что добавить в .gnus
 
  AO> --8<---------------cut here---------------start------------->8---
 
  AO> --8<---------------cut here---------------end--------------->8---
 
   А вот это не делает то-же самое, но скриптом к inn?(Кто-то раньше
  публиковал в ru.unix.ftn) Тут еще много чего хорошего - чарсеты, x-comment-to:
 ===filter_nnrpd.pl===
 #!/usr/bin/perl -w
 #use strict;
 use String::CRC32;
 
 sub filter_post {
     my $rval = "" ;   # это то, что скрипт возвращает nnrpd, если "", то
       # со статьей все ОК, если !"", то постинг
       # отменяется
     my $grephistory = '/usr/lib/news/bin/grephistory';
     my $sm = '/usr/lib/news/bin/sm';
     my $ftn_suffix = "f126.n467.z2.fidonet.org";
     my $x_ftn_suffix = "2:467/126\@fidonet";  # тут кое-какие
            # изменения тебе надо
            # будет внести
 
     my $key;
     $modify_headers = 1;
 
 # здесь мы перекодируем все заголовки из QP или Base64 в plain-text
 
     foreach $key ( keys %hdr ) {            || ($ct =~ /text\s/i)
         my $v = $hdr{$key};
         $v =~
 s/(=\?koi8-[ru]\?[QB]\?[^\?]*\?=)\n\s*(=\?koi8-[ru]\?[QB]\?[^\?]*\?=)/$1$2/xogis
 ;
         $v =~
 s/(=\?koi8-[ru]\?[QB]\?[^\?]*\?=)\n\s*(=\?koi8-[ru]\?[QB]\?[^\?]*\?=)/$1$2/xogis
 ;
         $v=~s/\s*=\?koi8-[ru]\?Q\?([^\?]*)\?=/&deqp($1)/egis;
         $v=~s/\s*=\?koi8-[ru]\?B\?([^\?]*)\?=/&de64($1)/egis;
         $hdr{$key} = $v;
     }
 
     if( $hdr{"Newsgroups"} =~ /fido|junk\./ ) {   # тут регекспом
            # определяется статьи в
            # какие статьи
            # фильтровать (должно
            # быть достаточно
            # fido7, cca это префикс
            # моих локальных групп
 
 # тут проделаваем кое-какие шаманства с мсгидами, чтобы Message-ID и
 # X-FTN-MSGID (который потом сконвертится в @MSGID) были
 # взаимооднозначны
 #
 # тут используется дополнительный модуль crc32, если его у тебя нету,
 # то можешь выкинуть этот участок или сам придумай, как добиться
 # более-менее приемлимой уникальности мсгидов
 
                 $tmp = $hdr{"Message-ID"};
                 $crc = crc32($tmp);
                 $hdr{"Message-ID"} = sprintf("<%u\@$ftn_suffix>",$crc);
                 $modify_headers = 1;
                 $hdr{"X-FTN-MSGID"} = sprintf("$x_ftn_suffix %x",$crc);
                 $modify_headers = 1;
 
 # тут небольшая защита от "моих маленьких любителей спама" :-) отшиваем
 #постинги в более, чем одну конференцию
 
 #        if ( $hdr{"Newsgroups"} =~ /,/ ) {
 #                $rval = "More than one newsgroup requested, only one allowed";
 #        }
 
 # тут проверяем поле заголовка Content-Type: (вроде все понятно должно
 # быть)
 
         $ct = $hdr{"Content-Type"};
         if ($ct) {
                 if (($ct =~ /text\/plain/i) || ($ct =~ /text\s/i)) {
                         if ($ct =~ /[\s;]charset="{0,1}([^\s,;"]*)"{0,1}/i) {
                                 if (($1 !~ /^(x-){0,1}koi8-[ru]$/i) && ($1 !~
 /^us-ascii$/i)) {
                                         $rval = "charset \"$1\" present and is
 not
 \"koi8-r\"";
                                 }
                         }
                 } else {
                         $rval = "Content-type is not \"text/plain\", all others
 disallowed";
                 }
         }
 
 # тут аналогично проверяем Content-Transfer-Encoding:
 
         $cte = $hdr{"Content-Transfer-Encoding"};
         if ($cte) {
                 if ($cte !~ /[78]bit/i) {
                         $rval = "Content-Transfer-Encoding is not \"7bit\" or \"
 8bit\",
 not allowed";
                 }
         }
 
 # тут вставляем дополнительный хедер, который потом сконвертится в
 # @REPLYADDR (честно говоря, сам не знаю зачем это надо, кто-то попросил
 # :-))
         if (($hdr{"X-FTN-REPLYADDR"} eq "") && ($hdr{"From"} ne "")) {
                 $hdr{"X-FTN-REPLYADDR"} = $hdr{"From"};
                 $modify_headers = 1;
         }
 
 # ну и X-COMMENT-TO: наконец...
 
         if (    !(($hdr{"Comment-To"} ne "") ||
                 ($hdr{"X-Comment-To"} ne "") ||
                 ($hdr{"X-FTN-To"} ne "") ||
                 ($hdr{"X-Fidonet-Comment-To"} ne "") ||
                 ($hdr{"X-Apparently-To"} ne ""))) {
             my $refs = $hdr{"References"};
             if( $refs ne "" ) {
                 my @refs = split(/ /, $refs);
                 my $msgid = pop @refs;
                 $msgid =~ s/[<>|;\s'"]//g;
                 my $fn=`$grephistory \'$msgid\' 2>&1`;
                 if( (!($fn =~ /\/dev\/null/)) &&
                     (!($fn =~ /Not found/)) ) {
                     my $orig_from = `$sm $fn`;
                     my @orig_from = grep(/^From:/, split(/\n/,$orig_from));
                     $orig_from = shift @orig_from;
                     $orig_from =~ s/^From:\s*//;
                     $orig_from =~
 s/^\s*(.+[^\s])\s*<[^\s><"\(\)\@]+\@[^\s><"\(\)\@]+>\s*$/$1/;
                     $orig_from =~
 s/^\s*<{0,1}[^\s><"\(\)\@]+\@[^\s><"\(\)\@]+>{0,1}\s*\((.+)\)\s*$/$1
   /;
                     $orig_from =~ s/^"//;
                     $orig_from =~ s/"$//;
                     $hdr{"X-Comment-To"} = $orig_from;
                     $modify_headers = 1;
                 }
             }
         }
     }
     return $rval;
 ===
 -- 
                                                   Всего хорошего.
                                                             Андрей.
 --- Gnus/5.090019 (Oort Gnus v0.19) Emacs/21.2 (gnu/linux)
  * Origin: Santinel BBS (2:467/126)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: ifmail MSGID не совпадают   Andrey Slusar   24 Apr 2003 01:57:30 
Архивное /ru.linux/2749c456e2b1.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional