|
| password prompt Fra : Kim Emax |
Dato : 06-04-03 01:27 |
|
Hey
Sidder og sysler med et add-mailbox script og har som sådan ikke brug for
det, jeg nu spørger om, men er den nice-to-have ting.
Jeg ønsker at prompte personen, hvis scriptet køres fra prompten, efter
password, som så skal tastes to gange... det skal ikke vises i klar tekst i
prompten, men som stjerner. Hvordan gør man det? og huskes de variabler, der
er sendt med ved kaldet af scriptet? (perl test.pl -bruger -anden_tekst)
--
Take Care
Kim Emax - Freelance programmør
http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop
| |
Bjarne (06-04-2003)
| Kommentar Fra : Bjarne |
Dato : 06-04-03 09:09 |
|
Kim Emax skrev:
> Hey
>
> Sidder og sysler med et add-mailbox script og har som sådan ikke brug for
> det, jeg nu spørger om, men er den nice-to-have ting.
>
> Jeg ønsker at prompte personen, hvis scriptet køres fra prompten, efter
> password, som så skal tastes to gange... det skal ikke vises i klar tekst i
> prompten, men som stjerner. Hvordan gør man det? og huskes de variabler, der
> er sendt med ved kaldet af scriptet? (perl test.pl -bruger -anden_tekst)
>
Her er lidt du evt. kan bygge videre på:
print "Indtast password: ";
use Term::ReadKey;
ReadMode ('noecho');
$password = ReadLine(0);
chomp $password;
ReadMode ('normal');
Bjarne
| |
Henrik Bøgh (06-04-2003)
| Kommentar Fra : Henrik Bøgh |
Dato : 06-04-03 11:56 |
|
Kim Emax wrote in dk.edb.programmering.perl:
> Jeg ønsker at prompte personen, hvis scriptet køres fra prompten, efter
> password, som så skal tastes to gange... det skal ikke vises i klar tekst
> i prompten, men som stjerner. Hvordan gør man det? og huskes de variabler,
> der er sendt med ved kaldet af scriptet? (perl test.pl -bruger
> -anden_tekst)
Hvis du kan nøjes med at vise "ingenting" i stedet er det noget lettere.
Du bør i så tilfælde kigge på Term::Readkey.
Hvis du ønsker at undgå tredjeparts-moduler opnår du det samme med
system("stty -echo");
> Kim Emax - Freelance programmør
--
Med Venlig Hilsen: Henrik Bøgh || http://henrik.boegh.net/geek/usenet.html
"You know what the problem with Hollywood is? They make shit!"
-- John Travolta as Gabriel Shear in 'Swordfish'
| |
Vlad Tepes (06-04-2003)
| Kommentar Fra : Vlad Tepes |
Dato : 06-04-03 13:01 |
|
* Kim Emax:
>
> Jeg ønsker at prompte personen, hvis scriptet køres fra prompten, efter
> password, som så skal tastes to gange... det skal ikke vises i klar tekst i
> prompten, men som stjerner. Hvordan gør man det? og huskes de variabler, der
> er sendt med ved kaldet af scriptet? (perl test.pl -bruger -anden_tekst)
Du må antagelig gjøre noe á la dette:
#!/usr/bin/perl -w
use strict;
use warnings;
use Term::ReadKey;
print "Enter passwd: ";
my $passwd = "";
ReadMode 4; # Turn off controls keys
{
my $key;
1 while not defined ($key = ReadKey(-1) );
last if $key eq "\n";
$passwd .= $key;
print "*";
redo;
}
ReadMode 0;
print "\nPassword: $passwd\n";
--
Vlad
| |
Morten Guldager (06-04-2003)
| Kommentar Fra : Morten Guldager |
Dato : 06-04-03 14:48 |
|
Sun, 06 Apr 2003 at 12:01 GMT Vlad Tepes wrote
> * Kim Emax:
>>
>> Jeg ønsker at prompte personen, hvis scriptet køres fra prompten, efter
>> password, som så skal tastes to gange... det skal ikke vises i klar tekst i
>> prompten, men som stjerner. Hvordan gør man det? og huskes de variabler, der
>> er sendt med ved kaldet af scriptet? (perl test.pl -bruger -anden_tekst)
>
> Du må antagelig gjøre noe á la dette:
> 1 while not defined ($key = ReadKey(-1) );
Hmm -1 betyder non-blocking read, du laver busywait. - ugodt!
Jeg ville kode det sådan her:
#!/usr/bin/perl -w
use strict;
use warnings;
use Term::ReadKey;
print "Enter passwd: ";
my $passwd = '';
ReadMode 5;
while (defined (my $key = ReadKey(0)))
{
last if $key eq "\r";
if ($key eq "\x7f")
{
print "\b \b";
$passwd =~ s/.$//;
next;
}
print "*";
$passwd .= $key;
}
ReadMode 0;
print "\n";
warn "\npw = >$passwd<\n";
Backspase tasten sender kode 127 på mit system, det er ikke altid ens.
Mon der findes en portabel måde at detektere backspase på?
/Morten
| |
Vlad Tepes (06-04-2003)
| Kommentar Fra : Vlad Tepes |
Dato : 06-04-03 17:58 |
|
* Morten Guldager:
> Sun, 06 Apr 2003 at 12:01 GMT Vlad Tepes wrote
>> * Kim Emax:
>>>
>>> Jeg ønsker at prompte personen, hvis scriptet køres fra prompten, efter
>>> password, som så skal tastes to gange... det skal ikke vises i klar tekst i
>>> prompten, men som stjerner. Hvordan gør man det? og huskes de variabler, der
>>> er sendt med ved kaldet af scriptet? (perl test.pl -bruger -anden_tekst)
>>
>> Du må antagelig gjøre noe á la dette:
>
>> 1 while not defined ($key = ReadKey(-1) );
>
> Hmm -1 betyder non-blocking read, du laver busywait. - ugodt!
Hvorfor?
> Jeg ville kode det sådan her:
>
> #!/usr/bin/perl -w
>
> use strict;
> use warnings;
> use Term::ReadKey;
>
> print "Enter passwd: ";
> my $passwd = '';
>
> ReadMode 5;
> while (defined (my $key = ReadKey(0)))
> {
> last if $key eq "\r";
> if ($key eq "\x7f")
> {
> print "\b \b";
> $passwd =~ s/.$//;
> next;
> }
> print "*";
> $passwd .= $key;
> }
> ReadMode 0;
> print "\n";
>
> warn "\npw = >$passwd<\n";
>
> Backspase tasten sender kode 127 på mit system, det er ikke altid ens.
> Mon der findes en portabel måde at detektere backspase på?
Muligens vil dette være bedre:
#!/usr/bin/perl
use strict;
use warnings;
use Term::ReadKey;
print "Enter passwd: ";
my $passwd = '';
ReadMode 5;
while (defined (my $key = ReadKey(0)))
{
my %ctrlchar = GetControlChars();
if ( $key eq $ctrlchar{INTERRUPT} ) {
$passwd = "";
last;
} elsif ( $key eq "\r" ) {
last;
} elsif ($key eq $ctrlchar{ERASE}) {
if ($passwd) {
print "\b \b";
$passwd =~ s/.$//;
}
} else {
print "*";
$passwd .= $key;
}
next;
}
ReadMode 0;
print "\n";
warn "\npw = >$passwd<\n";
Noen som kan sjekke om dette fungerer under windows?
--
Vlad
| |
Morten Guldager (06-04-2003)
| Kommentar Fra : Morten Guldager |
Dato : 06-04-03 19:09 |
|
Sun, 06 Apr 2003 at 16:58 GMT Vlad Tepes wrote
> * Morten Guldager:
>
>> Sun, 06 Apr 2003 at 12:01 GMT Vlad Tepes wrote
>>>
>>> Du må antagelig gjøre noe á la dette:
>>
>>> 1 while not defined ($key = ReadKey(-1) );
>>
>> Hmm -1 betyder non-blocking read, du laver busywait. - ugodt!
>
> Hvorfor?
Spørger du hvorfor busy wait er usmart eller hvorfor jeg påstår
at din kode bruger busy wait?
Jeg antager det første.
Busy wait er usmart da det er spild af CPU tid.
Det er kun i de tilfælde hvor maskinen der afvikler programmet
garanteret ikke har andet at lave at busy wait efter min mening
kan være en ok teknik. (eller hvis det simpelthen ikke er muligt
at løse opgaven på anden vis)
Perl afvikles vist oftest på et multitasking system hvorfor det
må antages at der kan være andre opgaver for CPU'en.
/Morten
| |
Vlad Tepes (06-04-2003)
| Kommentar Fra : Vlad Tepes |
Dato : 06-04-03 20:15 |
|
* Morten Guldager <spamtrap@mogul.dk> wrote:
>>>> 1 while not defined ($key = ReadKey(-1) );
>>>
>>> Hmm -1 betyder non-blocking read, du laver busywait. - ugodt!
>>
>> Hvorfor?
>
> Busy wait er usmart da det er spild af CPU tid.
Ok, takk.
--
Vlad
| |
Kim Emax (06-04-2003)
| Kommentar Fra : Kim Emax |
Dato : 06-04-03 13:30 |
| | |
Kim Emax (06-04-2003)
| Kommentar Fra : Kim Emax |
Dato : 06-04-03 21:43 |
|
Kim Emax wrote:
> Jeg ønsker at prompte personen, hvis scriptet køres fra prompten,
> efter password, som så skal tastes to gange... det skal ikke vises i
> klar tekst i prompten, men som stjerner. Hvordan gør man det? og
> huskes de variabler, der er sendt med ved kaldet af scriptet? (perl
> test.pl -bruger -anden_tekst)
Hvis andre skulle løbe ind i lignede problem, så løste jeg det ved:
system("passwd $USER");
Det er tilstrækkeligt i denne situation, men ikke en brugbar løsning i andre
--
Take Care
Kim Emax - Freelance programmør
http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop
| |
Rune B. Broberg (06-04-2003)
| Kommentar Fra : Rune B. Broberg |
Dato : 06-04-03 21:46 |
|
Kim Emax <newsgroup@remove-emax.dk> wrote:
> Kim Emax wrote:
>
>> Jeg ?nsker at prompte personen, hvis scriptet k?res fra prompten,
>> efter password, som s? skal tastes to gange... det skal ikke vises i
>> klar tekst i prompten, men som stjerner. Hvordan g?r man det? og
>> huskes de variabler, der er sendt med ved kaldet af scriptet? (perl
>> test.pl -bruger -anden_tekst)
>
> Hvis andre skulle l?be ind i lignede problem, s? l?ste jeg det ved:
>
> system("passwd $USER");
>
> Det er tilstr?kkeligt i denne situation, men ikke en brugbar l?sning i andre
>
?!?!
Her hos mig er beskrivelsen af passwd "Change user password" ... ikke
alt for betryggende at et tilfældigt perl-script skulle begynde på det?
--
Rune B. Broberg
Feel free to GPG-encrypt email sent to me. Keyid: 0x87CD3DBD
| |
Kim Emax (06-04-2003)
| Kommentar Fra : Kim Emax |
Dato : 06-04-03 21:49 |
|
Rune B. Broberg wrote:
> Her hos mig er beskrivelsen af passwd "Change user password" ... ikke
> alt for betryggende at et tilfældigt perl-script skulle begynde på
> det?
Det sker kun i forbindelse med oprettelse af en mailbox og der er solide
checks på, hvad der er indtastet inden dette script køres...
--
Take Care
Kim Emax - Freelance programmør
http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop
| |
Lars Balker Rasmusse~ (06-04-2003)
| Kommentar Fra : Lars Balker Rasmusse~ |
Dato : 06-04-03 22:01 |
|
"Kim Emax" <newsgroup@remove-emax.dk> writes:
> Hvis andre skulle løbe ind i lignede problem, så løste jeg det ved:
>
> system("passwd $USER");
For at slippe for overraskelser i $USER er det en god ide at skrive
ovenstående som
system "passwd", $USER
da perl så ikke starter en shell, men exec'er passwd direkte.
--
Lars Balker Rasmussen "S.M.R.T."
| |
Kim Emax (06-04-2003)
| Kommentar Fra : Kim Emax |
Dato : 06-04-03 22:19 |
|
Lars Balker Rasmussen wrote:
> For at slippe for overraskelser i $USER er det en god ide at skrive
> ovenstående som
>
> system "passwd", $USER
>
> da perl så ikke starter en shell, men exec'er passwd direkte.
Som skrevet, så er der checket godt og grundigt på det inden da, men tak for
tippet, tjekker lige op på det, du skriver her... For meget sikkerhed skader
ikke
Kan jeg så gøre samme med adduser? system "adduser -p", $USER $PASS ?
--
Take Care
Kim Emax - Freelance programmør
http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop
| |
Jesper Louis Anderse~ (07-04-2003)
| Kommentar Fra : Jesper Louis Anderse~ |
Dato : 07-04-03 08:47 |
|
On Sun, 6 Apr 2003 23:19:11 +0200, Kim Emax <newsgroup@remove-emax.dk> wrote:
> Som skrevet, så er der checket godt og grundigt på det inden da, men tak for
> tippet, tjekker lige op på det, du skriver her... For meget sikkerhed skader
> ikke
>
> Kan jeg så gøre samme med adduser? system "adduser -p", $USER $PASS ?
Kig på useradd i stedet hvis du vil det der (alternativt pw, hvis det er
FreeBSD).
--
Jesper
| |
Lars Balker Rasmusse~ (06-04-2003)
| Kommentar Fra : Lars Balker Rasmusse~ |
Dato : 06-04-03 23:02 |
|
"Kim Emax" <newsgroup@remove-emax.dk> writes:
> Kan jeg så gøre samme med adduser? system "adduser -p", $USER $PASS ?
perldoc -f system
--
Lars Balker Rasmussen "S.M.R.T."
| |
|
|