2016-08-24 2 views
1

La méthode suivante permet de créer un utilisateur avec la capacité de connexion POSIX dans la base de données OpenLDAP. Les utilisateurs disposant du compte créé par la méthode suivante peuvent se connecter à n'importe quelle machine linux client OpenLDAP. En appelant cette méthode, je dois passer les variables suivantes:Comment créer un utilisateur avec la capacité de connexion POSIX dans OpenLDAP via PHP?

  • $ldapconn: Renvoyé par ldap_connect.
  • $username: Le nom d'utilisateur que je veux créer.
  • $password: Le mot de passe pour se connecter au compte.

public static function createNewUser($ldapconn, $username, $password) { 
     if (!$ldapconn) { return false; } 
     require_once("LDAPConfigurator.php"); 
     $r = ldap_bind($ldapconn, "cn=admin,dc=test,dc=com", "12345"); 

     // Prepare data 
     $info = [ 
      'cn'   => $username, 
      'sn'   => $username, 
      'gidNumber'  => 502, 
      'homedirectory' => "/home/ldap/".$username, 
      'loginShell' => "/bin/sh", 
      'password'  => $password, 
      'uidNumber'  => 2333, // Can I set auto increment for this value? 
      'username'  => $username, 
      'objectclass' => [ 
       'inetOrgPerson', 
       'posixAccount', 
       'top' 
      ] 
     ]; 

     // Add data to directory 
     $r = ldap_add($ldapconn, "cn=".$username",cn=users,ou=groups,dc=test,dc=com", $info); 

     return true; 
    } 

Pour définir l'objet $info, je référence les attributs utilisés dans un compte d'utilisateur dans Posix phpLDAPadmin et ils ont tous l'étiquette required. Cependant, je reçois enfin l'erreur suivante:

Warning: ldap_add(): Add: Undefined attribute type 

Alors, quel est l'objet $info approprié pour créer un utilisateur POSIX?

Répondre

1

Il semble que vous essayez d'ajouter des attributs qui ne sont pas pris en charge. Le username n'est ni pris en charge par inetOrgPerson ni par posixAccount et l'attribut de mot de passe doit être userPassword selon posixAccount.

Pour plus d'informations un regard sur les attributs pris en charge à http://www.zytrax.com/books/ldap/ape/#objectclasses

+0

Après le test, j'ai trouvé que 'uid' est utilisé pour le réglage' 'utilisateur NAME' dans phpLDAPadmin'. De même, si je commente 'gidNumber',' homedirectory', 'loginshell' et' posixAccount', l'erreur disparaîtra. Et, vous avez raison 'mot de passe' devrait être' userPassword' mais comment définir le cryptage à 'md5'? – Casper

+0

Je viens de faire une recherche rapide et cela devrait vous donner une idée de comment crypter le mot de passe: http://blog.michael.kuron-germany.de/2012/07/hashing-and-verifying-ldap-passwords-in- php/ – heiglandreas

+0

Merci beaucoup! J'ai déjà découvert comment crypter le mot de passe par 'md5'. – Casper