|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/2749c456e2b1.html, оценка из 5, голосов 10
|