LDAP Registration mit LDAP

Status
Für weitere Antworten geschlossen.

xcheta

Benutzer
Mitglied seit
13. Mrz 2015
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Servus Leute,

Ich will mein ownCloud Projekt erweitern und es den Benutzern einfacher machen. Ich habe in meiner Owncloud LDAP eingebunden. Ich find es nur etwas lästig jeden einzelnen neuen Benutzer mit der Hand einzutragen. Was stell ich mir also vor ??

Ich will mir ein kleines PHP-Script schreiben mit einer Registrierung. Darin sollte z.B Name, Vorname , eMail und Passwort sein. Wurde dieses ausgefüllt soll ein Shell Befehl ausgeführt werden der den Benutzer erstmal in eine vorläufige Gruppe Speichert z.B Unregistrierte Benutzer. Danach könnte ich dann die Benutzer in LDAP aufteilen.

Kennt jemand den genauen Befehl wie man Benutzer hinzufügt über eine Shell? Meine: dc ist: "cn=admin","dc=example","dc=com","test1".

Die Objektklasse für die Gruppe Unregistrierte Benutzer ist PosixGroup und die Objektklasse für die Benutzer soll PosixAccount sein.
Hat jemand so etwas schon einmal gemacht ? Oder gibt es sogar inzwischen sowas ?

Ich habe mich mal an ein kleines PHP Skript rangewagt obwohl meine Erfahrung damit nicht sehr groß sind vll. könnt ihr mir sagen ob der Ansatz richtig ist.

Rich (BBCode):
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>

<body>
   <form action = "registrieren.php" method = "post">
        Name: <input name = "name"><p>
        Vorname: <input name = "vname"><p>
         eMail: <input name = "email"><p>
       Passwort: <input name = "pw"><p>
        
      
   <br>
   <br>
       <input type = "submit" name="submit" value="Speichern">
       <input type = "reset">

        
        
   </form>
)
<?php
 if (isset($_POST["submit"]))
{
   $ds=ldap_connect("192.168.52.129");  // Annahme: der LDAP Server befindet
                           // sich auf diesem Host
   
   if ($ds) {
      // bind mit passendem dn für aktulisierenden Zugriff
      $r=ldap_bind($ds,"cn=admin","dc=example","dc=com","test1");
   
      // Daten vorbereiten
      $info["cn"]="$_POST["vname"]";
      $info["sn"]="$_POST["name"]";
      $info["mail"]="$_POST["mail"]";
      $info["objectclass"]="PosixAccount";
   
      // hinzufügen der Daten zum Verzeichnis
      $r=ldap_add($ds, "cn=$_POST["vname"], o=unregbenutzer,cn=com", $info);
   
      ldap_close($ds);
         }
   else 
      {
         echo "Verbindung zum LDAP Server nicht möglich!";
      }
}
?>
 

fbartels

Benutzer
Mitglied seit
19. Mrz 2013
Beiträge
284
Punkte für Reaktionen
2
Punkte
24
Hallo xcheta,

ich habs jetzt nicht selber ausprobiert, aber das hier sieht nach einem recht vollständigen Beispiel zur Erstellung von Benutzer mittels eines php Forumars aus: http://theurbanpenguin.com/wp/?p=1048
 

xcheta

Benutzer
Mitglied seit
13. Mrz 2015
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Erstmal danke für die super schnelle Antwort =). Ich habe es gleich mal ausprobiert. Ich habe eine Allgemein: Organisationseinheit erstellt mit dem namen Users.
Danach habe ich meinen Code abgeändert:

