[Mew-dist 05080] GetPass.pm (Re: imget APOP error, その他いろいろ )

Motonori Nakamura motonori at example.com
1998年 6月 20日 (土) 07:08:28 JST


>>>>> On Fri, 12 Jun 1998 16:16:21 +0900, Akihisa Konno <minnie at example.com> said:

minnie>   オリジナルの im-93/IM.in/GetPass.pm.in へのパッチです。

minnie> +    # may well be wrapped by "if (-t STDIN) { ... }" ???

これ、いいかもしれませんね。


>>>>> On Fri, 12 Jun 1998 11:33:54 +0900, Motonori Nakamura <motonori at example.com> said:

|> ただ、やはり PATH をちゃんと設定しないと perl に怒られてしまうようなので
|> (絶対パスでコマンドを指定しても)、結局 PATH のケアは必要のようです。

これも忘れないうちに。


>>>>> On Fri, 19 Jun 1998 21:52:03 +0900, tosaka at example.com said:

tosaka> IMのConfigファイル中で
tosaka> UsePwFiles=yesとして 
tosaka> PwFilesを設定して使った場合の
tosaka> 不都合を報告します.

tosaka> # このような使い方している人はいなさそうですが...

すでに mew-dist 05029 で報告されていたりします。


>>>>> On Tue, 9 Jun 1998 23:36:17 +0900, Motonori Nakamura <motonori at example.com> said:

ichikawa> いいかと思ったんですが、'#'があったらおんなじだったりして...

|> 行頭の # だけをコメント開始として解釈するというのでどうでしょう?


以上をまとめた、im-93 へのパッチです。
問題がないかどうか確認してもらえると幸いです。


diff -cr im-93-/IM.in/GetPass.pm.in im-93/IM.in/GetPass.pm.in
*** im-93-/IM.in/GetPass.pm.in	Wed Jan 14 14:43:18 1998
--- im-93/IM.in/GetPass.pm.in	Sat Jun 20 06:58:16 1998
***************
*** 45,72 ****
      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;
! 
  	$termios = new POSIX::Termios;
  	$termios->getattr(fileno(STDIN));
  	$c_lflag = $termios->getlflag;
  	$termios->setlflag($c_lflag & ~&POSIX::ECHO);
  	$termios->setattr(fileno(STDIN), &POSIX::TCSANOW);
      }
  
      print STDERR $prompt;
      flush('STDERR');
      chomp($secret = <STDIN>);
      print STDERR "\n";
  
!     unless (win95p()) {
  	$termios->setlflag($c_lflag);
  	$termios->setattr(fileno(STDIN), &POSIX::TCSANOW);
      }
  
      return $secret;
--- 45,84 ----
      my ($prompt) = @_;
      my ($secret, $termios, $c_lflag);
  
!     if (! -t STDIN) {
! 	# stty is not effective for Mule since it's not terminal base.
  	# Anyway, Mew never echos back even if getpass echos back.
!     } elsif (eval 'require POSIX') {
! 	import POSIX qw(termios_h);
  	$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.
+ 	my ($OldPath) = $ENV{'PATH'};	# for SUID version
+ 	$ENV{'PATH'} = '/bin:/usr/bin';
+ 	system('/bin/stty -echo'); # Ignore errors.
+ 	$ENV{'PATH'} = $OldPath;
      }
+     # POSIX doesn't exist for Win95, sigh.
  
      print STDERR $prompt;
      flush('STDERR');
      chomp($secret = <STDIN>);
      print STDERR "\n";
  
!     if (! -t STDIN) {
! 	# no operation
!     } elsif (defined $termios) {	# POSIX-ish
  	$termios->setlflag($c_lflag);
  	$termios->setattr(fileno(STDIN), &POSIX::TCSANOW);
+     } elsif (unixp()) {		# non-POSIX-ish UNIX.
+ 	my ($OldPath) = $ENV{'PATH'};	# for SUID version
+ 	$ENV{'PATH'} = '/bin:/usr/bin';
+ 	system('/bin/stty echo');	# Ignore errors.
+ 	$ENV{'PATH'} = $OldPath;
      }
  
      return $secret;
***************
*** 191,205 ****
  	while (<PASSFILE>) {
  	    chomp;
  	    next if (/^(#.*)?$/); 
! 	    s/\s+(\#.*)?$//;	# remove comments
! 	    my ($tmp_proto_auth, $tmp_host, $tmp_user, $tmp_pass) = split;
! 	    my ($tmp_proto, $tmp_auth) = split('/', $tmp_proto_auth);
! 	    if (($tmp_proto eq $proto)
! 		&& ($tmp_auth eq $auth)
! 		&& ($tmp_host eq $host)
! 		&& ($tmp_user eq $user)) {
! 		close (PASSFILE);
! 		return $tmp_pass;
  	    }
  	}
  	close (PASSFILE);
--- 203,219 ----
  	while (<PASSFILE>) {
  	    chomp;
  	    next if (/^(#.*)?$/); 
! #	    s/\s+(\#.*)?$//;	# remove comments
! 	    if (/^(\S+)\s+(\S+)\s+(\S+)\s+(\S.+)$/) {
! 		my ($tmp_host, $tmp_user, $tmp_pass) = ($2, $3, $4);
! 		my ($tmp_proto, $tmp_auth) = split('/', $1);
! 		if (($tmp_proto eq $proto)
! 		    && ($tmp_auth eq $auth)
! 		    && ($tmp_host eq $host)
! 		    && ($tmp_user eq $user)) {
! 		    close (PASSFILE);
! 		    return $tmp_pass;
! 		}
  	    }
  	}
  	close (PASSFILE);

- motonori



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