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