[Mew-dist 05056] Re: imget APOP error

Akihisa Konno minnie at example.com
1998年 6月 12日 (金) 15:39:04 JST


  IM/GetPass.pmへのパッチを流した金野(minnie)@東大船舶(現 環境)です。
セキュリティのことはちっとも考えていませんでした^^;;。それと、前のパッ
チはピントがぼけていたので、修正版です。
  Win95の環境では今までと同じで、パスワード類が表示されますが、
	・Term::ReadKey が使えたら使う。
	・(-t STDIN and -t STDERR)の場合に限り、ANSIエスケープシーケン
	  スを使ってなんとかする。(?)
のような方法でごまかせるかもしれません。(試してません。)

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  ._ _  * ._  ._  *  _ 	    金野 祥久	 東大・工・船舶海洋工・流体研
  [ | ) | [ ) [ ) | (/,		 minnie at example.com
-=-=-=- はじめはピンとこないくらいの方が、いいんじゃないですか? -=-=-=-
-------------- next part --------------
--- IM.in/GetPass.pm.in.orig	Wed Jan 14 14:43:18 1998
+++ IM.in/GetPass.pm.in	Fri Jun 12 15:16:43 1998
@@ -45,18 +45,22 @@
     my ($prompt) = @_;
     my ($secret, $termios, $c_lflag);
 
-    unless (win95p()) {
-	# POSIX doesn't exist for Win95, sigh.
-	# stty is not effective for Mule since it's not
-	# terminal base, sigh.
-	# Anyway, Mew never echos back even if getpass echos back.
-	require POSIX && import POSIX;
+    # may well be wrapped by "if (-t STDIN) { ... }" ???
 
-	$termios = new POSIX::Termios;
-	$termios->getattr(fileno(STDIN));
-	$c_lflag = $termios->getlflag;
-	$termios->setlflag($c_lflag & ~&POSIX::ECHO);
-	$termios->setattr(fileno(STDIN), &POSIX::TCSANOW);
+    # POSIX doesn't exist for Win95, sigh.
+    # stty is not effective for Mule since it's not
+    # terminal base, sigh.
+    # Anyway, Mew never echos back even if getpass echos back.
+    if (eval 'require POSIX') {
+      import POSIX;
+      $termios = new POSIX::Termios;
+      $termios->getattr(fileno(STDIN));
+      $c_lflag = $termios->getlflag;
+      $termios->setlflag($c_lflag & ~&POSIX::ECHO);
+      $termios->setattr(fileno(STDIN), &POSIX::TCSANOW);
+    } elsif (unixp()) {		# non-POSIX-ish UNIX.
+      # stty might be available.
+      system('/bin/stty -echo'); # Ignore errors.
     }
 
     print STDERR $prompt;
@@ -64,9 +68,11 @@
     chomp($secret = <STDIN>);
     print STDERR "\n";
 
-    unless (win95p()) {
-	$termios->setlflag($c_lflag);
-	$termios->setattr(fileno(STDIN), &POSIX::TCSANOW);
+    if (defined $termios) {	# POSIX-ish
+      $termios->setlflag($c_lflag);
+      $termios->setattr(fileno(STDIN), &POSIX::TCSANOW);
+    } elsif (unixp()) {		# non-POSIX-ish UNIX.
+      system('/bin/stty echo');	# Ignore errors.
     }
 
     return $secret;


Mew-dist メーリングリストの案内