| verzia 1.1, 2002/03/13 13:02:58 |
verzia 1.2, 2002/06/24 18:18:08 |
|
|
| #!/usr/bin/perl |
#!/usr/bin/perl -w |
| |
use strict; |
| |
|
| ############################################################################# |
############################################################################# |
| # # |
# # |
| # pwdhide.pl # |
# pwdhide.pl # |
| # # |
# # |
| |
# Keyboard echo on terminal (TTY) screen switcher. # |
| # Prepina medzi pisanim/nepisanim klavesnice na obrazovku terminalu. # |
# Prepina medzi pisanim/nepisanim klavesnice na obrazovku terminalu. # |
| # # |
# # |
| # Wolcano [13/03/2002] # |
# Wolcano [13/03/2002] # |
| |
# Nepto [24/06/2002] # |
| # # |
# # |
| ############################################################################# |
############################################################################# |
| |
|
| $STR1 = "Tvoje heslo:"; |
# |
| $STR2 = "Password:"; |
# string constants |
| #are we silenced? |
# |
| $SIL = 0; |
my $STR1 = 'Zadaj vstupne heslo:'; |
| |
my $STR2 = 'Password:'; |
| |
|
| |
# |
| |
# output (1 or 0) |
| |
# |
| |
my $OUTPUT = 0; |
| |
|
| |
# |
| |
# verbose (1 or 0) |
| |
# |
| |
my $VERBOSE = 1; |
| |
|
| ############################################################################# |
############################################################################# |
| |
|
| while (<STDIN>) { |
# |
| if ((($_ =~ /^$STR1.*/) || ($_ =~ /^$STR2.*/)) && (!$SIL)) { |
# program name |
| $SIL = 1; |
# |
| system("stty -echo"); |
my $PRG = __FILE__; |
| } |
|
| elsif ($SIL) { |
# |
| $SIL = 0; |
# silenced flag |
| system("stty echo"); |
# |
| } |
my $SIL = 0; |
| |
|
| |
# |
| |
# parent process ID (PID) |
| |
# |
| |
my $PPID = getppid(); |
| |
|
| |
# |
| |
# parent terminal (TTY) |
| |
# |
| |
my $TTY = `ps --no-headers -otty '$PPID'`; |
| |
chomp $TTY; # to remove ending newline |
| |
|
| |
# |
| |
# command variables |
| |
# |
| |
my $CMD_BASE = "stty --file '/dev/$TTY'"; |
| |
|
| |
# |
| |
# do_stty() subroutine |
| |
# |
| |
sub do_stty |
| |
{ |
| |
my $cmd; |
| |
my $onoff; |
| |
|
| |
if ($SIL) { |
| |
$onoff = 'on'; |
| |
$cmd = "$CMD_BASE echo"; |
| |
} else { |
| |
$onoff = 'off'; |
| |
$cmd = "$CMD_BASE -echo"; |
| |
} |
| |
|
| |
system($cmd); |
| |
print STDERR "$PRG: turning $onoff echo ($cmd)\n" if $VERBOSE; |
| |
|
| |
$SIL = !$SIL; |
| } |
} |
| |
|
| |
# |
| |
# line variables |
| |
# |
| |
my $input_data; |
| |
my $raw_line; |
| |
my $line; |
| |
|
| |
# |
| |
# System init |
| |
# |
| |
select(STDIN); $| = 1; # make unbuffered |
| |
select(STDERR); $| = 1; # make unbuffered |
| |
select(STDOUT); $| = 1; # make unbuffered |
| |
|
| |
print STDERR "$PRG: starting...\n" if $VERBOSE; |
| |
|
| |
# |
| |
# main loop |
| |
# |
| |
while ( $input_data = <STDIN> ) { |
| |
foreach $raw_line ( split ( /\n/, $input_data ) ) { |
| |
$line = $raw_line; |
| |
$line =~ s/^\s*//g; |
| |
$line =~ s/\s*$//g; |
| |
next if !length($line); |
| |
|
| |
if ( ( $SIL == 0 && ( $line =~ /^$STR1.*/ || $line =~ /^$STR2.*/ ) ) |
| |
|| ( $SIL != 0 ) ) { |
| |
|
| |
do_stty(); |
| |
} |
| |
|
| |
#print '*******************'.$_."%%\n" if $OUTPUT; |
| |
print STDOUT $raw_line if $OUTPUT; |
| |
} |
| |
} |
| |
|
| |
# restore input echo if it is turned off |
| |
do_stty() if ($SIL); |
| |
|
| |
print STDERR "$PRG: terminating...\n" if $VERBOSE; |
| |
|