js-home.org, 18.05.2012
 

5 Kleiner Bonusmehr mit LDAP: Apache
Nach einigen Minuten suche im Web hab ich dann auch etwas gefunden, wie jeder Benutzer sein Passwort selbst im LDAP ändern kann - über ein Web-Frontend.

Zuerst brauchen wir dazu einen mit .htaccess geschützten Bereich. Und in desser Gruppe sollten alle Leute sein, die ihr Passwort ändern dürfen.

Dann brauchen wir PHP mit LDAP-Unterstützung.

Und dann folgende Seite in dem Verzeichnis:

index.php
<?php
require("ldap.php");
?>
<html>
<head>
<title>Passwort ändern</title>
</head>
<body>
<?php
if (isset($change) && isset($oldpw) && isset($newpw1) && $newpw1==$newpw2)
{
    if (ldap_chancePasswort($PHP_AUTH_USER,$newpw1,$oldpw))
        echo "Passwort wurde geändert!<p>\n";
    else
        echo "Passwort wurde <b>nicht</b> geändert!!<p>\n";
}
else if (isset($change))
{
    echo "Passwort wurde <b>nicht</b> geändert!!<p>\n";
}
?>

<form method=post>
<table>
<tr><td>Login</td><td>
<?php
echo $PHP_AUTH_USER;
?>
</td></tr>
<tr><td>altes Passwort</td><td><input type=password name=oldpw></td></tr>
<tr><td>neues Passwort</td><td><input type=password name=newpw1></td></tr>
<tr><td>neues Passwort</td><td><input type=password name=newpw2></td></tr>
<tr><td></td><td><input type=submit name=change value='ändern'></td></tr></table>
</form>
</body>
</html>


Wer PHP kann, sieht, daß noch eine "ldap.php" genötigt wird, die packen gleich mit ins Verzeichnis:

ldap.php
<?php

define(LDAP_SERVER,"ldapserver1");
define(LDAP_BASE,"o=js-home.org");
define(LDAP_GROUPBASE,"ou=gruppen,o=js-home.org");
define(LDAP_USERBASE,"ou=benutzer,o=js-home.org");

function ldap_chancePasswort($username,$newpass,$oldpass)
{
    $ret=0;
    if (isset($username) and isset($newpass) and isset($oldpass))
    {
        $ldapconn = ldap_connect(LDAP_SERVER);
        $ldapbind = @ldap_bind($ldapconn,"uid=".$username.",".LDAP_USERBASE,$oldpass);

        if($ldapbind)
        {
            if (ldap_mod_replace ($ldapconn, "uid=".$username.",".LDAP_USERBASE, array('userpassword' => $newpass)))
            { 
                $ret=1;
            }
        }
    }
}
?>


Über die DEFINES am Anfang wird die Sachen eingerichtet, kennen wir ja inzwischen schon, oder?




All actions are logged, copyright © JS