[Mew-dist 1667] Get Password from File patch for IM-65
AOSASA Shigeru
aozasa at example.com
1997年 8月 27日 (水) 08:23:32 JST
はじめまして。青笹茂といいます。
Kazu さんに怒られてしまいそうですが、IM-65 で
pop/POP, pop/APOP, imap/AUTH, imap/LOGIN, (http/???)
のパスワードをファイルに書いておけるようにする
パッチです。
http://www.sakuranet.or.jp/~aozasa/shige/doc/comp/patches-ja.html
にも置いてあります。
--
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-62~dist/IM.in/Imap.pm.in im-62/IM.in/Imap.pm.in
--- im-62~dist/IM.in/Imap.pm.in Sun Aug 17 14:50:06 1997
+++ im-62/IM.in/Imap.pm.in Thu Aug 21 06:33:56 1997
@@ -512,7 +512,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-62~dist/IM.in/InsecureGetPass.pm.in im-62/IM.in/InsecureGetPass.pm.in
--- im-62~dist/IM.in/InsecureGetPass.pm.in Thu Jan 1 09:00:00 1970
+++ im-62/IM.in/InsecureGetPass.pm.in Thu Aug 21 05:58:07 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-62~dist/IM.in/Pop.pm.in im-62/IM.in/Pop.pm.in
--- im-62~dist/IM.in/Pop.pm.in Mon Aug 18 15:09:22 1997
+++ im-62/IM.in/Pop.pm.in Thu Aug 21 06:20:04 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-62~dist/configure im-62/configure
--- im-62~dist/configure Wed Aug 20 19:42:15 1997
+++ im-62/configure Thu Aug 21 06:25:08 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-62~dist/configure.el im-62/configure.el
--- im-62~dist/configure.el Wed Aug 20 19:41:54 1997
+++ im-62/configure.el Thu Aug 21 06:24:17 1997
@@ -36,8 +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"
- "LocalMbox.pm" "Log.pm" "MD5.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"
"Scan.pm" "Smtp.pm" "Stdio.pm"
diff -urN im-62~dist/configure.in im-62/configure.in
--- im-62~dist/configure.in Wed Aug 20 19:41:41 1997
+++ im-62/configure.in Thu Aug 21 06:22:49 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-62~dist/imcat.in im-62/imcat.in
--- im-62~dist/imcat.in Tue Aug 19 21:00:05 1997
+++ im-62/imcat.in Thu Aug 21 06:19:23 1997
@@ -47,6 +47,8 @@
'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 +152,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-62~dist/imget.in im-62/imget.in
--- im-62~dist/imget.in Fri Aug 15 09:09:47 1997
+++ im-62/imget.in Thu Aug 21 06:13:01 1997
@@ -69,6 +69,8 @@
'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-62~dist/imls.in im-62/imls.in
--- im-62~dist/imls.in Fri Aug 15 17:02:08 1997
+++ im-62/imls.in Thu Aug 21 06:34:51 1997
@@ -58,6 +58,8 @@
'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,...',
);
##
@@ -439,7 +441,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 メーリングリストの案内