[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 メーリングリストの案内