Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]699[/thread]

perl und .htaccess: Scripz soll Passwortdatei erzeugen



<< >> 2 Einträge, 1 Seite
folter
 2006-03-25 19:40
#7199 #7199
User since
2006-03-25
1 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen!
Vielleicht könnt Ihr mir mit einem Tipp zur Seite stehen, denn ich weiss so langsam nicht mehr weiter.

Also: Ein Script liest eine Textedatei aus, und wandelt diese in eine Passwortdatei um. Auf diese Passwortdatei verweist eine .htaccess Datei, die beim Aufruf durch den User das Login Fenster einblendet.

Soweit so gut: Das Script läuft und macht eigentlich auch genau das was es tun soll. Allerdings nur fast, denn ein Login ist immer nur mit dem Benutzer möglich, der als erster in der Textdatei / Passwortdatei aufgelistet ist. Bei allen anderen X Benutzer schlägt die Anmeldung fehl.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/perl
use CGI::Carp 'fatalsToBrowser';
umask (011);

require 'cgi-lib.pl';


# Change this next line to the path to your words.txt
$unencrypted_pwords='/pfad/zur/textdatei.txt';

# Change this next line to the path to your .htpasswd file
$htpasswd_FILE = '/pfad/zur/passwortdatei.pwd';


# Alte Passwortdatei löschen
unlink ("$htpasswd_FILE");

# You shouldn't have to modify anything below this unless you know what you're doing.
$salt1 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
print &PrintHeader;
open(PREAD,"<$unencrypted_pwords") ||&CgiError('Could not open unencrypted password file');
while (<PREAD>) {
chop $_;
($user,$pass) = split(/\:/,$_);
$words{$user}=$pass;
}
close (PREAD);
open(HTPASS,">>$htpasswd_FILE") || &error('Could not find specified file');
$number = 0;
foreach $key (keys %words) {
$salt = substr($salt1,rand(length($salt1)),1);
$salt .= substr($salt1,rand(length($salt1)),1);
$pass=$words{$key};
$encryptedpass = crypt ($pass,$salt);
print HTPASS "$key:$encryptedpass\n";
$words{$key}=$encryptedpass;
++$number;
}
close(HTPASS);

print "<p><strong>Fertig! $number Benutzernamen und Passwörter wurden in die Datei $htpasswd_FILE geschrieben.</strong><P>";
foreach $key (keys %words) {
print "$key : $words{$key}<BR>\n";
}


Die in der Datei angegebene cgi-lib.pl ist etwas länger und es wird glaube ich ein wenig unübersichtlich wenn ich die hier poste. Zur Vollständigkeit aber den Link wo sie zu finden ist:
http://cgi-lib.berkeley.edu//2.18/cgi-lib.pl.txt

Die Textdatei mit den Passworten im Klartext sieht so aus:

Quote
K1234:volk
VBO:sicherdas


Das Ergebnis des Scriptdurchlauf sieht das so aus:
Quote
K1234:0Z1krSG1cYjgc
VBO:kiBnHNG.L/JU6


Eigentlich sieht das Ergebnis ganz solide aus, daher bin ich mir nicht sicher woran es liegen könnte. Hat jemand eine Idee?

Vielen Dank im Voraus und viele Grüße aus Köln,

folter

edit pq: code-tags statt quote-tags\n\n

<!--EDIT|pq|1143468372-->
ptk
 2006-03-26 03:06
#7200 #7200
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Du könntest auch das Programm htpasswd verwenden, um neue Passwörter hinzuzufügen.
<< >> 2 Einträge, 1 Seite



View all threads created 2006-03-25 19:40.