/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
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

Tak til alle 3 for input

--
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



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."

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste