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?