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