[Mew-dist 1669] Re: Get Password from File patch for IM-65
AOSASA Shigeru
aozasa at example.com
1997年 8月 27日 (水) 09:43:51 JST
青笹茂です。
AOSASA Shigeru <aozasa at example.com> writes:
> Kazu さんに怒られてしまいそうですが、IM-65 で
> pop/POP, pop/APOP, imap/AUTH, imap/LOGIN, (http/???)
> のパスワードをファイルに書いておけるようにする
> パッチです。
すいません。間違えて IM-62 用のパッチを送ってました。
--
AOSASA Shigeru <aozasa at example.com>
=?ISO-2022-JP?B?GyRCQEQ6exsoQiAbJEJMUBsoQg==?=
-------------- next part --------------
1. はじめに
* これは IM 65 にあてる簡易パッチです。
* ファイルに pop/POP, pop/APOP, imap/AUTH, imap/LOGIN のパスワードを
書いておくことができるようになります。(これはセキュリィティ上
好ましくはありません。注意してください)
* http/(なんとか。よくわからへん) にも対応してるはずですがよく
わかってませんので使えないかもしれません。
* PGP のパスフレーズには対応していません。
(さすがにこれをするのは問題だとおもうので)
* ファイルにパスワードがみつからなければ、オリジナルと同じように
パスワードの入力を要求します。
* まだ pop/POP しかテストしてません。ほかのでうまくいったときは
教えて頂けると嬉しいです。
* このパッチはやっつけしごとです。じぶんの責任でつかってください。
2. つかいかた
2-1. im-65+InsecureGetPass.diff をあてます。
% cd (IM 65 を展開したディレクトリ)/im-65
% patch -p1 < (どこか)/im-65+InsecureGetPass.diff
2-2. IM-65 をインストールします。
% ./configure
% make install
2-3. ~/.im/Config で以下のものを追加します。
これはコマンドラインでも指定できます。
--ここから---
AllowInsecureGetPass=on
InsecurePassFiles=~/.im/POP-Password
--ここまで---
AllowInsecureGetPass
off にするとオリジナルと同じ動作になります。
InsecurePassFiles
パスワードを格納したファイルです。
"," で区切って複数のファイルが指定できます。
(tips)
---
imget.AllowInsecureGetPass=on
imget.InsecurePassFiles=~/.im/POP-Password
imls.AllowInsecureGetPass=off
imcat.AllowInsecureGetPass=off
---
のように指定することもできます。(IM のほかのオプションとおなじ)
3. パスワードを格納するファイルの書き方
* "#" ではじまる行は無視されます。
* 各行はつぎのようになっていなければなりません。
{プロトコル} {サーバー} {ユーザー名} {パスワード}
(例) pop/POP mail.motemote.or.jp father naon-naon
pop/APOP mail.motemote.or.jp onnasuki motetai
imap/AUTH mail.abcd.co.jp user secret
imap/LOGIN mail.abcd.co.jp user secret
http/(???) www.abc.co.jp user secret
http/(???) www.abc.co.jp/~abc/ user secret
http/(???) www.abc.co.jp:8080/def/ user secret
4. パッチ製作者との連絡
青笹茂 // aozasa at example.com まで。
-------------- next part --------------
diff -urN im-65~dist/IM.in/Http.pm.in im-65/IM.in/Http.pm.in
--- im-65~dist/IM.in/Http.pm.in Sat Aug 23 05:28:51 1997
+++ im-65/IM.in/Http.pm.in Wed Aug 27 07:36:22 1997
@@ -161,7 +161,14 @@
next if ($rcode == 302 && $new_spec);
if ($rcode == 401 && $auth =~ /Basic/i && $retry--) {
require IM::GetPass && import IM::GetPass;
- $pass = &getpass("Password: ");
+ # $pass = &getpass("Password: ");
+ if ($main::opt_allowinsecuregetpass) {
+ require IM::InsecureGetPass && import IM::InsecureGetPass;
+ $pass = &insecure_getpass("Password: ",
+ "http/" . "$auth", $path, $user);
+ } else {
+ $pass = &getpass("Password: ");
+ }
next if ($pass ne '');
}
last;
diff -urN im-65~dist/IM.in/Imap.pm.in im-65/IM.in/Imap.pm.in
--- im-65~dist/IM.in/Imap.pm.in Tue Aug 26 19:54:21 1997
+++ im-65/IM.in/Imap.pm.in Wed Aug 27 07:14:11 1997
@@ -531,7 +531,14 @@
my ($folder, $auth, $user, $host) = &imap_spec($src);
return -1 if ($folder eq '');
- $pass = &getpass('Password: ');
+ # $pass = &getpass('Password: ');
+ if ($main::opt_allowinsecuregetpass) {
+ require IM::InsecureGetPass && import IM::InsecureGetPass;
+ $pass = &insecure_getpass("Password: ",
+ "imap/" . "$auth", $host, $user);
+ } else {
+ $pass = &getpass("Password: ");
+ }
im_notice("accessing IMAP/$auth:$user\@$host for $how\n");
if (&imap_open($auth, $host, $user, $pass) == 0) {
diff -urN im-65~dist/IM.in/InsecureGetPass.pm.in im-65/IM.in/InsecureGetPass.pm.in
--- im-65~dist/IM.in/InsecureGetPass.pm.in Thu Jan 1 09:00:00 1970
+++ im-65/IM.in/InsecureGetPass.pm.in Wed Aug 27 07:14:36 1997
@@ -0,0 +1,70 @@
+# -*-Perl-*-
+################################################################
+###
+### InsecureGetPass.pm
+###
+
+my $VERSION = "IM::InsecureGetPass.pm @im_version@";
+
+package IM::InsecureGetPass;
+require Exporter;
+
+use IM::Config;
+
+ at example.com = qw(Exporter);
+ at example.com = qw(insecure_getpass);
+
+=head1 NAME
+
+InsecureGetPass - Get password from file, tty or ...
+
+=head1 SYNOPSIS
+
+$password = &insecure_getpass(prompt_string, protocol, host, user);
+
+=cut
+
+sub getpass_from_files($$$) {
+ my ($proto, $host, $user) = @_;
+
+ my ($passfile, @passfiles);
+ my ($pass) = undef;
+
+ @passfiles = split(',', $main::opt_insecurepassfiles);
+
+ PASSFINDLOOP: foreach $passfile (@passfiles) {
+ unless (open (PASSFILE, "<$passfile")) {
+ next;
+ }
+ while (<PASSFILE>) {
+ s/\s*(#.*)?$//;
+ chomp;
+ next unless defined;
+ my ($tmp_proto, $tmp_host, $tmp_user, $tmp_pass) = split;
+ if (($tmp_proto eq $proto) && ($tmp_host eq $host)
+ && ($tmp_user eq $user)) {
+ $pass = $tmp_pass;
+ last PASSFINDLOOP;
+ }
+ }
+ close (PASSFILE);
+ }
+
+ return $pass;
+}
+
+sub insecure_getpass($$$$) {
+ my ($prompt, $proto, $host, $user) = @_;
+
+ my ($pass) = undef;
+
+ $pass = &getpass_from_files($proto, $host, $user);
+
+ unless ($pass) {
+ require IM::GetPass && import IM::GetPass;
+ $pass = &getpass($prompt);
+ return $pass;
+ } else {
+ return $pass;
+ }
+}
diff -urN im-65~dist/IM.in/Pop.pm.in im-65/IM.in/Pop.pm.in
--- im-65~dist/IM.in/Pop.pm.in Mon Aug 25 15:04:29 1997
+++ im-65/IM.in/Pop.pm.in Wed Aug 27 07:13:55 1997
@@ -475,7 +475,16 @@
my ($auth, $user, $host) = &pop_spec($src);
- $pass = &getpass('Password: ') unless ($auth eq 'RPOP');
+ # $pass = &getpass('Password: ') unless ($auth eq 'RPOP');
+ unless ($auth eq "RPOP") {
+ if ($main::opt_allowinsecuregetpass) {
+ require IM::InsecureGetPass && import IM::InsecureGetPass;
+ $pass = &insecure_getpass("Password: ",
+ "pop/" . "$auth", $host, $user);
+ } else {
+ $pass = &getpass("Password: ");
+ }
+ }
im_notice("accessing POP/$auth:$user\@$host for $how\n");
my $rc = &pop_open($auth, $host, $user, $pass);
diff -urN im-65~dist/configure im-65/configure
--- im-65~dist/configure Tue Aug 26 09:45:57 1997
+++ im-65/configure Wed Aug 27 07:21:41 1997
@@ -1012,6 +1012,7 @@
IM/History.pm:IM.in/History.pm.in \
IM/Http.pm:IM.in/Http.pm.in \
IM/Imap.pm:IM.in/Imap.pm.in \
+ IM/InsecureGetPass.pm:IM.in/InsecureGetPass.pm.in \
IM/Iso2022jp.pm:IM.in/Iso2022jp.pm.in \
IM/Japanese.pm:IM.in/Japanese.pm.in \
IM/LocalMbox.pm:IM.in/LocalMbox.pm.in \
@@ -1131,6 +1132,7 @@
IM/History.pm:IM.in/History.pm.in \
IM/Http.pm:IM.in/Http.pm.in \
IM/Imap.pm:IM.in/Imap.pm.in \
+ IM/InsecureGetPass.pm:IM.in/InsecureGetPass.pm.in \
IM/Iso2022jp.pm:IM.in/Iso2022jp.pm.in \
IM/Japanese.pm:IM.in/Japanese.pm.in \
IM/LocalMbox.pm:IM.in/LocalMbox.pm.in \
diff -urN im-65~dist/configure.el im-65/configure.el
--- im-65~dist/configure.el Tue Aug 26 09:46:15 1997
+++ im-65/configure.el Wed Aug 27 07:21:33 1997
@@ -36,7 +36,8 @@
(defconst im-libraries '("Address.pm" "Alias.pm" "Config.pm"
"EncDec.pm" "File.pm"
"Folder.pm" "GetPass.pm" "History.pm"
- "Imap.pm" "Iso2022jp.pm" "Japanese.pm"
+ "Imap.pm" "InsecureGetPass.pm"
+ "Iso2022jp.pm" "Japanese.pm"
"LocalMbox.pm" "Log.pm" "MD5.pm"
"Message.pm" "MsgStore.pm"
"Nntp.pm" "Pop.pm" "Recipient.pm"
diff -urN im-65~dist/configure.in im-65/configure.in
--- im-65~dist/configure.in Tue Aug 26 09:45:53 1997
+++ im-65/configure.in Wed Aug 27 07:20:30 1997
@@ -69,6 +69,7 @@
IM/History.pm:IM.in/History.pm.in \
IM/Http.pm:IM.in/Http.pm.in \
IM/Imap.pm:IM.in/Imap.pm.in \
+ IM/InsecureGetPass.pm:IM.in/InsecureGetPass.pm.in \
IM/Iso2022jp.pm:IM.in/Iso2022jp.pm.in \
IM/Japanese.pm:IM.in/Japanese.pm.in \
IM/LocalMbox.pm:IM.in/LocalMbox.pm.in \
diff -urN im-65~dist/imcat.in im-65/imcat.in
--- im-65~dist/imcat.in Tue Aug 26 19:54:31 1997
+++ im-65/imcat.in Wed Aug 27 07:17:44 1997
@@ -47,6 +47,9 @@
'help;b;;' => "Show this message.",
'debug;b;;' => "debug mode.",
'verbose;b;;' => "verbose mode.",
+
+ 'allowinsecuregetpass;b;;' => 'Allow get password from file',
+ 'insecurepassfiles;s;;' => 'Password files: file1,file2,...',
);
##
@@ -150,7 +153,14 @@
my ($folder, $auth, $user, $host) = &imap_spec($1);
- my $pass = &getpass('Password: ');
+ # my $pass = &getpass('Password: ');
+ my $pass;
+ if ($opt_allowinsecuregetpass) {
+ require IM::InsecureGetPass && import IM::InsecureGetPass;
+ $pass = &insecure_getpass("Password: ", "imap/", $auth, $user, $host);
+ } else {
+ $pass = &getpass("Password: ");
+ }
im_warn("accessing IMAP/$auth:$user\@$host\n") if (&verbose);
diff -urN im-65~dist/imget.in im-65/imget.in
--- im-65~dist/imget.in Sun Aug 24 16:56:18 1997
+++ im-65/imget.in Wed Aug 27 07:19:42 1997
@@ -72,6 +72,9 @@
'assoc;s;;' => "Association list: dst1=src1;dst2=src2;...\n" .
"\t\tThis overrides --dst and --src options.",
'help;b;;' => 'Display this help message.',
+
+ 'allowinsecuregetpass;b;;' => 'Allow get password from file',
+ 'insecurepassfiles;s;;' => 'Password files: file1,file2,...',
);
##
diff -urN im-65~dist/imls.in im-65/imls.in
--- im-65~dist/imls.in Sun Aug 24 16:56:19 1997
+++ im-65/imls.in Wed Aug 27 07:17:51 1997
@@ -57,6 +57,9 @@
'grep;s;;' => "Grep pattern for vscan",
'help;b;;' => 'Show this message',
'verbose;b;;' => 'With verbose messages.',
+
+ 'allowinsecuregetpass;b;;' => 'Allow get password from file',
+ 'insecurepassfiles;s;;' => 'Password files: file1,file2,...',
);
##
@@ -437,7 +440,14 @@
($folder, $auth, $user, $host) = imap_spec($folder);
}
- my $pass = &getpass("Password: ");
+ # my $pass = &getpass("Password: ");
+ my $pass;
+ if ($opt_allowinsecuregetpass) {
+ require IM::InsecureGetPass && import IM::InsecureGetPass;
+ $pass = &insecure_getpass("Password: ", "imap/", $auth, $user, $host);
+ } else {
+ $pass = &getpass("Password: ");
+ }
# im_warn("accessing IMAP/$auth:$user\@$host\n") if (&verbose);
Mew-dist メーリングリストの案内