2016-06-04 2 views
1

Ces derniers jours, j'ai essayé d'en savoir plus sur ldap, et j'aimerais maintenant pouvoir créer un nouveau compte sur mon serveur phpldapadmin à partir d'un formulaire Web . J'ai les valeurs qui sont passées correctement par PHP, mais je continue d'obtenir une erreur objectclass violation. J'ai parcouru beaucoup de ressources différentes (including this one) et fondamentalement tout ce que je peux trouver est que le objectclass doit correspondre exactement à la façon dont le dictionnaire est configuré. J'ai couru une exportation pour certains des utilisateurs créés manuellement Je travaille déjà là-bas avec succès, ce qui est un exemple de la sortie:Attention: ldap_add(): Ajouter: violation de la classe d'objets

# LDIF Export for cn=api user,cn=students,ou=users,dc=myhost,dc=com 
# Server: LDAP (ip) 
# Search Scope: sub 
# Search Filter: (objectClass=*) 
# Total Entries: 1 
# 
# Generated by phpLDAPadmin (http://phpldapadmin.sourceforge.net) on June 4,  2016 3:15 pm 
# Version: 1.2.2 

version: 1 

# Entry 1: cn=api user,cn=students,ou=users,dc=myhost,dc=co... 
dn: cn=test user,cn=students,ou=users,dc=myhost,dc=com 
cn: test 
gidnumber: 502 
givenname: test 
homedirectory: /home/users/testuser 
loginshell: /bin/sh 
objectclass: inetOrgPerson 
objectclass: posixAccount 
objectclass: top 
sn: tuser 
uid: testuser 
uidnumber: 1003 
userpassword: {MD5}pass== 

et je l'ai essayé mimer aussi près que possible dans mon script (ci-dessous), mais je reçois toujours l'erreur de violation. Aucun problème de connexion ou avec l'un des autres champs, seul le problème objectclass.

$ds = ldap_connect($AD_server); 
    if ($ds) { 

     ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
     $r = ldap_bind($ds, $AD_Auth_User, $AD_Auth_PWD); 
     $info["cn"] = $user_full_name; 
     $info["sn"] = $user_username; 
     $info['objectclass'][0] = "top"; 
     $info['objectclass'][1] = "posixAccount"; 
     $info['objectclass'][2] = "inetOrgPerson"; 
     $info['uid'] = $user_username; 
     $info['userpassword'] = $newPassw; 
     $info['loginshell'] = '/bin/sh'; 
     $info['homedirectory'] = "/home/users/$user_username"; 

     // add data to directory 
     $r = ldap_add($ds, $dn, $info); 

     ldap_close($ds); 
    } else { 
     echo "Unable to connect to LDAP server"; 
    } 

J'ai joué avec objectClasses et essayé leurs positions de commutation ou en utilisant uniquement inetOrgPerson, et toujours pas de chance. Des pensées?

Répondre

0

Il semble que vous deviez vous assurer de transmettre toutes les valeurs. Il me manquait les champs uidnumbergivenname et gidnumber. Mais maintenant ça marche! :)

0

Lors de la création d'entrées dans LDAP, vous devez savoir quels attributs sont «MUST» (requis) pour les classes d'objets utilisées lors de la création de l'entrée.

Dans votre exemple: personne MUST (sn $ cn) posixAccount MUST (cn $ uid $ uidNumber $ gidNumber $ homeDirectory)

Donc, pour créer l'entrée dans LDAP vous devez avoir des valeurs pour tous ces:

  • sn
  • cn
  • uid
  • uidNumber
  • gidNumber
  • homeDirectory

Vous pouvez dire ce qui est requis par un pour déterminer quels sont les attributs "MUST" (obligatoire) LDAP Query For Schema et la lecture de chaque ObjectClass.