LDAP Registration mit LDAP

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

xcheta

Benutzer
Registriert
13. März 2015
Beiträge
5
Reaktionspunkte
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!";
      }
}
?>
 
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 ?
 
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.

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