Das muss ich mir mal in ner ruhigen Minute zu Gemüte führen. Danke erstmal.
Ich hab jetzt übrigens meine PHP-Benutzerverwaltung mit der von HTACCESS kombiniert. Der User meldet sich also nur noch einmal an (HTACCESS-Anmeldung) und der Benutzername wird dann an PHP übergeben und mit den Benutzerdaten einer MySQL-Tabelle abgeglichen. Darüber wird dann die entsprechende PHP-Session aufgebaut.
Die administrative Pflege der Benutzerdaten erfolgt in PHP. Man pflegt dort die SQL-Tabelle und gleichzeitig wird die HTACCESS Datei für die User und für die Gruppen gepflegt.
Hier mal die einzelnen Funktionen. Vielleicht kann das jemand gebrauchen (oder noch optimieren...das geht sicher noch eleganter).
EDIT: Hab gerade festgestellt, dass meine Kommentierungen nicht immer stimmen. Habe teile oftmals nur kopiert...
Code: Alles auswählen
//Userverwaltungsfunktionen
//neuen User anlegen
function newuser($username,$passwort) {
// Name der .htpasswd-Datei (mit Pfad)
$htpasswd = "../../security/xampp.htusers";
// .htpasswd einlesen
$htp = file($htpasswd);
// alle bisherigen Zeilen einlesen und neu schreiben
$f = fopen($htpasswd, "w");
for ($i = 0; $i < count($htp); $i++) {
fputs($f, $htp[$i]);
}
// Neuen User anhängen
fputs($f,$username . ':' . crypt_apr1_md5($passwort) . "\n");
fclose($f);
}
//neuen User einer Gruppe zuordnen
function newusergroup($username,$group) {
// Name der .htgroup-Datei (mit Pfad)
$htpasswd = "../../security/xampp.htgroups";
// .htpasswd einlesen
$htp = file($htpasswd);
// alle bisherigen Zeilen einlesen und neu schreiben
$f = fopen($htpasswd, "w");
for ($i = 0; $i < count($htp); $i++) {
//gruppenzeile einlesen und in einzelne Benutzer und den Gruppennamen trennen
//prüfen, ob die Zeile die richtige Gruppe ist und dann zuweisen des neuen Benutzers
$zeile = explode(":",$htp[$i]);
if ($zeile[0]==$group) {
$htp[$i] = str_replace(":", ": ".$username." ", $htp[$i]);
$htp[$i] = str_replace(" "," ", $htp[$i]);
}
fputs($f, $htp[$i]);
}
fclose($f);
}
//User löschen
function killuser($username) {
// Name der .htpasswd-Datei (mit Pfad)
$htpasswd = "../../security/xampp.htusers";
// .htpasswd einlesen
$htp = file($htpasswd);
// Zeichenlänge des zu löschenden Usernamens ermitteln
$usernamelaenge=strlen($username);
// alle bisherigen Zeilen einlesen und neu schreiben
// dabei die Zeile, in der der zu löschende User drinsteht aussparen
$f = fopen($htpasswd, "w");
for ($i = 0; $i < count($htp); $i++) {
if (substr($htp[$i],0,$usernamelaenge)!=$username) {
fputs($f, $htp[$i]);
}
}
fclose($f);
}
//user aus der htgroupsdatei löschen
function killusergroup($username,$group) {
// Name der .htgroup-Datei (mit Pfad)
$htpasswd = "../../security/xampp.htgroups";
// .htpasswd einlesen
$htp = file($htpasswd);
// alle bisherigen Zeilen einlesen und neu schreiben
$f = fopen($htpasswd, "w");
for ($i = 0; $i < count($htp); $i++) {
//gruppenzeile einlesen und in einzelne Benutzer und den Gruppennamen trennen
//prüfen, ob die Zeile die richtige Gruppe ist und dann zuweisen des neuen Benutzers
$zeile = explode(":",$htp[$i]);
if ($zeile[0]==$group) {
$htp[$i] = str_replace(" ".$username." "," ", $htp[$i]);
}
fputs($f, $htp[$i]);
}
fclose($f);
}
//Username updaten
function updatename($usernamealt,$usernameneu) {
// Name der .htpasswd-Datei (mit Pfad)
$htpasswd = "../../security/xampp.htusers";
// .htpasswd einlesen
$htp = file($htpasswd);
// Zeichenlänge des upzudatenden Usernamens ermitteln
$usernamelaenge=strlen($username);
$f = fopen($htpasswd, "w");
for ($i = 0; $i < count($htp); $i++) {
if (substr($htp[$i],0,$usernamelaenge)==$username) {
$htp[$i]=str_replace($usernamealt,$usernameneu,$htp[$i]);
}
fputs($f, $htp[$i]);
}
fclose($f);
}
//Username in der htgroupsdatei updaten
function updatenamegroup($usernamealt,$usernameneu) {
// Name der .htpasswd-Datei (mit Pfad)
$htpasswd = "../../security/xampp.htgroups";
// .htpasswd einlesen
$htp = file($htpasswd);
$f = fopen($htpasswd, "w");
for ($i = 0; $i < count($htp); $i++) {
$htp[$i]=str_replace($usernamealt,$usernameneu,$htp[$i]);
fputs($f, $htp[$i]);
}
fclose($f);
}
//Userpasswort updaten
function updatepasswort($username,$userpassnew) {
// Name der .htpasswd-Datei (mit Pfad)
$htpasswd = "../../security/xampp.htusers";
// .htpasswd einlesen
$htp = file($htpasswd);
// Zeichenlänge des upzudatenden Usernamens ermitteln
$usernamelaenge=strlen($username);
$f = fopen($htpasswd, "w");
for ($i = 0; $i < count($htp); $i++) {
if (substr($htp[$i],0,$usernamelaenge)==$username) {
$htp[$i]=$username.":".crypt_apr1_md5($userpassnew);
}
fputs($f, $htp[$i]);
}
fclose($f);
}
//Gruppenzuordnung ändern
function groupchange($username,$altegruppe,$neuegruppe){
//alte Gruppenzugehörigkeit löschen
killusergroup($username,$altegruppe);
newusergroup($username,$neuegruppe);
}
function crypt_apr1_md5($plainpasswd) { //Funktion für htaccess passwortencryption auf windowssystemen; ansonsten crypt() benutzen
$salt = substr(str_shuffle("abcdefghijklmnopqrstuvwxyz0123456789"), 0, 8);
$len = strlen($plainpasswd);
$text = $plainpasswd.'$apr1$'.$salt;
$bin = pack("H32", md5($plainpasswd.$salt.$plainpasswd));
for($i = $len; $i > 0; $i -= 16) { $text .= substr($bin, 0, min(16, $i)); }
for($i = $len; $i > 0; $i >>= 1) { $text .= ($i & 1) ? chr(0) : $plainpasswd{0}; }
$bin = pack("H32", md5($text));
for($i = 0; $i < 1000; $i++) {
$new = ($i & 1) ? $plainpasswd : $bin;
if ($i % 3) $new .= $salt;
if ($i % 7) $new .= $plainpasswd;
$new .= ($i & 1) ? $bin : $plainpasswd;
$bin = pack("H32", md5($new));
}
for ($i = 0; $i < 5; $i++) {
$k = $i + 6;
$j = $i + 12;
if ($j == 16) $j = 5;
$tmp = $bin[$i].$bin[$k].$bin[$j].$tmp;
}
$tmp = chr(0).chr(0).$bin[11].$tmp;
$tmp = strtr(strrev(substr(base64_encode($tmp), 2)),
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
"/phpbb/0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
return "$"."apr1"."$".$salt."$".$tmp;
}