<html>
<head>
<link rel = "stylesheet" type = "text/css" href = "stylesheets/stylesheet.css">
<title>TheUrbanPenguin PHP LDAP Add</title>
</head?
<body>
<h1> Adding LDAP User</h1>
<hr>
<?php
$cn = htmlspecialchars($_POST['username']);
$givenName = htmlspecialchars($_POST['firstname']);
$surname = htmlspecialchars($_POST['lastname']);
echo "Adding user: $cn " . '<br>';
$ds = ldap_connect("localhost") or die ("Could not connect to LDAP Server");
if ($ds) {
$r = ldap_bind($ds,"cn=admin,dc=example,dc=com","test1");
$info["cn"] = $cn;
$info["givenName"] = $givenName;
$info["surname"] = $surname;
$info["objectClass"] = "inetOrgPerson";
$r = ldap_add($ds,"cn=$cn,ou=users,dc=example,dc=com",$info);
$sr = ldap_search($ds,"dc=example,dc=com","cn=$cn");
$info = ldap_get_entries($ds,$sr);
echo "The user:<span class='result'> " . $info[0]["dn"] . "</span> has been created. <br>";
}
ldap_close($ds);
?>
<hr>
<a href = "ldapuseradd.html">Add another user</a>
</body>
</html>

________________________
Also wenn ich den Code ausführe springt er auch ohne probleme auf die Seite wo steht
Adding user: test
The user: has been created.

Zwischen The user: und has been created sollte aber noch die komplette DN stehen die er mir nicht überträgt.

Außerdem fügt er keinen Benutzer hinzu. Die Verbindung scheint er aufzubauen allerdings added er keinen user...
vll kann mir da jemand weiter helfen ?
 

fbartels

Benutzer
Mitglied seit
19. Mrz 2013
Beiträge
284
Punkte für Reaktionen
2
Punkte
24
Ja, das Skript könnte definitiv eine bessere Fehlerbehandlung vertragen.

Ein Blick in den error.log von Apache hätte dir in diesem Fall folgendes verraten:
Code:
[Sat Mar 14 10:03:00 2015] [error] [client 89.182.220.27] PHP Warning:  ldap_bind(): Unable to bind to server: Protocol error in /var/www/test/ldapadduser.php on line 16, referer: http://.../ldapadduser.html

Das führte mich zu http://charithmahawatta.blogspot.de/2011/03/ldapbind-unable-to-bind-to-server.html

Oder in anderen Worten: in der Zeile nach "$ds = ldap_connect("localhost") or die ("Could not connect to LDAP Server");" musst du ein "ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);" einfügen.

;-)
 

xcheta

Benutzer
Mitglied seit
13. Mrz 2015
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Nachdem nun alles Funktioniert hätte ich gern das ganze Projekt ein bisschen erweitert. Ich möchte nun zusätzlich ein Passwort sowie die eMail angeben können und eine Klasse. Leider macht er dies mal wieder nix und in meinem apache2 Log steht nichts. Drin den PHP Code habe ich wie folgt erweitert.

in die ldapadduser.php habe ich folgendes getan.


<html>
<head>
<link rel = "stylesheet" type = "text/css" href = "stylesheets/stylesheet.css">
<title>OwnCloud Registration</title>
</head?
<body>
<h1> OwnCloud Registration </h1>
<hr>
<?php
$cn = htmlspecialchars($_POST['username']);
$givenName = htmlspecialchars($_POST['firstname']);
$surname = htmlspecialchars($_POST['lastname']);
$mail = ($_POST['mail']);
$password = ($_POST['passwort']);
$klasse = htmlspecialchars($_POST['klasse']);
echo "Benutzer wurde hinzugefügt: $cn " . '<br>';
$ds = ldap_connect("localhost") or die ("Could not connect to LDAP Server");
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
if ($ds) {
$r = ldap_bind($ds,"cn=admin,dc=example,dc=com","test1");
$info["cn"] = $cn;
$info["givenName"] = $givenName;
$info["surname"] = $surname;
$info["mail"] = $mail;
$info["userPassword"] = $password;
$info["businessCategory"] = $klasse;
$info["objectClass"] = "inetOrgPerson";
$r = ldap_add($ds,"cn=$cn,ou=Users,dc=example,dc=com",$info);
$sr = ldap_search($ds,"dc=example,dc=com","cn=$cn");
$info = ldap_get_entries($ds,$sr);
echo "Der Benutzerr:<span class='result'> " . $info[0]["dn"] . "</span> wurde hinzugefügt der Administrator kümmert sich um die Freischaltung ihres Accounts. <br>";
}
ldap_close($ds);
?>
<hr>
</body>
</html>
_____-___________________________________________
Wenn ich auf Registration klicke bringt er mir wieder keinen Fehler.

Danke euch allen =)

xcheta
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat