diff options
| author | fukachan <fukachan> | 2003-06-04 15:16:24 +0000 |
|---|---|---|
| committer | fukachan <fukachan> | 2003-06-04 15:16:24 +0000 |
| commit | 59bf43f79020b558ecfb6e8c71642b4c8a5ef88c (patch) | |
| tree | f042df74c7847cae69b57f45c44bbe6388f6a0eb | |
| parent | bf112251f43696e90733e499e7401bbeecd31d3d (diff) | |
| download | fml8-im-145.tar.gz fml8-im-145.tar.bz2 fml8-im-145.zip | |
im-145im-145
79 files changed, 616 insertions, 376 deletions
diff --git a/img/dist/IM/00changes b/img/dist/IM/00changes index cc6b27fc..f8ed5bda 100644 --- a/img/dist/IM/00changes +++ b/img/dist/IM/00changes @@ -1,6 +1,30 @@ +145 (2003/06/01) + +* IM/LocalMbox.pm (process_maildir): Fix for modern delivery identifiers in + a maildir according to `http://cr.yp.to/proto/maildir.html'. +* Fix that setuid imget fails with tainted variables. +* imsetup.in, cnf.im/SiteConfig.in, dot.im/Config: Add comments for + MailFoldersFile, NamazuDir, MknmzIncludeFile, MknmzIgnoreFoldersRegex and + UseXDispatcher. +* IM/Config.pm.in (use_xdispatcher): New subroutine. +* IM/Config.pm.in (UseXDispatcher): New config variable. +* immknmz.in: Doc fix. +* immknmz.in: Use END block for tempfile and lockdir. +* immknmz.in: Fix NMZ.stamp handling. +* IM/Config.pm.in (MailFoldersFile, NamazuDir, MknmzIncludeFile, + MknmzIgnoreFoldersRegex) New config variable. +* IM/Config.pm.in (mail_folders_file, namazu_dir, namazu_path, + mknmz_include_file, mknmz_ignore_folders_regex): New subroutines. +* IM/Config.pm.in: Set Immknmz.Src to blank. +* immknmz.in: New option, `--src'. Folders can be specified. + (thanks to Hideyuki SHIRAI, [Mew-dist 13633] on 13 Jul 2000) +* Message fixes. +* imget.in: Doc fix. +* IM/Scan.pm (parse_body): Revise regexp. + 144 (2003/03/22) -* IM/Util.pm: Fix `$osname' for darwin. (Thanks to WATANABE Hideyuki) +* IM/Util.pm: Fix `$osname' for Darwin. (Thanks to WATANABE Hideyuki) * IM/Scan.pm (parse_body): Regexp fix. * 00readme: Doc fix. * imput.in: Doc fix. diff --git a/img/dist/IM/00diff b/img/dist/IM/00diff index 29cd6958..7e42e7e3 100644 --- a/img/dist/IM/00diff +++ b/img/dist/IM/00diff @@ -1,6 +1,16 @@ + Differences between IM145 and IM144 + +* Fix that imget fails when modern delivery identifiers are used in a + maildir, according to `http://cr.yp.to/proto/maildir.html'. +* Fix that setuid imget fails with tainted variables. +* New immknmz option `--src', target folders can be specified. +* New config variables, `MailFoldersFile', `NamazuDir', `MknmzIncludeFile', + `MknmzIgnoreFoldersRegex', and `UseXDispatcher'. +* Revised regexp for Form=%b. + Differences between IM144 and IM143 -* Supporting darwin. +* Supporting Darwin. * Regexp fix for Form=%b. * Bug fix for configure options. * Doc/message fix. @@ -14,7 +24,7 @@ Differences between IM142 and IM141 * Local security fix for impwagent and immknmz. -* IM/TcpTransaction.pm: Socket6.pm support. +* IM/TcpTransaction.pm: Socket6.pm support for IPv6. * IM/MD5.pm: Fix 64bit integer problem. * imsetup: Support `User' and `MBoxStyle=qmail'. * imsetup: Bug fix for Perl 5.8.0. diff --git a/img/dist/IM/IM/Address.pm b/img/dist/IM/IM/Address.pm index b63bc800..3e62e691 100644 --- a/img/dist/IM/IM/Address.pm +++ b/img/dist/IM/IM/Address.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Address.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Address.pm version 20030601(IM145)"; package IM::Address; require 5.003; diff --git a/img/dist/IM/IM/Alias.pm b/img/dist/IM/IM/Alias.pm index 04a50a9f..e5a10a03 100644 --- a/img/dist/IM/IM/Alias.pm +++ b/img/dist/IM/IM/Alias.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Alias.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Alias.pm version 20030601(IM145)"; package IM::Alias; require 5.003; diff --git a/img/dist/IM/IM/Config.pm.in b/img/dist/IM/IM/Config.pm.in index 7045bda6..85753676 100644 --- a/img/dist/IM/IM/Config.pm.in +++ b/img/dist/IM/IM/Config.pm.in @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Config.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Config.pm version 20030601(IM145)"; package IM::Config; require 5.003; @@ -33,7 +33,7 @@ use vars qw(@ISA @EXPORT); inbox_folder draft_folder trash_folder config_cases config_case_inbox preserve_dot folder_mode msg_mode allowcrlf use_cl no_sync fsync_no preferred_fsync_no - addrbook_file aliases_file petname_file + addrbook_file aliases_file petname_file mail_folders_file context_file getchksbr_file getsbr_file scansbr_file scan_header_pick address addresses_regex msgdbfile msgdbtype @@ -41,7 +41,9 @@ use vars qw(@ISA @EXPORT); nntpservers nntphistoryfile nntpauthuser set_nntpauthuser popaccount pophistoryfile imapaccount httpproxy noproxy usepwagent pwagentport pwagent_tmp_dir pwagent_tmp_path usepwfiles pwfiles - expand_path usetouchfile touchfile namazuv2 namazu_lock_dir namazu_lock_path + expand_path use_xdispatcher usetouchfile touchfile + namazuv2 namazu_dir namazu_path namazu_lock_dir namazu_lock_path + mknmz_include_file mknmz_ignore_folders_regex pop_timeout imap_timeout nntp_timeout dns_timeout connect_timeout command_timeout rcv_buf_siz db_type file_attr ssh_path); @@ -114,6 +116,8 @@ BEGIN { 'addrbookfile;s;;AddrBookFile' => 'Address book file', 'aliasesfile;s;;AliasesFile' => 'Aliases file', 'petnamefile;s;;PetNameFile' => 'PetName file', + 'petnamefile;s;;PetNameFile' => 'PetName file', + 'mailfoldersfile;s;;MailFoldersFile' => 'Mail folders file', 'contextfile;s;Context;ContextFile' => 'Context file', 'address;s;;Address' => 'Email addresses', 'addrregex;s;;AddrRegex' => 'Email addresses by regex', @@ -144,10 +148,14 @@ BEGIN { 'connecttimeout;i;60;ConnectTimeout' => 'Timeout for connection making', 'commandtimeout;i;300;CommandTimeout' => 'Timeout for each command', 'rcvbufsiz;i;;RcvBufSiz' => 'Receive buffer size of TCP', + 'usexdispatcher;b;;UseXDispatcher' => 'Use X-Dispatcher field', 'usetouchfile;b;;UseTouchFile' => 'Use touch file', 'touchfile;s;;TouchFile' => 'Touch file name', - 'namazuv2;b;;NamazuV2' => 'Use Namazu Version 2', - 'namazulockdir;s;;NamazuLockDir' => 'Lock directory for immknmz', + 'namazuv2;b;;NamazuV2' => 'Use Namazu Version 2 (1.9 or late)', + 'namazudir;s;;NamazuDir' => 'A directory to contain Namazu indexes', + 'namazulockdir;s;;NamazuLockDir' => 'Lock directory for Namazu', + 'mknmzincludefile;s;;MknmzIncludeFile' => 'A file for mknmz -I', + 'mknmzignorefoldersregex;s;;MknmzIgnoreFoldersRegex' => 'Folders regex ignored by immknmz', ); # these vars should be in current package? @@ -841,6 +849,10 @@ sub petname_file() { return &expand_path($PetNameFile); } +sub mail_folders_file() { + return &expand_path($MailFoldersFile); +} + sub address() { return $Address; } @@ -921,6 +933,10 @@ sub pwfiles() { return $PwFiles; } +sub use_xdispatcher() { + return $UseXDispatcher; +} + sub usetouchfile() { return $UseTouchFile; } @@ -969,6 +985,22 @@ sub namazuv2() { return $NamazuV2; } +sub namazu_dir() { + return $NamazuDir; +} + +sub namazu_path() { + return expand_home(namazu_dir()); +} + +sub mknmz_include_file() { + return &expand_path($MknmzIncludeFile); +} + +sub mknmz_ignore_folders_regex() { + return $MknmzIgnoreFoldersRegex; +} + sub namazu_lock_dir() { return $NamazuLockDir; } @@ -1055,12 +1087,14 @@ ContextFile=Context # relative to ~/.im/ # folders Src=$InboxFolder # default source of most commands Imclean.Src=$TrashFolder # default source for message cleanups +Immknmz.Src= # folders specified by Mail/.folders are used #Imget.dst=$InboxFolder # default inbox folder Imrm.dst=$TrashFolder # default trash folder # mail address aliases for imali/imput AddrBookFile=Addrbook # relative to ~/.im/ AliasesFile=Aliases # relative to ~/.im/ #PetnameFile=Petnames # relative to ~/.im/ +MailFoldersFile=~/Mail/.folders UseTouchFile=off TouchFile=.mew-touch # imget/imls @@ -1077,6 +1111,7 @@ NntpServers=localhost # default server for NNTP # imput FccDir=$MailDir QueueDir=queue # relative to ~/.im/ +UseXDispatcher=on # use X-Dispatcher field # imget Imget.Src=local # default source of imget (local mailbox) PopHistory=pophist-{POPSERVERID} # to save last state (relative to ~/.im/) @@ -1085,7 +1120,10 @@ NntpHistory=newshist # to save last state (relative to ~/.im/) PwAgentTmpDir=pwagtmp # temporary directory (relative to ~/.im/) # namazu NamazuV2=off # use Namazu version 2 (1.9.x or late) +NamazuDir=Namazu # relative to ~/ NamazuLockDir=nmzlock # lock directory (relative to ~/.im/) +MknmzIncludeFile=~/Namazu/mknmz-inc.pl # mknmz -I <file> +MknmzIgnoreFoldersRegex=\+(attach|draft|trash|queue|postq|schedule) __END__ =head1 NAME @@ -1108,7 +1146,7 @@ mail_dir mail_path news_dir news_path queue_dir queue_path inbox_folder draft_folder trash_folder config_cases config_case_inbox preserve_dot folder_mode msg_mode allowcrlf use_cl no_sync fsync_no preferred_fsync_no -addrbook_file aliases_file petname_file +addrbook_file aliases_file petname_file mail_folders_file context_file getchksbr_file getsbr_file scansbr_file scan_header_pick address addresses_regex msgdbfile msgdbtype @@ -1116,7 +1154,9 @@ mbox_style nntpservers nntphistoryfile nntpauthuser set_nntpauthuser popaccount pophistoryfile imapaccount httpproxy noproxy usepwagent pwagentport pwagent_tmp_dir pwagent_tmp_path usepwfiles pwfiles -expand_path usetouchfile touchfile namazuv2 namazu_lock_dir namazu_lock_path +expand_path use_xdispatcher usetouchfile touchfile +namazuv2 namazu_dir namazu_path namazu_lock_dir namazu_lock_path +mknmz_include_file mknmz_ignore_folders_regex pop_timeout imap_timeout nntp_timeout dns_timeout connect_timeout command_timeout rcv_buf_siz db_type file_attr ssh_path diff --git a/img/dist/IM/IM/EncDec.pm b/img/dist/IM/IM/EncDec.pm index 713a638a..eb39ae46 100644 --- a/img/dist/IM/IM/EncDec.pm +++ b/img/dist/IM/IM/EncDec.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::EncDec.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::EncDec.pm version 20030601(IM145)"; package IM::EncDec; require 5.003; diff --git a/img/dist/IM/IM/File.pm b/img/dist/IM/IM/File.pm index 9ffb7fb9..3f94b509 100644 --- a/img/dist/IM/IM/File.pm +++ b/img/dist/IM/IM/File.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Jul 7, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::File.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::File.pm version 20030601(IM145)"; package IM::File; require 5.003; diff --git a/img/dist/IM/IM/Folder.pm b/img/dist/IM/IM/Folder.pm index c8566742..1f85d6d0 100644 --- a/img/dist/IM/IM/Folder.pm +++ b/img/dist/IM/IM/Folder.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Folder.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Folder.pm version 20030601(IM145)"; package IM::Folder; require 5.003; @@ -270,8 +270,10 @@ sub create_folder($) { next; } $p .= "/$subdir"; - $p =~ /(.+)/; # $p may be tainted - $p = $1; # clean up + if ($> != 0) { + $p =~ /(.+)/; # may be tainted + $p = $1; # clean up + } unless (-d $p) { # im_debug("Creating directory: $p\n") # if (&debug('folder')); diff --git a/img/dist/IM/IM/GetPass.pm b/img/dist/IM/IM/GetPass.pm index 050b2470..b1723959 100644 --- a/img/dist/IM/IM/GetPass.pm +++ b/img/dist/IM/IM/GetPass.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 30, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::GetPass.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::GetPass.pm version 20030601(IM145)"; package IM::GetPass; require 5.003; diff --git a/img/dist/IM/IM/Grep.pm b/img/dist/IM/IM/Grep.pm index aadaecda..c3ca599f 100644 --- a/img/dist/IM/IM/Grep.pm +++ b/img/dist/IM/IM/Grep.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Nov 03, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Grep.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Grep.pm version 20030601(IM145)"; package IM::Grep; require 5.003; diff --git a/img/dist/IM/IM/History.pm b/img/dist/IM/IM/History.pm index 6ea54363..d4a074b8 100644 --- a/img/dist/IM/IM/History.pm +++ b/img/dist/IM/IM/History.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Jul 6, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::History.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::History.pm version 20030601(IM145)"; package IM::History; require 5.003; diff --git a/img/dist/IM/IM/Http.pm b/img/dist/IM/IM/Http.pm index 5e63cfa9..0c21d881 100644 --- a/img/dist/IM/IM/Http.pm +++ b/img/dist/IM/IM/Http.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Http.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Http.pm version 20030601(IM145)"; package IM::Http; require 5.003; diff --git a/img/dist/IM/IM/Imap.pm b/img/dist/IM/IM/Imap.pm index 533ab42b..5ccf4810 100644 --- a/img/dist/IM/IM/Imap.pm +++ b/img/dist/IM/IM/Imap.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Imap.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Imap.pm version 20030601(IM145)"; package IM::Imap; require 5.003; diff --git a/img/dist/IM/IM/Iso2022jp.pm b/img/dist/IM/IM/Iso2022jp.pm index 56e97ac3..792ab822 100644 --- a/img/dist/IM/IM/Iso2022jp.pm +++ b/img/dist/IM/IM/Iso2022jp.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Iso2022jp.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Iso2022jp.pm version 20030601(IM145)"; package IM::Iso2022jp; require 5.003; diff --git a/img/dist/IM/IM/Japanese.pm b/img/dist/IM/IM/Japanese.pm index 165dae76..bc39bf78 100644 --- a/img/dist/IM/IM/Japanese.pm +++ b/img/dist/IM/IM/Japanese.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Japanese.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Japanese.pm version 20030601(IM145)"; package IM::Japanese; require 5.003; diff --git a/img/dist/IM/IM/LocalMbox.pm b/img/dist/IM/IM/LocalMbox.pm index c260b43a..4f98fd76 100644 --- a/img/dist/IM/IM/LocalMbox.pm +++ b/img/dist/IM/IM/LocalMbox.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::LocalMbox.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::LocalMbox.pm version 20030601(IM145)"; package IM::LocalMbox; require 5.003; @@ -103,11 +103,13 @@ sub local_get_msg($$$$$) { $getchk_hook = getchksbr_file(); if ($getchk_hook) { - if ($getchk_hook =~ /^(\S+)$/) { + if ($getchk_hook =~ /(.+)/) { if ($main::INSECURE) { im_warn("Sorry, GetChkSbr is ignored for SUID root script.\n"); } else { - $getchk_hook = $1; # to pass through taint check + if ($> != 0) { + $getchk_hook = $1; # to pass through taint check + } if (-f $getchk_hook) { require $getchk_hook; } else { @@ -137,8 +139,10 @@ sub local_get_msg($$$$$) { return -1; } if ($how eq 'get' && $main::opt_keep == 0) { - $f =~ /(.+)/; # $f is tainted yet - $f = $1; # clean up + if ($> != 0) { + $f =~ /(.+)/; # may be tainted + $f = $1; # clean up + } unlink("$mbox/$f"); } $msgs++; @@ -281,7 +285,7 @@ sub process_maildir($$$$) { return -1; } foreach $f (sort {(-M $b) <=> (-M $a) || $a cmp $b} readdir(FLDR)) { - if ($f =~ /^\d+\.(\d+|\d+_\d+)\..+/ && -s "$dir/$f") { + if ($f =~ /^\d+\.[^.:\/]+\./ && -s "$dir/$f") { my $ret = process_file("$dir/$f", $dst, $how, $noscan); next if ($ret > 0); # skip by rule if ($ret < 0) { @@ -289,8 +293,12 @@ sub process_maildir($$$$) { return -1; } if ($how eq 'get' && $main::opt_keep == 0) { - $f =~ /(.+)/; # $f is tainted yet - $f = $1; # clean up + if ($> != 0) { + $dir =~ /(.+)/; # may be tainted + $dir = $1; # clean up + $f =~ /(.+)/; # may be tainted + $f = $1; # clean up + } unlink("$dir/$f"); } $msgs++; diff --git a/img/dist/IM/IM/Log.pm b/img/dist/IM/IM/Log.pm index fb2e479a..0a124c3f 100644 --- a/img/dist/IM/IM/Log.pm +++ b/img/dist/IM/IM/Log.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Log.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Log.pm version 20030601(IM145)"; package IM::Log; require 5.003; @@ -90,8 +90,10 @@ sub log_action($$$$;@) { } my $file = expand_path($main::Log_file); - return unless ($file =~ /^(\S+)$/); - $file = $1; # to pass through taint check + return unless ($file =~ /(.+)/); + if ($> != 0) { + $file = $1; # to pass through taint check + } &msg_mode(1); unless (im_open(\*HISTORY, ">>$file")) { im_warn("can't open history file: $file ($!)\n"); diff --git a/img/dist/IM/IM/MD5.pm b/img/dist/IM/IM/MD5.pm index 1cbc4599..34e2473e 100644 --- a/img/dist/IM/IM/MD5.pm +++ b/img/dist/IM/IM/MD5.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::MD5.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::MD5.pm version 20030601(IM145)"; package IM::MD5; require 5.003; diff --git a/img/dist/IM/IM/Message.pm b/img/dist/IM/IM/Message.pm index cc9dca80..f7847eff 100644 --- a/img/dist/IM/IM/Message.pm +++ b/img/dist/IM/IM/Message.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Message.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Message.pm version 20030601(IM145)"; package IM::Message; require 5.003; @@ -17,6 +17,7 @@ require Exporter; use IM::Util; use IM::Address qw(extract_addr replace_addr fetch_addr); use IM::Alias qw(alias_lookup hosts_completion); +use IM::Config qw(use_xdispatcher); use integer; use strict; use vars qw(@ISA @EXPORT); @@ -479,7 +480,9 @@ sub put_mimed_bcc(*$$$$$$) { print CHAN "Sender: $main::Sender_line$crlf"; } print CHAN "To: blind-copy-recipients:;$crlf"; - print CHAN "X-Dispatcher: $main::VERSION$crlf"; + if (use_xdispatcher()) { + print CHAN "X-Dispatcher: $main::VERSION$crlf"; + } if (($subj = &header_value($Header, 'Subject')) ne '') { print CHAN "Subject: Bcc: $subj$crlf"; } else { @@ -583,7 +586,9 @@ sub put_mimed_error_notify(*$$$$$$$$;$) { return -1 unless (print CHAN "To: $main::Sender_line$crlf"); print CHAN "From: Imput-Error-Report$crlf"; - print CHAN "X-Dispatcher: $main::VERSION$crlf"; + if (use_xdispatcher()) { + print CHAN "X-Dispatcher: $main::VERSION$crlf"; + } if (($subj = &header_value($Header, 'Subject')) ne '') { print CHAN "Subject: Returned message: $subj$crlf"; } else { diff --git a/img/dist/IM/IM/MsgStore.pm b/img/dist/IM/IM/MsgStore.pm index d1789803..614d7982 100644 --- a/img/dist/IM/IM/MsgStore.pm +++ b/img/dist/IM/IM/MsgStore.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::MsgStore.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::MsgStore.pm version 20030601(IM145)"; package IM::MsgStore; require 5.003; @@ -196,8 +196,10 @@ sub exec_getsbrfile($) { im_warn("Sorry, GetSbr is ignored for SUID root script\n"); return; } - if ($get_hook =~ /^(\S+)$/) { - $get_hook = $1; # to pass through taint check + if ($get_hook =~ /(.+)/) { + if ($> != 0) { + $get_hook = $1; # to pass through taint check + } if (-f $get_hook) { require $get_hook; } else { diff --git a/img/dist/IM/IM/Nntp.pm b/img/dist/IM/IM/Nntp.pm index 23b569ac..3778e12f 100644 --- a/img/dist/IM/IM/Nntp.pm +++ b/img/dist/IM/IM/Nntp.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Nntp.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Nntp.pm version 20030601(IM145)"; package IM::Nntp; require 5.003; diff --git a/img/dist/IM/IM/Pop.pm b/img/dist/IM/IM/Pop.pm index 9e8a5618..50b8e300 100644 --- a/img/dist/IM/IM/Pop.pm +++ b/img/dist/IM/IM/Pop.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Pop.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Pop.pm version 20030601(IM145)"; package IM::Pop; require 5.003; @@ -288,8 +288,10 @@ sub pop_process($$$$) { if ($histfile eq '') { im_err("POP historyfile $histfile undefined.\n"); return -1; - } elsif ($histfile =~ /(\S+)/) { - $histfile = $1; # to pass through taint check + } elsif ($histfile =~ /(.+)/) { + if ($> != 0) { + $histfile = $1; # to pass through taint check + } } else { im_err("invalid POP historyfile: $histfile.\n"); return -1; @@ -442,11 +444,13 @@ sub pop_inc($$$$$$$$) { my $getchk_hook = getchksbr_file(); if ($getchk_hook) { - if ($getchk_hook =~ /^(\S+)$/) { + if ($getchk_hook =~ /(.+)/) { if ($main::INSECURE) { im_warn("Sorry, GetChkSbr is ignored for SUID root script.\n"); } else { - $getchk_hook = $1; # to pass through taint check + if ($> != 0) { + $getchk_hook = $1; # to pass through taint check + } if (-f $getchk_hook) { require $getchk_hook; } else { diff --git a/img/dist/IM/IM/Recipient.pm b/img/dist/IM/IM/Recipient.pm index e97c425e..917cd9a1 100644 --- a/img/dist/IM/IM/Recipient.pm +++ b/img/dist/IM/IM/Recipient.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 27, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Recipient.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Recipient.pm version 20030601(IM145)"; package IM::Recipient; require 5.003; diff --git a/img/dist/IM/IM/Scan.pm b/img/dist/IM/IM/Scan.pm index 07407f84..0a465a9f 100644 --- a/img/dist/IM/IM/Scan.pm +++ b/img/dist/IM/IM/Scan.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Scan.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Scan.pm version 20030601(IM145)"; package IM::Scan; require 5.003; @@ -121,11 +121,13 @@ sub set_scan_form($$$) { $JIS_SAFE= $jis_safe; my $scan_hook = scansbr_file(); - if ($scan_hook =~ /^(\S+)$/) { + if ($scan_hook =~ /(.+)/) { if ($main::INSECURE) { im_warn("Sorry, ScanSbr is ignored for SUID root script.\n"); } else { - $scan_hook = $1; # to pass through taint check + if ($> != 0) { + $scan_hook = $1; # to pass through taint check + } if (-f $scan_hook) { require $scan_hook; } else { @@ -262,15 +264,16 @@ sub parse_body(*$) { next if /^=2D/; next if /^\s+[\w*-]+=/; # eg. "boundary="; * = RFC2231 next if /^\s*[\w-]+: /; # Headers and header style citation - next if /^\s*[>:|\/_}]/; # other citation - next if /^ /; + next if /^\s*[>:|\#;\/_}]/; + next if /^\s*[[<\/(.]+ *snip/; + next if /^ /; next if /^\s*\w+([\'._-]+\w+)*>/; next if /^\s*(On|At) .*[^.!\s\n]\s*$/; - next if /(:|;|\/)\s*\n$/; - next if /(wrote|writes?|said|says?)[^.!\n]?\s*\n$/; + next if /(:|;|\/)\s*\n$/; + next if /(wrote|writes?|said|says?)[^.!\n]?\s*\n$/; next if /^This is a multi-part message in MIME format/i; - if (/^\s*In (message|article|<|\")/i) { + if (/^\s*In (message|article|mail|news|<|\"|\[|\()/i) { if ($mode == 0) { $_ = <HANDLE>; } else { @@ -536,10 +539,10 @@ sub my_addr(@) { unless (defined($ADDRESS_HASH{'init'})) { $ADDRESS_HASH{'addr'} = addresses_regex(); unless ($ADDRESS_HASH{'addr'}) { - $ADDRESS_HASH{'addr'} = '^' . quotemeta(address()) . '$'; #' - $ADDRESS_HASH{'addr'} =~ s/(\\\s)*\\,(\\\s)*/\$|\^/g; + $ADDRESS_HASH{'addr'} = '^' . quotemeta(address()) . "\$"; + $ADDRESS_HASH{'addr'} =~ s/(\\\s)*\\,(\\\s)*/\$|\^/g; } - $ADDRESS_HASH{'init'} = 1; + $ADDRESS_HASH{'init'} = 1; } return 0 if ($ADDRESS_HASH{'addr'} eq ""); foreach $addr (@addrs) { diff --git a/img/dist/IM/IM/Smtp.pm b/img/dist/IM/IM/Smtp.pm index 1826cf02..5b9421ca 100644 --- a/img/dist/IM/IM/Smtp.pm +++ b/img/dist/IM/IM/Smtp.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Smtp.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Smtp.pm version 20030601(IM145)"; package IM::Smtp; require 5.003; diff --git a/img/dist/IM/IM/Ssh.pm b/img/dist/IM/IM/Ssh.pm index cbdbb3c6..b997992d 100644 --- a/img/dist/IM/IM/Ssh.pm +++ b/img/dist/IM/IM/Ssh.pm @@ -6,10 +6,10 @@ ### Author: Masatoshi Tsuchiya <tsuchiya@pine.kuee.kyoto-u.ac.jp> ### Internet Message Group <img@mew.org> ### Created: Oct 05, 1999 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Ssh.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Ssh.pm version 20030601(IM145)"; package IM::Ssh; require 5.003; diff --git a/img/dist/IM/IM/Stdio.pm b/img/dist/IM/IM/Stdio.pm index 645f1c0d..bae416ea 100644 --- a/img/dist/IM/IM/Stdio.pm +++ b/img/dist/IM/IM/Stdio.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: May 7, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Stdio.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Stdio.pm version 20030601(IM145)"; package IM::Stdio; require 5.003; diff --git a/img/dist/IM/IM/TcpTransaction.pm b/img/dist/IM/IM/TcpTransaction.pm index b0ee4b32..051cfc73 100644 --- a/img/dist/IM/IM/TcpTransaction.pm +++ b/img/dist/IM/IM/TcpTransaction.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::TcpTransaction.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::TcpTransaction.pm version 20030601(IM145)"; package IM::TcpTransaction; require 5.003; diff --git a/img/dist/IM/IM/Util.pm b/img/dist/IM/IM/Util.pm index 90c98b89..1591eacd 100644 --- a/img/dist/IM/IM/Util.pm +++ b/img/dist/IM/IM/Util.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Util.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Util.pm version 20030601(IM145)"; package IM::Util; require 5.003; @@ -262,9 +262,13 @@ sub flush(*) { # sub im_open($$) { - my($d, $a) = @_; + my($d, $f) = @_; my($r); - if ($r = open($d, $a)) { + if ($> != 0) { + $f =~ /(.+)/; # may be tainted + $f = $1; # clean up + } + if ($r = open($d, $f)) { binmode($d); } return $r; @@ -273,6 +277,10 @@ sub im_open($$) { sub im_sysopen($$$) { my($d, $f, $a) = @_; my($r); + if ($> != 0) { + $f =~ /(.+)/; # may be tainted + $f = $1; # clean up + } if ($r = sysopen($d, $f, $a)) { binmode($d); } diff --git a/img/dist/IM/cnf.im/SiteConfig.in b/img/dist/IM/cnf.im/SiteConfig.in index ab27dc8b..22a3c1d6 100644 --- a/img/dist/IM/cnf.im/SiteConfig.in +++ b/img/dist/IM/cnf.im/SiteConfig.in @@ -131,14 +131,21 @@ NoSync=@im_nosync@ # Do not need fsync(2) on writing file #UsePwFiles=yes # use password files #PwFiles=password # password files (relative to ~/.im/) +#MailFoldersFile=~/Mail/.folders + #UseTouchFile=yes # use time-stamp file #TouchFile=.mew-touch # time-stamp file for message folders + #NamazuV2=yes # use Namazu version 2 (1.9.x or late) +#NamazuDir=Namazu # relative to ~/ #NamazuLockDir=nmzlock # lock directory (relative to ~/.im/) +#MknmzIncludeFile=~/Namazu/mknmz-inc.pl # mknmz -I <file> +#MknmzIgnoreFoldersRegex=\+(attach|draft|trash|queue|postq|schedule) ## imput specific #FccDir=$MailDir # directory for FCC folders #QueueDir=queue # directory for to store messages to be sent +#UseXDispatcher=yes # use X-Dispatcher field #MsgIdDomain=${HOST} # if you want to use FQDN of dispatching host #ObeyMTAdomain=yes # do not append domainpart to addresses by imput #NoMsgIdForNews=yes # do not insert Message-Id: when posting as news diff --git a/img/dist/IM/dot.im/Config b/img/dist/IM/dot.im/Config index 80044561..a7d0fd4d 100644 --- a/img/dist/IM/dot.im/Config +++ b/img/dist/IM/dot.im/Config @@ -136,14 +136,21 @@ ToDomain=_domain_when_domain_part_is_omitted_ #UsePwFiles=yes # use password files #PwFiles=password # password files (relative to ~/.im/) +#MailFoldersFile=~/Mail/.folders + #UseTouchFile=yes # use time-stamp file #TouchFile=.mew-touch # time-stamp file for message folders + #NamazuV2=yes # use Namazu version 2 (1.9.x or late) +#NamazuDir=Namazu # relative to ~/ #NamazuLockDir=nmzlock # lock directory (relative to ~/.im/) +#MknmzIncludeFile=~/Namazu/mknmz-inc.pl # mknmz -I <file> +#MknmzIgnoreFoldersRegex=\+(attach|draft|trash|queue|postq|schedule) ## imput specific #FccDir=$MailDir # directory for FCC folders #QueueDir=queue # directory for to store messages to be sent +#UseXDispatcher=yes # use X-Dispatcher field #MsgIdDomain=${HOST} # if you want to use FQDN of dispatching host #ObeyMTAdomain=yes # do not append domainpart to addresses by imput #NoMsgIdForNews=yes # do not insert Message-Id: when posting as news diff --git a/img/dist/IM/imali.in b/img/dist/IM/imali.in index b86b23b0..16a27edf 100644 --- a/img/dist/IM/imali.in +++ b/img/dist/IM/imali.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imali version 20030322(IM144)"; +my $VERSION = "imali version 20030601(IM145)"; $Prog = 'imali'; @@ -37,7 +37,7 @@ use vars qw($Prog $EXPLANATION @OptConfig $EXPLANATION = "$VERSION display aliases for mail/news address -Usage: $Prog [OPTIONS] [TARGETS ...] +Usage: $Prog [OPTIONS] [TARGETS...] "; @OptConfig = ( @@ -109,7 +109,7 @@ imali - display aliases for mail/news address =head1 SYNOPSIS -B<imali> [OPTIONS] [TARGETS ...] +B<imali> [OPTIONS] [TARGETS...] =head1 DESCRIPTION diff --git a/img/dist/IM/imcat.in b/img/dist/IM/imcat.in index f7353d9b..02df650d 100644 --- a/img/dist/IM/imcat.in +++ b/img/dist/IM/imcat.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: May 5, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imcat version 20030322(IM144)"; +my $VERSION = "imcat version 20030601(IM145)"; $Prog = 'imcat'; diff --git a/img/dist/IM/imcd.in b/img/dist/IM/imcd.in index 09370343..104a2ad8 100644 --- a/img/dist/IM/imcd.in +++ b/img/dist/IM/imcd.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imcd version 20030322(IM144)"; +my $VERSION = "imcd version 20030601(IM145)"; $Prog = 'imcd'; diff --git a/img/dist/IM/imclean.in b/img/dist/IM/imclean.in index 66235703..874b03bb 100644 --- a/img/dist/IM/imclean.in +++ b/img/dist/IM/imclean.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imclean version 20030322(IM144)"; +my $VERSION = "imclean version 20030601(IM145)"; $Prog = 'imclean'; @@ -125,7 +125,7 @@ sub imclean($@) { $set = imap_range2set($HANDLE, @msgs); } - print "unlinking msgs in $folder ... " unless ($opt_noharm || $opt_quiet); + print "unlinking msgs in $folder..." unless ($opt_noharm || $opt_quiet); print "\n" if $opt_verbose; flush('STDOUT') unless $opt_noharm; diff --git a/img/dist/IM/imget.in b/img/dist/IM/imget.in index 30e36a57..e8159c76 100644 --- a/img/dist/IM/imget.in +++ b/img/dist/IM/imget.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Jan 14, 1996 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imget version 20030322(IM144)"; +my $VERSION = "imget version 20030601(IM145)"; $Prog = 'imget'; @@ -68,7 +68,7 @@ Usage: $Prog [OPTIONS] # 'thread;b;;' => 'Make threads', # 'indent;i;;' => "Width of thread indent", 'lock;s;flock;' => 'Local mailbox locking style. (none,flock,file)', - 'rpath;s;append;' => "conversion of UNIX From line into Return-Path:\n" . + 'rpath;s;append;' => "Conversion of UNIX From line into Return-Path:\n" . "\t\t(append, ignore, replace)", 'keep;i;0;' => "Preserve messages.\n" . "\t\t(POP: in days; 0=delete immediately, -1=preserve forever)\n" . @@ -298,7 +298,7 @@ Default value is "flock". =item I<-r, --rpath=STRING> -conversion of UNIX From line into Return-Path: (append, ignore, replace). +Conversion of UNIX From line into Return-Path: (append, ignore, replace). Default value is "append". =item I<-k, --keep=NUM> diff --git a/img/dist/IM/imgrep.in b/img/dist/IM/imgrep.in index 4a26f6ba..2b0dc42d 100644 --- a/img/dist/IM/imgrep.in +++ b/img/dist/IM/imgrep.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imgrep version 20030322(IM144)"; +my $VERSION = "imgrep version 20030601(IM145)"; $Prog = 'imgrep'; diff --git a/img/dist/IM/imhist.in b/img/dist/IM/imhist.in index b74f10ea..d31fb5be 100644 --- a/img/dist/IM/imhist.in +++ b/img/dist/IM/imhist.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Jul 6, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imhist version 20030322(IM144)"; +my $VERSION = "imhist version 20030601(IM145)"; $Prog = 'imhist'; diff --git a/img/dist/IM/imhsync.in b/img/dist/IM/imhsync.in index f428a9a8..655974ab 100644 --- a/img/dist/IM/imhsync.in +++ b/img/dist/IM/imhsync.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Jul 02, 1998 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imhsync version 20030322(IM144)"; +my $VERSION = "imhsync version 20030601(IM145)"; $Prog = 'imhsync'; diff --git a/img/dist/IM/imjoin.in b/img/dist/IM/imjoin.in index c8763169..f28463fb 100644 --- a/img/dist/IM/imjoin.in +++ b/img/dist/IM/imjoin.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: May 5, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imjoin version 20030322(IM144)"; +my $VERSION = "imjoin version 20030601(IM145)"; $Prog = 'imjoin'; diff --git a/img/dist/IM/imls.in b/img/dist/IM/imls.in index 9aa11b1e..de081efe 100644 --- a/img/dist/IM/imls.in +++ b/img/dist/IM/imls.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Dec 31, 1995 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imls version 20030322(IM144)"; +my $VERSION = "imls version 20030601(IM145)"; $Prog = 'imls'; diff --git a/img/dist/IM/immknmz.in b/img/dist/IM/immknmz.in index 6882f500..21fa9bfd 100644 --- a/img/dist/IM/immknmz.in +++ b/img/dist/IM/immknmz.in @@ -2,12 +2,11 @@ ################################################################ ### ### immknmz -### "mew-nmz-mknmz-all-folders" (in mew-nmz.el) ### ### Author: Shuichi Kitaguchi <kit@Mew.org> ### Internet Message Group <img@mew.org> ### Created: Sep 23, 1999 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -15,37 +14,29 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "immknmz version 20030322(IM144)"; +my $VERSION = "immknmz version 20030601(IM145)"; $Prog = 'immknmz'; -### -### Modify these variables if you need. -### -my $nmzdir = "Namazu"; # "~/$nmzdir" -my $mknmz_include = "mknmz-inc.pl"; # mknmz -I <file> -my @ignorefolders = ("draft", "trash", "schedule", "queue",); - - -# Code: - use IM::Config; use IM::Util; use IM::Folder; use IO::File; use strict; -use vars qw($Prog $EXPLANATION @OptConfig $opt_help $opt_gcnmz $opt_verbose $opt_timestamp); +use vars qw($Prog $EXPLANATION @OptConfig $opt_help $opt_verbose + @opt_src $opt_gcnmz $opt_timestamp); $EXPLANATION = "$VERSION -make namazu index for mail/news folders +make namazu index for mail folders -Usage: $Prog [OPTIONS] +Usage: $Prog [OPTIONS] [FOLDERS] "; @OptConfig = ( + 'src;F@;;' => 'Set source folders. (Mail/.folders file is used by default)', 'gcnmz;b;;' => "Use gcnmz after mknmz (Garbage Collection for Namazu index).", - 'verbose;b;;' => "With verbose messages.", 'timestamp;b;;' => "Use checking time stamp.", + 'verbose;b;;' => "With verbose messages.", 'help;b;;' => "Show this message.", ); @@ -54,47 +45,31 @@ read_cfg(); read_opt(\@ARGV); help($EXPLANATION) && exit $EXIT_SUCCESS if $opt_help; -sub get_mtime { - my($path) = @_; - my($dev,$ino,$mode,$nlink,$uid,$gid, - $rdev,$size,$atime,$mtime,$ctime, - $blksize,$blocks) = stat($path) or return -1; - return $mtime; -} - my $lockdir = namazu_lock_path(); if ($lockdir) { unless (mkdir($lockdir, 0700)) { print STDERR "$Prog: can not create lock directory: $lockdir.\n"; + $lockdir = ""; exit $EXIT_ERROR; } } -sub unlock_exit($) { - my($status) = @_; - rmdir $lockdir if $lockdir; - exit $status; +END { + if ($lockdir && -d $lockdir) { + rmdir $lockdir; + } } -my $mailpath = mail_path()."/"; -my $namazupath = home_dir()."/$nmzdir/".mail_dir()."/"; +my $mailpath = mail_path() . "/"; +my $namazupath = namazu_path() . "/" . mail_dir() . "/"; +my $mknmz_incfile = mknmz_include_file(); +if (! -f $mknmz_incfile) { + $mknmz_incfile = ""; +} my $mknmz_args = "-q"; +$mknmz_args = "" if $opt_verbose; -my $incfile = home_dir()."/$nmzdir/$mknmz_include"; -if (! -f $incfile) { - $incfile = ""; -} -my $folderspath = $mailpath."/.folders"; -my $msgfolder; -my $msgdir; -my $flag; -my $nmzfolder; -my $gcnmztgt; -my $ret; -my @filelist; my $tempdir; my $tempfile; -my $timestamp; - $tempdir = $ENV{TMPDIR} || $ENV{TEMP} || $ENV{TMP} || '/tmp'; $tempdir =~ s:\\:/:g; $tempdir =~ s/\/+$//; @@ -102,133 +77,188 @@ $tempdir = sprintf("%s/immknmz-%d-%d", $tempdir, $$, time()); rmdir $tempdir; unless (mkdir($tempdir, 0700)) { print STDERR "$Prog: can not create directory: $tempdir.\n"; - unlock_exit($EXIT_ERROR); + $tempdir = ""; + exit($EXIT_ERROR); } $tempfile = "$tempdir/tempfile"; +END { + if ($tempfile && -f $tempfile) { + unlink $tempfile; + } + if ($tempdir && -d $tempdir) { + rmdir $tempdir; + } +} -$mknmz_args = "" if $opt_verbose; +my $use_dosish_path = ((&win95p() || &os2p()) && !&namazuv2()); -im_open(\*FILE, "<$folderspath"); -while (<FILE>) { - s/\r$// if &win95p() || &os2p(); - chomp; - $msgfolder = $_; - $flag = 0; - foreach (@ignorefolders) { - if ($msgfolder !~ /^\+/) { # ! local folder - $flag=1; - last; - } elsif ($msgfolder =~ /^\+$_/) { # == @ignorefolders - $flag=1; - last; - } +sub get_mtime($) { + my($path) = @_; + my($dev, $ino, $mode, $nlink, $uid, $gid, + $rdev, $size, $atime, $mtime, $ctime, + $blksize, $blocks) = stat($path) or return -1; + return $mtime; +} + +sub make_folder_index($) { + my($msgfld) = @_; + my($msgfolder, $msgdir, $nmzfolder, $gcnmztgt, $ret, $timestamp, @filelist); + + $msgfolder = $msgfld; + $msgfolder =~ s/^\+/$mailpath/g; + $msgdir = $msgfolder; + if ($use_dosish_path) { + $msgfolder =~ s:/:\\:g; } - if ($flag != 0) { - print "skipping $msgfolder...\n"; - flush('STDOUT'); - } else { - $nmzfolder = $msgfolder; - $msgfolder =~ s/^\+/$mailpath/g; - $msgdir = $msgfolder; - $nmzfolder =~ s/^\+/$namazupath/g; - - $timestamp = "$nmzfolder/NMZ.stamp"; - if ($opt_timestamp) { - my $foldermtime; - if (&usetouchfile() && -r $msgfolder . "/" . &touchfile()) { - $foldermtime = get_mtime($msgfolder . "/" . &touchfile()); - } else { - $foldermtime = get_mtime("$msgfolder"); - } - if ($foldermtime < get_mtime("$timestamp")) { - print "index of $msgfolder may be up to date.\n" if $opt_verbose; - flush('STDOUT'); - next; - } - } - im_open(\*STAMP,">$timestamp.new"); - print STAMP "touched by IM."; - close(STAMP); - - opendir(DIR,$msgfolder); - @filelist = grep(/^[0-9]*$/ && -f "$msgfolder/$_",readdir(DIR)); - closedir(DIR); - - if ((&win95p() || &os2p()) && !&namazuv2()) { - $msgfolder =~ s:/:\\:g; + + $nmzfolder = $msgfld; + $nmzfolder =~ s/^\+/$namazupath/g; + + $timestamp = "$nmzfolder/NMZ.stamp"; + if ($opt_timestamp) { + my $foldermtime; + if (&usetouchfile() && -r $msgdir . "/" . &touchfile()) { + $foldermtime = get_mtime($msgdir . "/" . &touchfile()); + } else { + $foldermtime = get_mtime("$msgdir"); } + if (-r $timestamp && $foldermtime < get_mtime("$timestamp")) { + print "index of $msgdir may be up to date.\n" if $opt_verbose; + flush('STDOUT'); + return; + } + } + create_folder($nmzfolder); + if (im_open(\*STAMP, ">$timestamp.new")) { + print STAMP "touched by IM."; + close(STAMP); + } - if (scalar(@filelist) > 0) { - unless (sysopen(\*TEMPFILE, "$tempfile", - O_RDWR()|O_CREAT()|O_EXCL(), 0600)) { - print STDERR "$Prog: can not create file: $tempfile.\n"; - unlock_exit($EXIT_ERROR); - } - binmode(\*TEMPFILE); - foreach (@filelist) { - if (! -d "$msgdir/$_") { - if ((&win95p() || &os2p()) && !&namazuv2()) { - print TEMPFILE "$msgfolder\\$_\n"; - } else { - print TEMPFILE "$msgfolder/$_\n"; - } + opendir(DIR, $msgdir); + @filelist = grep(/^[0-9]*$/ && -f "$msgdir/$_", readdir(DIR)); + closedir(DIR); + + if (scalar(@filelist) > 0) { + unless (sysopen(\*TEMPFILE, "$tempfile", + O_RDWR()|O_CREAT()|O_EXCL(), 0600)) { + print STDERR "$Prog: can not create file: $tempfile.\n"; + exit($EXIT_ERROR); + } + binmode(\*TEMPFILE); + foreach (@filelist) { + if (! -d "$msgdir/$_") { + if ($use_dosish_path) { + print TEMPFILE "$msgfolder\\$_\n"; + } else { + print TEMPFILE "$msgfolder/$_\n"; } } - close(TEMPFILE); + } + close(TEMPFILE); - create_folder($nmzfolder); + print "$Prog: processing $msgfolder...\n"; + flush('STDOUT'); + if ($mknmz_incfile eq "") { + $ret = system "mknmz -Uh $mknmz_args -O $nmzfolder -F $tempfile"; + } else { + $ret = system "mknmz -Uh $mknmz_args -O $nmzfolder -F $tempfile -I $mknmz_incfile"; + } + unlink $tempfile; + if ($ret == 2) { + print "$Prog: abort.\n"; + flush('STDOUT'); + last; + } elsif ($opt_gcnmz) { $gcnmztgt = "$nmzfolder" . "/NMZ"; - - print "$Prog: processing $msgfolder ...\n"; - flush('STDOUT'); - if ($incfile eq "") { - $ret = system "mknmz -Uh $mknmz_args -O $nmzfolder -F $tempfile"; + print "$Prog: gcnmz $msgfolder...\n" if $opt_verbose; + flush('STDOUT'); + if (&namazuv2()) { + system "gcnmz --no-backup --quiet $gcnmztgt"; } else { - $ret = system "mknmz -Uh $mknmz_args -O $nmzfolder -F $tempfile -I $incfile"; - } - unlink $tempfile; - if ($ret == 2) { - print "$Prog: abort.\n"; - flush('STDOUT'); - last; - } elsif ($opt_gcnmz) { - print "$Prog: gcnmz $msgfolder ...\n" if $opt_verbose; - flush('STDOUT'); - if (&namazuv2()) { - system "gcnmz --no-backup --quiet $gcnmztgt"; - } else { - system "gcnmz $gcnmztgt"; - opendir(DIR,$nmzfolder); - @filelist = grep(/^.*.BAK$/ && -f "$nmzfolder/$_",readdir(DIR)); - closedir(DIR); - if (scalar(@filelist) > 0) { - foreach (@filelist) { - unlink "$nmzfolder" . "/$_"; - } + system "gcnmz $gcnmztgt"; + opendir(DIR, $nmzfolder); + @filelist = grep(/^.*.BAK$/ && -f "$nmzfolder/$_", + readdir(DIR)); + closedir(DIR); + if (scalar(@filelist) > 0) { + foreach (@filelist) { + unlink "$nmzfolder" . "/$_"; } } } } - rename("$timestamp.new", "$timestamp"); + } + if (-f "$timestamp.new") { + rename("$timestamp.new", "$timestamp"); } } -close(FILE); -rmdir $tempdir; -unlock_exit($EXIT_SUCCESS); + +my %IGNORED_FOLDERS_HASH = (); + +sub is_ignored_folder($) { + my($fld) = @_; + if ($fld !~ /^\+/) { + return 1; + } + unless (defined($IGNORED_FOLDERS_HASH{'init'})) { + $IGNORED_FOLDERS_HASH{'fld'} = mknmz_ignore_folders_regex(); + $IGNORED_FOLDERS_HASH{'init'} = 1; + } + if ($IGNORED_FOLDERS_HASH{'fld'} eq "") { + return 0; + } + if ($fld =~ /$IGNORED_FOLDERS_HASH{'fld'}/o) { + return 1; + } + return 0; +} + +if (@opt_src) { # folders specified by the --src option + my $fld; + foreach $fld (@opt_src) { + if ($fld !~ /^\+/) { + print "skipping $fld...\n" if $opt_verbose; + flush('STDOUT'); + } else { + make_folder_index($fld); + } + } +} else { # all folders + my $flds_file = mail_folders_file(); + my $fld; + + im_open(\*FILE, "<$flds_file"); + while (<FILE>) { + s/\r$// if &win95p() || &os2p(); + chomp; + $fld = $_; + if (is_ignored_folder($fld)) { + print "skipping $fld...\n" if $opt_verbose; + flush('STDOUT'); + } else { + make_folder_index($fld); + } + } + close(FILE); +} +exit($EXIT_SUCCESS); __END__ =head1 NAME -immknmz - make namazu index for mail/news folders +immknmz - make namazu index for mail folders =head1 SYNOPSIS -B<immknmz> [OPTIONS] +B<immknmz> [OPTIONS] [FOLDERS] =head1 DESCRIPTION -The I<immknmz> command makes namazu index for mail/news folders. +The I<immknmz> command makes namazu index for mail folders. + +Folders contained by the ~/Mail/.folders file are used by default. +If you want to specify the folders, use the `--src' option. This command is provided by IM (Internet Message). @@ -236,6 +266,11 @@ This command is provided by IM (Internet Message). =over 5 +=item I<-s, --src=FOLDER,FOLDER...> + +Set source folders. +"--src=+xxx" is equivalent to "+xxx". + =item I<-g, --gcnmz={on,off}> Use gcnmz after mknmz (Garbage Collection for Namazu index). diff --git a/img/dist/IM/immv.in b/img/dist/IM/immv.in index 8fc34a10..710bd2d1 100644 --- a/img/dist/IM/immv.in +++ b/img/dist/IM/immv.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "immv version 20030322(IM144)"; +my $VERSION = "immv version 20030601(IM145)"; $Prog = 'immv'; diff --git a/img/dist/IM/impack.in b/img/dist/IM/impack.in index cd98365a..116ee61a 100644 --- a/img/dist/IM/impack.in +++ b/img/dist/IM/impack.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "impack version 20030322(IM144)"; +my $VERSION = "impack version 20030601(IM145)"; $Prog = 'impack'; @@ -79,7 +79,7 @@ sub impack($) { my @paths = get_impath($folder, 'all'); - print "packing messages in $opt_src ... " unless $opt_noharm; + print "packing messages in $opt_src..." unless $opt_noharm; flush('STDOUT') unless $opt_noharm; foreach (@paths) { diff --git a/img/dist/IM/impath.in b/img/dist/IM/impath.in index 5cec8cc4..bb616af9 100644 --- a/img/dist/IM/impath.in +++ b/img/dist/IM/impath.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "impath version 20030322(IM144)"; +my $VERSION = "impath version 20030601(IM145)"; $Prog = 'impath'; diff --git a/img/dist/IM/imput.in b/img/dist/IM/imput.in index 8e64653c..b1368329 100644 --- a/img/dist/IM/imput.in +++ b/img/dist/IM/imput.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Aug 31, 1995 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -$VERSION = "imput version 20030322(IM144)"; +$VERSION = "imput version 20030601(IM145)"; $Prog = 'imput'; @@ -656,7 +656,9 @@ help($EXPLANATION) && exit $EXIT_SUCCESS if $Help; # } ##### FINAL HEADER PROCESSING ##### - &add_header(\@Header, 1, 'X-'.$Resend_prefix.'Dispatcher', $VERSION); + if (use_xdispatcher()) { + &add_header(\@Header, 1, 'X-'.$Resend_prefix.'Dispatcher', $VERSION); + } &kill_header(\@Header, 'Bcc', 0); &kill_header(\@Header, 'Dcc', 0); &kill_header(\@Header, 'Fcc', 0); @@ -1738,7 +1740,7 @@ sub process_queue { rename("$queue_dir/$q.wrk", "$queue_dir/$q"); return; } - im_notice("processing $queue_dir/$q.wrk ...\n"); + im_notice("processing $queue_dir/$q.wrk...\n"); while (<QUEUE>) { chomp; last if (/^$/); diff --git a/img/dist/IM/impwagent.in b/img/dist/IM/impwagent.in index bcaef6e0..782514b3 100644 --- a/img/dist/IM/impwagent.in +++ b/img/dist/IM/impwagent.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Sep 13, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "impwagent version 20030322(IM144)"; +my $VERSION = "impwagent version 20030601(IM145)"; $Prog = 'impwagent'; diff --git a/img/dist/IM/imrm.in b/img/dist/IM/imrm.in index d5c87d57..be302a41 100644 --- a/img/dist/IM/imrm.in +++ b/img/dist/IM/imrm.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imrm version 20030322(IM144)"; +my $VERSION = "imrm version 20030601(IM145)"; $Prog = 'imrm'; diff --git a/img/dist/IM/imsetup.in b/img/dist/IM/imsetup.in index e4ba57df..5ec40645 100644 --- a/img/dist/IM/imsetup.in +++ b/img/dist/IM/imsetup.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: May 9, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imsetup version 20030322(IM144)"; +my $VERSION = "imsetup version 20030601(IM145)"; $Prog = 'imsetup'; @@ -477,14 +477,21 @@ keep=$keep #UsePwFiles=yes # use password files #PwFiles=password # password files (relative to ~/.im/) +#MailFoldersFile=~/Mail/.folders + #UseTouchFile=yes # use time-stamp file #TouchFile=.mew-touch # time-stamp file for message folders + #NamazuV2=yes # use Namazu version 2 (1.9.x or late) +#NamazuDir=Namazu # relative to ~/ #NamazuLockDir=nmzlock # lock directory (relative to ~/.im/) +#MknmzIncludeFile=~/Namazu/mknmz-inc.pl # mknmz -I <file> +#MknmzIgnoreFoldersRegex=\+(attach|draft|trash|queue|postq|schedule) ## imput specific #FccDir=\$MailDir # directory for FCC folders #QueueDir=queue # directory for to store messages to be sent +#UseXDispatcher=yes # use X-Dispatcher field #MsgIdDomain=\${HOST} # if you want to use FQDN of dispatching host #ObeyMTAdomain=yes # do not append domainpart to addresses by imput #NoMsgIdForNews=yes # do not insert Message-Id: when posting as news diff --git a/img/dist/IM/imsort.in b/img/dist/IM/imsort.in index 08e52a87..70d34aad 100644 --- a/img/dist/IM/imsort.in +++ b/img/dist/IM/imsort.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Jul 2, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imsort version 20030322(IM144)"; +my $VERSION = "imsort version 20030601(IM145)"; $Prog = 'imsort'; diff --git a/img/dist/IM/imstore.in b/img/dist/IM/imstore.in index 4a3c58e0..98c00409 100644 --- a/img/dist/IM/imstore.in +++ b/img/dist/IM/imstore.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Dec 31, 1995 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imstore version 20030322(IM144)"; +my $VERSION = "imstore version 20030601(IM145)"; $Prog = 'imstore'; diff --git a/img/dist/IM/imtar.in b/img/dist/IM/imtar.in index dbb483a1..ebb7a04d 100644 --- a/img/dist/IM/imtar.in +++ b/img/dist/IM/imtar.in @@ -5,7 +5,7 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 08, 1998 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### BEGIN { @@ -13,7 +13,7 @@ BEGIN { @im_src_siteperl@ }; -my $VERSION = "imtar version 20030322(IM144)"; +my $VERSION = "imtar version 20030601(IM145)"; $Prog = 'imtar'; diff --git a/img/lib/IM/Address.pm b/img/lib/IM/Address.pm index b63bc800..3e62e691 100644 --- a/img/lib/IM/Address.pm +++ b/img/lib/IM/Address.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Address.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Address.pm version 20030601(IM145)"; package IM::Address; require 5.003; diff --git a/img/lib/IM/Alias.pm b/img/lib/IM/Alias.pm index 04a50a9f..e5a10a03 100644 --- a/img/lib/IM/Alias.pm +++ b/img/lib/IM/Alias.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Alias.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Alias.pm version 20030601(IM145)"; package IM::Alias; require 5.003; diff --git a/img/lib/IM/Config.pm.in b/img/lib/IM/Config.pm.in index 7045bda6..85753676 100644 --- a/img/lib/IM/Config.pm.in +++ b/img/lib/IM/Config.pm.in @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Config.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Config.pm version 20030601(IM145)"; package IM::Config; require 5.003; @@ -33,7 +33,7 @@ use vars qw(@ISA @EXPORT); inbox_folder draft_folder trash_folder config_cases config_case_inbox preserve_dot folder_mode msg_mode allowcrlf use_cl no_sync fsync_no preferred_fsync_no - addrbook_file aliases_file petname_file + addrbook_file aliases_file petname_file mail_folders_file context_file getchksbr_file getsbr_file scansbr_file scan_header_pick address addresses_regex msgdbfile msgdbtype @@ -41,7 +41,9 @@ use vars qw(@ISA @EXPORT); nntpservers nntphistoryfile nntpauthuser set_nntpauthuser popaccount pophistoryfile imapaccount httpproxy noproxy usepwagent pwagentport pwagent_tmp_dir pwagent_tmp_path usepwfiles pwfiles - expand_path usetouchfile touchfile namazuv2 namazu_lock_dir namazu_lock_path + expand_path use_xdispatcher usetouchfile touchfile + namazuv2 namazu_dir namazu_path namazu_lock_dir namazu_lock_path + mknmz_include_file mknmz_ignore_folders_regex pop_timeout imap_timeout nntp_timeout dns_timeout connect_timeout command_timeout rcv_buf_siz db_type file_attr ssh_path); @@ -114,6 +116,8 @@ BEGIN { 'addrbookfile;s;;AddrBookFile' => 'Address book file', 'aliasesfile;s;;AliasesFile' => 'Aliases file', 'petnamefile;s;;PetNameFile' => 'PetName file', + 'petnamefile;s;;PetNameFile' => 'PetName file', + 'mailfoldersfile;s;;MailFoldersFile' => 'Mail folders file', 'contextfile;s;Context;ContextFile' => 'Context file', 'address;s;;Address' => 'Email addresses', 'addrregex;s;;AddrRegex' => 'Email addresses by regex', @@ -144,10 +148,14 @@ BEGIN { 'connecttimeout;i;60;ConnectTimeout' => 'Timeout for connection making', 'commandtimeout;i;300;CommandTimeout' => 'Timeout for each command', 'rcvbufsiz;i;;RcvBufSiz' => 'Receive buffer size of TCP', + 'usexdispatcher;b;;UseXDispatcher' => 'Use X-Dispatcher field', 'usetouchfile;b;;UseTouchFile' => 'Use touch file', 'touchfile;s;;TouchFile' => 'Touch file name', - 'namazuv2;b;;NamazuV2' => 'Use Namazu Version 2', - 'namazulockdir;s;;NamazuLockDir' => 'Lock directory for immknmz', + 'namazuv2;b;;NamazuV2' => 'Use Namazu Version 2 (1.9 or late)', + 'namazudir;s;;NamazuDir' => 'A directory to contain Namazu indexes', + 'namazulockdir;s;;NamazuLockDir' => 'Lock directory for Namazu', + 'mknmzincludefile;s;;MknmzIncludeFile' => 'A file for mknmz -I', + 'mknmzignorefoldersregex;s;;MknmzIgnoreFoldersRegex' => 'Folders regex ignored by immknmz', ); # these vars should be in current package? @@ -841,6 +849,10 @@ sub petname_file() { return &expand_path($PetNameFile); } +sub mail_folders_file() { + return &expand_path($MailFoldersFile); +} + sub address() { return $Address; } @@ -921,6 +933,10 @@ sub pwfiles() { return $PwFiles; } +sub use_xdispatcher() { + return $UseXDispatcher; +} + sub usetouchfile() { return $UseTouchFile; } @@ -969,6 +985,22 @@ sub namazuv2() { return $NamazuV2; } +sub namazu_dir() { + return $NamazuDir; +} + +sub namazu_path() { + return expand_home(namazu_dir()); +} + +sub mknmz_include_file() { + return &expand_path($MknmzIncludeFile); +} + +sub mknmz_ignore_folders_regex() { + return $MknmzIgnoreFoldersRegex; +} + sub namazu_lock_dir() { return $NamazuLockDir; } @@ -1055,12 +1087,14 @@ ContextFile=Context # relative to ~/.im/ # folders Src=$InboxFolder # default source of most commands Imclean.Src=$TrashFolder # default source for message cleanups +Immknmz.Src= # folders specified by Mail/.folders are used #Imget.dst=$InboxFolder # default inbox folder Imrm.dst=$TrashFolder # default trash folder # mail address aliases for imali/imput AddrBookFile=Addrbook # relative to ~/.im/ AliasesFile=Aliases # relative to ~/.im/ #PetnameFile=Petnames # relative to ~/.im/ +MailFoldersFile=~/Mail/.folders UseTouchFile=off TouchFile=.mew-touch # imget/imls @@ -1077,6 +1111,7 @@ NntpServers=localhost # default server for NNTP # imput FccDir=$MailDir QueueDir=queue # relative to ~/.im/ +UseXDispatcher=on # use X-Dispatcher field # imget Imget.Src=local # default source of imget (local mailbox) PopHistory=pophist-{POPSERVERID} # to save last state (relative to ~/.im/) @@ -1085,7 +1120,10 @@ NntpHistory=newshist # to save last state (relative to ~/.im/) PwAgentTmpDir=pwagtmp # temporary directory (relative to ~/.im/) # namazu NamazuV2=off # use Namazu version 2 (1.9.x or late) +NamazuDir=Namazu # relative to ~/ NamazuLockDir=nmzlock # lock directory (relative to ~/.im/) +MknmzIncludeFile=~/Namazu/mknmz-inc.pl # mknmz -I <file> +MknmzIgnoreFoldersRegex=\+(attach|draft|trash|queue|postq|schedule) __END__ =head1 NAME @@ -1108,7 +1146,7 @@ mail_dir mail_path news_dir news_path queue_dir queue_path inbox_folder draft_folder trash_folder config_cases config_case_inbox preserve_dot folder_mode msg_mode allowcrlf use_cl no_sync fsync_no preferred_fsync_no -addrbook_file aliases_file petname_file +addrbook_file aliases_file petname_file mail_folders_file context_file getchksbr_file getsbr_file scansbr_file scan_header_pick address addresses_regex msgdbfile msgdbtype @@ -1116,7 +1154,9 @@ mbox_style nntpservers nntphistoryfile nntpauthuser set_nntpauthuser popaccount pophistoryfile imapaccount httpproxy noproxy usepwagent pwagentport pwagent_tmp_dir pwagent_tmp_path usepwfiles pwfiles -expand_path usetouchfile touchfile namazuv2 namazu_lock_dir namazu_lock_path +expand_path use_xdispatcher usetouchfile touchfile +namazuv2 namazu_dir namazu_path namazu_lock_dir namazu_lock_path +mknmz_include_file mknmz_ignore_folders_regex pop_timeout imap_timeout nntp_timeout dns_timeout connect_timeout command_timeout rcv_buf_siz db_type file_attr ssh_path diff --git a/img/lib/IM/EncDec.pm b/img/lib/IM/EncDec.pm index 713a638a..eb39ae46 100644 --- a/img/lib/IM/EncDec.pm +++ b/img/lib/IM/EncDec.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::EncDec.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::EncDec.pm version 20030601(IM145)"; package IM::EncDec; require 5.003; diff --git a/img/lib/IM/File.pm b/img/lib/IM/File.pm index 9ffb7fb9..3f94b509 100644 --- a/img/lib/IM/File.pm +++ b/img/lib/IM/File.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Jul 7, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::File.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::File.pm version 20030601(IM145)"; package IM::File; require 5.003; diff --git a/img/lib/IM/Folder.pm b/img/lib/IM/Folder.pm index c8566742..1f85d6d0 100644 --- a/img/lib/IM/Folder.pm +++ b/img/lib/IM/Folder.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Folder.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Folder.pm version 20030601(IM145)"; package IM::Folder; require 5.003; @@ -270,8 +270,10 @@ sub create_folder($) { next; } $p .= "/$subdir"; - $p =~ /(.+)/; # $p may be tainted - $p = $1; # clean up + if ($> != 0) { + $p =~ /(.+)/; # may be tainted + $p = $1; # clean up + } unless (-d $p) { # im_debug("Creating directory: $p\n") # if (&debug('folder')); diff --git a/img/lib/IM/GetPass.pm b/img/lib/IM/GetPass.pm index 050b2470..b1723959 100644 --- a/img/lib/IM/GetPass.pm +++ b/img/lib/IM/GetPass.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 30, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::GetPass.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::GetPass.pm version 20030601(IM145)"; package IM::GetPass; require 5.003; diff --git a/img/lib/IM/Grep.pm b/img/lib/IM/Grep.pm index aadaecda..c3ca599f 100644 --- a/img/lib/IM/Grep.pm +++ b/img/lib/IM/Grep.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Nov 03, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Grep.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Grep.pm version 20030601(IM145)"; package IM::Grep; require 5.003; diff --git a/img/lib/IM/History.pm b/img/lib/IM/History.pm index 6ea54363..d4a074b8 100644 --- a/img/lib/IM/History.pm +++ b/img/lib/IM/History.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Jul 6, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::History.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::History.pm version 20030601(IM145)"; package IM::History; require 5.003; diff --git a/img/lib/IM/Http.pm b/img/lib/IM/Http.pm index 5e63cfa9..0c21d881 100644 --- a/img/lib/IM/Http.pm +++ b/img/lib/IM/Http.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Http.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Http.pm version 20030601(IM145)"; package IM::Http; require 5.003; diff --git a/img/lib/IM/Imap.pm b/img/lib/IM/Imap.pm index 533ab42b..5ccf4810 100644 --- a/img/lib/IM/Imap.pm +++ b/img/lib/IM/Imap.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Imap.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Imap.pm version 20030601(IM145)"; package IM::Imap; require 5.003; diff --git a/img/lib/IM/Iso2022jp.pm b/img/lib/IM/Iso2022jp.pm index 56e97ac3..792ab822 100644 --- a/img/lib/IM/Iso2022jp.pm +++ b/img/lib/IM/Iso2022jp.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Iso2022jp.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Iso2022jp.pm version 20030601(IM145)"; package IM::Iso2022jp; require 5.003; diff --git a/img/lib/IM/Japanese.pm b/img/lib/IM/Japanese.pm index 165dae76..bc39bf78 100644 --- a/img/lib/IM/Japanese.pm +++ b/img/lib/IM/Japanese.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Japanese.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Japanese.pm version 20030601(IM145)"; package IM::Japanese; require 5.003; diff --git a/img/lib/IM/LocalMbox.pm b/img/lib/IM/LocalMbox.pm index c260b43a..4f98fd76 100644 --- a/img/lib/IM/LocalMbox.pm +++ b/img/lib/IM/LocalMbox.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::LocalMbox.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::LocalMbox.pm version 20030601(IM145)"; package IM::LocalMbox; require 5.003; @@ -103,11 +103,13 @@ sub local_get_msg($$$$$) { $getchk_hook = getchksbr_file(); if ($getchk_hook) { - if ($getchk_hook =~ /^(\S+)$/) { + if ($getchk_hook =~ /(.+)/) { if ($main::INSECURE) { im_warn("Sorry, GetChkSbr is ignored for SUID root script.\n"); } else { - $getchk_hook = $1; # to pass through taint check + if ($> != 0) { + $getchk_hook = $1; # to pass through taint check + } if (-f $getchk_hook) { require $getchk_hook; } else { @@ -137,8 +139,10 @@ sub local_get_msg($$$$$) { return -1; } if ($how eq 'get' && $main::opt_keep == 0) { - $f =~ /(.+)/; # $f is tainted yet - $f = $1; # clean up + if ($> != 0) { + $f =~ /(.+)/; # may be tainted + $f = $1; # clean up + } unlink("$mbox/$f"); } $msgs++; @@ -281,7 +285,7 @@ sub process_maildir($$$$) { return -1; } foreach $f (sort {(-M $b) <=> (-M $a) || $a cmp $b} readdir(FLDR)) { - if ($f =~ /^\d+\.(\d+|\d+_\d+)\..+/ && -s "$dir/$f") { + if ($f =~ /^\d+\.[^.:\/]+\./ && -s "$dir/$f") { my $ret = process_file("$dir/$f", $dst, $how, $noscan); next if ($ret > 0); # skip by rule if ($ret < 0) { @@ -289,8 +293,12 @@ sub process_maildir($$$$) { return -1; } if ($how eq 'get' && $main::opt_keep == 0) { - $f =~ /(.+)/; # $f is tainted yet - $f = $1; # clean up + if ($> != 0) { + $dir =~ /(.+)/; # may be tainted + $dir = $1; # clean up + $f =~ /(.+)/; # may be tainted + $f = $1; # clean up + } unlink("$dir/$f"); } $msgs++; diff --git a/img/lib/IM/Log.pm b/img/lib/IM/Log.pm index fb2e479a..0a124c3f 100644 --- a/img/lib/IM/Log.pm +++ b/img/lib/IM/Log.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Log.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Log.pm version 20030601(IM145)"; package IM::Log; require 5.003; @@ -90,8 +90,10 @@ sub log_action($$$$;@) { } my $file = expand_path($main::Log_file); - return unless ($file =~ /^(\S+)$/); - $file = $1; # to pass through taint check + return unless ($file =~ /(.+)/); + if ($> != 0) { + $file = $1; # to pass through taint check + } &msg_mode(1); unless (im_open(\*HISTORY, ">>$file")) { im_warn("can't open history file: $file ($!)\n"); diff --git a/img/lib/IM/MD5.pm b/img/lib/IM/MD5.pm index 1cbc4599..34e2473e 100644 --- a/img/lib/IM/MD5.pm +++ b/img/lib/IM/MD5.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::MD5.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::MD5.pm version 20030601(IM145)"; package IM::MD5; require 5.003; diff --git a/img/lib/IM/Message.pm b/img/lib/IM/Message.pm index cc9dca80..f7847eff 100644 --- a/img/lib/IM/Message.pm +++ b/img/lib/IM/Message.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Message.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Message.pm version 20030601(IM145)"; package IM::Message; require 5.003; @@ -17,6 +17,7 @@ require Exporter; use IM::Util; use IM::Address qw(extract_addr replace_addr fetch_addr); use IM::Alias qw(alias_lookup hosts_completion); +use IM::Config qw(use_xdispatcher); use integer; use strict; use vars qw(@ISA @EXPORT); @@ -479,7 +480,9 @@ sub put_mimed_bcc(*$$$$$$) { print CHAN "Sender: $main::Sender_line$crlf"; } print CHAN "To: blind-copy-recipients:;$crlf"; - print CHAN "X-Dispatcher: $main::VERSION$crlf"; + if (use_xdispatcher()) { + print CHAN "X-Dispatcher: $main::VERSION$crlf"; + } if (($subj = &header_value($Header, 'Subject')) ne '') { print CHAN "Subject: Bcc: $subj$crlf"; } else { @@ -583,7 +586,9 @@ sub put_mimed_error_notify(*$$$$$$$$;$) { return -1 unless (print CHAN "To: $main::Sender_line$crlf"); print CHAN "From: Imput-Error-Report$crlf"; - print CHAN "X-Dispatcher: $main::VERSION$crlf"; + if (use_xdispatcher()) { + print CHAN "X-Dispatcher: $main::VERSION$crlf"; + } if (($subj = &header_value($Header, 'Subject')) ne '') { print CHAN "Subject: Returned message: $subj$crlf"; } else { diff --git a/img/lib/IM/MsgStore.pm b/img/lib/IM/MsgStore.pm index d1789803..614d7982 100644 --- a/img/lib/IM/MsgStore.pm +++ b/img/lib/IM/MsgStore.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::MsgStore.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::MsgStore.pm version 20030601(IM145)"; package IM::MsgStore; require 5.003; @@ -196,8 +196,10 @@ sub exec_getsbrfile($) { im_warn("Sorry, GetSbr is ignored for SUID root script\n"); return; } - if ($get_hook =~ /^(\S+)$/) { - $get_hook = $1; # to pass through taint check + if ($get_hook =~ /(.+)/) { + if ($> != 0) { + $get_hook = $1; # to pass through taint check + } if (-f $get_hook) { require $get_hook; } else { diff --git a/img/lib/IM/Nntp.pm b/img/lib/IM/Nntp.pm index 23b569ac..3778e12f 100644 --- a/img/lib/IM/Nntp.pm +++ b/img/lib/IM/Nntp.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Nntp.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Nntp.pm version 20030601(IM145)"; package IM::Nntp; require 5.003; diff --git a/img/lib/IM/Pop.pm b/img/lib/IM/Pop.pm index 9e8a5618..50b8e300 100644 --- a/img/lib/IM/Pop.pm +++ b/img/lib/IM/Pop.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Pop.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Pop.pm version 20030601(IM145)"; package IM::Pop; require 5.003; @@ -288,8 +288,10 @@ sub pop_process($$$$) { if ($histfile eq '') { im_err("POP historyfile $histfile undefined.\n"); return -1; - } elsif ($histfile =~ /(\S+)/) { - $histfile = $1; # to pass through taint check + } elsif ($histfile =~ /(.+)/) { + if ($> != 0) { + $histfile = $1; # to pass through taint check + } } else { im_err("invalid POP historyfile: $histfile.\n"); return -1; @@ -442,11 +444,13 @@ sub pop_inc($$$$$$$$) { my $getchk_hook = getchksbr_file(); if ($getchk_hook) { - if ($getchk_hook =~ /^(\S+)$/) { + if ($getchk_hook =~ /(.+)/) { if ($main::INSECURE) { im_warn("Sorry, GetChkSbr is ignored for SUID root script.\n"); } else { - $getchk_hook = $1; # to pass through taint check + if ($> != 0) { + $getchk_hook = $1; # to pass through taint check + } if (-f $getchk_hook) { require $getchk_hook; } else { diff --git a/img/lib/IM/Recipient.pm b/img/lib/IM/Recipient.pm index e97c425e..917cd9a1 100644 --- a/img/lib/IM/Recipient.pm +++ b/img/lib/IM/Recipient.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 27, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Recipient.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Recipient.pm version 20030601(IM145)"; package IM::Recipient; require 5.003; diff --git a/img/lib/IM/Scan.pm b/img/lib/IM/Scan.pm index 07407f84..0a465a9f 100644 --- a/img/lib/IM/Scan.pm +++ b/img/lib/IM/Scan.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Scan.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Scan.pm version 20030601(IM145)"; package IM::Scan; require 5.003; @@ -121,11 +121,13 @@ sub set_scan_form($$$) { $JIS_SAFE= $jis_safe; my $scan_hook = scansbr_file(); - if ($scan_hook =~ /^(\S+)$/) { + if ($scan_hook =~ /(.+)/) { if ($main::INSECURE) { im_warn("Sorry, ScanSbr is ignored for SUID root script.\n"); } else { - $scan_hook = $1; # to pass through taint check + if ($> != 0) { + $scan_hook = $1; # to pass through taint check + } if (-f $scan_hook) { require $scan_hook; } else { @@ -262,15 +264,16 @@ sub parse_body(*$) { next if /^=2D/; next if /^\s+[\w*-]+=/; # eg. "boundary="; * = RFC2231 next if /^\s*[\w-]+: /; # Headers and header style citation - next if /^\s*[>:|\/_}]/; # other citation - next if /^ /; + next if /^\s*[>:|\#;\/_}]/; + next if /^\s*[[<\/(.]+ *snip/; + next if /^ /; next if /^\s*\w+([\'._-]+\w+)*>/; next if /^\s*(On|At) .*[^.!\s\n]\s*$/; - next if /(:|;|\/)\s*\n$/; - next if /(wrote|writes?|said|says?)[^.!\n]?\s*\n$/; + next if /(:|;|\/)\s*\n$/; + next if /(wrote|writes?|said|says?)[^.!\n]?\s*\n$/; next if /^This is a multi-part message in MIME format/i; - if (/^\s*In (message|article|<|\")/i) { + if (/^\s*In (message|article|mail|news|<|\"|\[|\()/i) { if ($mode == 0) { $_ = <HANDLE>; } else { @@ -536,10 +539,10 @@ sub my_addr(@) { unless (defined($ADDRESS_HASH{'init'})) { $ADDRESS_HASH{'addr'} = addresses_regex(); unless ($ADDRESS_HASH{'addr'}) { - $ADDRESS_HASH{'addr'} = '^' . quotemeta(address()) . '$'; #' - $ADDRESS_HASH{'addr'} =~ s/(\\\s)*\\,(\\\s)*/\$|\^/g; + $ADDRESS_HASH{'addr'} = '^' . quotemeta(address()) . "\$"; + $ADDRESS_HASH{'addr'} =~ s/(\\\s)*\\,(\\\s)*/\$|\^/g; } - $ADDRESS_HASH{'init'} = 1; + $ADDRESS_HASH{'init'} = 1; } return 0 if ($ADDRESS_HASH{'addr'} eq ""); foreach $addr (@addrs) { diff --git a/img/lib/IM/Smtp.pm b/img/lib/IM/Smtp.pm index 1826cf02..5b9421ca 100644 --- a/img/lib/IM/Smtp.pm +++ b/img/lib/IM/Smtp.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Smtp.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Smtp.pm version 20030601(IM145)"; package IM::Smtp; require 5.003; diff --git a/img/lib/IM/Ssh.pm b/img/lib/IM/Ssh.pm index cbdbb3c6..b997992d 100644 --- a/img/lib/IM/Ssh.pm +++ b/img/lib/IM/Ssh.pm @@ -6,10 +6,10 @@ ### Author: Masatoshi Tsuchiya <tsuchiya@pine.kuee.kyoto-u.ac.jp> ### Internet Message Group <img@mew.org> ### Created: Oct 05, 1999 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Ssh.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Ssh.pm version 20030601(IM145)"; package IM::Ssh; require 5.003; diff --git a/img/lib/IM/Stdio.pm b/img/lib/IM/Stdio.pm index 645f1c0d..bae416ea 100644 --- a/img/lib/IM/Stdio.pm +++ b/img/lib/IM/Stdio.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: May 7, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Stdio.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Stdio.pm version 20030601(IM145)"; package IM::Stdio; require 5.003; diff --git a/img/lib/IM/TcpTransaction.pm b/img/lib/IM/TcpTransaction.pm index b0ee4b32..051cfc73 100644 --- a/img/lib/IM/TcpTransaction.pm +++ b/img/lib/IM/TcpTransaction.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::TcpTransaction.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::TcpTransaction.pm version 20030601(IM145)"; package IM::TcpTransaction; require 5.003; diff --git a/img/lib/IM/Util.pm b/img/lib/IM/Util.pm index 90c98b89..1591eacd 100644 --- a/img/lib/IM/Util.pm +++ b/img/lib/IM/Util.pm @@ -5,10 +5,10 @@ ### ### Author: Internet Message Group <img@mew.org> ### Created: Apr 23, 1997 -### Revised: Mar 22, 2003 +### Revised: Jun 1, 2003 ### -my $PM_VERSION = "IM::Util.pm version 20030322(IM144)"; +my $PM_VERSION = "IM::Util.pm version 20030601(IM145)"; package IM::Util; require 5.003; @@ -262,9 +262,13 @@ sub flush(*) { # sub im_open($$) { - my($d, $a) = @_; + my($d, $f) = @_; my($r); - if ($r = open($d, $a)) { + if ($> != 0) { + $f =~ /(.+)/; # may be tainted + $f = $1; # clean up + } + if ($r = open($d, $f)) { binmode($d); } return $r; @@ -273,6 +277,10 @@ sub im_open($$) { sub im_sysopen($$$) { my($d, $f, $a) = @_; my($r); + if ($> != 0) { + $f =~ /(.+)/; # may be tainted + $f = $1; # clean up + } if ($r = sysopen($d, $f, $a)) { binmode($d); } |
