IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

php - ldap - ajout d'un nouveau contact


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Points : 9
    Points
    9
    Par défaut php - ldap - ajout d'un nouveau contact
    bonjour,

    j'ai un gros soucis avec l'ajout d'un ... contact dans ldap. Si je veux ajouter un nouveau User, je change normalement juste l'objectclass et ça devrait marché.
    Mon script en vbs ajoute mon contact sans aucun soucis...

    voici mon script en php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    <?php
    // bind is ok
    //-----------------------------------------------
    // Variables de connection
    $Conf_LDAP_Server    = 'xxx.xxx.xxx.xxx:389';
    //-----------------------------------------------
    // Initialisation des variables
    $ldap_server = "ldap://".$Conf_LDAP_Server;
     
    $auth_user = 'my user';
    $auth_pass = 'my pass';
     
    $connect = ldap_connect($ldap_server);
    if($connect)
          echo '<p>connect ok</p>';
    else
          echo '<p>connect Nok</p>';
     
    if (ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3))
          echo '<p>Version LDAPv3</p>';
    else
          echo '<p>Impossible de modifier la version du protocole à 3</p>';
     
    if (ldap_set_option($connect, LDAP_OPT_REFERRALS, 0) )
          echo '<p>LDAP_OPT_REFERRALS ok</p>';
    else
          echo '<p>LDAP_OPT_REFERRALS Nok</p>';
     
    $CN = 'user test';
    $Mail ='usertest@test.be';
    $givenName='user test';
    $sn='user test';
    $legacyExchangeDN="/o=PCF/ou=Premier groupe administratif/cn=Recipients/cn=".$CN;
    $mailNickname='usertest';
    $displayName='user test';
    $targetAddress='SMTP:usertest@test.be';
    $proxyAddresses ='SMTP:usertest@test.be';
    $sAMAccountName=  'user test';
     
    $bind = ldap_bind($connect, $auth_user, $auth_pass);
    if($bind)
             {
           echo '<p>bind ok</p>';
              $ldaprecord['CN']=$CN;
              $ldaprecord['givenName']=$givenName;
              $ldaprecord['sn']=$sn;
              $ldaprecord['mail']=$Mail;
              $ldaprecord['mailNickname']=$mailNickname;
              $ldaprecord['displayName']=$displayName;
              $ldaprecord['targetAddress']=$targetAddress;
              $ldaprecord['proxyAddresses']=$proxyAddresses ;
              $ldaprecord['sAMAccountName']=$sAMAccountName;
     
              $ldaprecord['legacyExchangeDN']=$legacyExchangeDN;
     
              // attributs ne changeant pas
              $ldaprecord['MSExchHideFromAddressLists']='TRUE';
              $ldaprecord['mAPIRecipient']='FALSE';
              $ldaprecord['objectclass'][0] = "top";
              $ldaprecord['objectclass'][1] = "person";
              $ldaprecord['objectclass'][2] = "organizationalPerson";
              $ldaprecord['objectclass'][3] = "contact"; // ===> si je mets là "user" // au lieu de "contact" alors pas de soucis mais ce n'est pas ce que je veux..
     
     
              echo "<br>".$dn."<br>";
             $dn = 'CN='.$CN.',OU=ouParlementairesTest,OU=ouContacts,DC=test,DC=test,DC=test';
     
              $r = ldap_add($connect, $dn, $ldaprecord);
     
             }
    else
          echo '<p>bind Nok</p>';
     ?>
    voici ce que ça me retourne:

    connect ok
    Version LDAPv3
    LDAP_OPT_REFERRALS ok
    bind ok


    Warning: ldap_add() [function.ldap-add]: Add: Server is unwilling to perform in /var/www/test/ldap_add1.php on line 68

    je dois avouer que les tutos d'ici et d'ailleurs m'ont bien aidé à réaliser ce script mais pour le contact, là je sèche...

    merci d'avance,

    R.D.

  2. #2
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    salut,

    dans un premier temps peux tu regarder par ici ? http://www.developpez.net/forums/d86...tion-ldap-add/

  3. #3
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Comment est définit l'objectclass contact ? Celui-ci n'accepte peut être pas un type de donnée que user, lui, acceptait.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    - pour ce qui est des problèmes liés à utf8, j'avais testé mais ça ne vient pas de là. J'en ai eu besoin pour une autre partie de mon script quand je devais faire une recherche ldap à partir de résultats venant d'une requête sql.

    - objectclass accepte effectivement bien un autre type que user... Si tu regardes avec un browser ldap les différents éléments, tu y retrouveras 'contact'. Tu peux d'ailleurs même faire un search juste sur des éléments de type 'contact'

  5. #5
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    En faites je parlais des types de données qui sont obligatoires ou qui peuvent être acceptés par "contact".
    Si par exemple (exemple tout à fait bidon et non réel) "mail" était un type obligatoire et définit par l'objectclass user, et si l'objectclass "contact" n'a pas ce type de données comme référence, alors tu aura l'erreur indiqué.

    Je ne sais pas du tout si j'ai bien été clair.

    Si je me résume :
    Chaque objectclass définit quel attribut est autorisé et quel attribut est obligatoire. Si tu essaies d'ajouter un attributs qui n'est pas définit par un des objectclass alors tu auras cette erreur. Et je pense que si il manque un attribut obligatoire tu auras la même erreur.

    Normalement tout cela est définit dans des fichiers *.schema.

    En exemple :
    l'objectclass person a comme attribut obligatoire : sn, cn
    et comme attribut falcultatif : userPassword , telephoneNumber , seeAlso , description

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    ok
    je viens d'aller voir dans ma console mmc avec le snap-in adsiedit.
    J'y trouve effectivement les différents "schema" mais quand je regarde cn=contact (je pense que c'est vers ça que je dois me diriger)
    je trouve "allowedAttributes" mais pas de property du type "mandatoryAttributes" donc je ne sais pas trop..

    J'avais fait le script en vbscript avant et je n'utilisais pas l'objectclass parce que j'utilisais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         ' Build the actual contacts.
         Set objContact = objContainer.Create("Contact",_
         "cn=" & str_CN)
    mais je n'ai pas trouvé l'équivalent en php...

  7. #7
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Voici comment ca se présente dans les schema, exemple pour l'objectclass 'inetOrgPerson'

    May correspond aux attribut possible, Must (il y en a pas la) correspond aux attributs obligatoires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    objectclass ( 2.16.840.1.113730.3.2.2
       NAME 'inetOrgPerson'
       DESC 'RFC2798: Internet Organizational Person'
       SUP organizationalPerson
       STRUCTURAL
       MAY ( audio $ businessCategory $ carLicense $ departmentNumber $
        displayName $ employeeNumber $ employeeType $ givenName $
        homePhone $ homePostalAddress $ initials $ jpegPhoto $
        labeledURI $ mail $ manager $ mobile $ o $ pager $ photo $
        roomNumber $ secretary $ uid $ userCertificate $
        x500uniqueIdentifier $ preferredLanguage $
        userSMIMECertificate $ userPKCS12 )
       )
    J'espère que le problème viens de quelque chose comme ca sinon on aura fait ca pour rien.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    salut,
    avec l'adsi edit, je choisis un contact, j'affiche les propriétés et je peux choisir celles qui sont "mandatory" et je vois:
    objectClass
    objectCategory
    cn
    instanceType
    et pour ce qui des "optional"... j'en ai un qui n'existe pas dans la liste..
    Je le supprime et ça FONCTIONNE !!!

    la propriété "sAMAccountName" existe pour les users mais pas pour les contacts. Le pire c'est que je ne sais pas pourquoi j'ai rajouté cette propriété parce que dans mon script vbs je ne l'avais pas non plus...




    je remets le code qui fonctionne pour ceux que ça intéresseraient:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    <?php
    // bind is ok
    //-----------------------------------------------
    // Variables de connection
    $Conf_LDAP_Server    = 'xxx.xxx.xxx.xxx:389';
    //-----------------------------------------------
    // Initialisation des variables
    $ldap_server = "ldap://".$Conf_LDAP_Server;
     
    $auth_user = 'my user';
    $auth_pass = 'my pass';
     
    $connect = ldap_connect($ldap_server);
    if($connect)
          echo '<p>connect ok</p>';
    else
          echo '<p>connect Nok</p>';
     
    if (ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3))
          echo '<p>Version LDAPv3</p>';
    else
          echo '<p>Impossible de modifier la version du protocole à 3</p>';
     
    if (ldap_set_option($connect, LDAP_OPT_REFERRALS, 0) )
          echo '<p>LDAP_OPT_REFERRALS ok</p>';
    else
          echo '<p>LDAP_OPT_REFERRALS Nok</p>';
     
    $CN = 'user test';
    $Mail ='usertest@test.be';
    $givenName='user test';
    $sn='user test';
    $legacyExchangeDN="/o=PCF/ou=Premier groupe administratif/cn=Recipients/cn=".$CN;
    $mailNickname='usertest';
    $displayName='user test';
    $targetAddress='SMTP:usertest@test.be';
    $proxyAddresses ='SMTP:usertest@test.be';
    $sAMAccountName=  'user test';
     
    $bind = ldap_bind($connect, $auth_user, $auth_pass);
    if($bind)
             {
    	 echo '<p>bind ok</p>';
     
              $ldaprecord=array();
              $ldaprecord['objectclass'][0] = "top";
              $ldaprecord['objectclass'][1] = "person";
              $ldaprecord['objectclass'][2] = "organizationalPerson";
              $ldaprecord['objectclass'][3] = "contact";
     
     
              $ldaprecord['CN']=$CN;
              $ldaprecord['givenName']=$givenName;
              $ldaprecord['sn']=$sn;
              $ldaprecord['mail']=$Mail;
              $ldaprecord['mailNickname']=$mailNickname;
              $ldaprecord['displayName']=$displayName;
              $ldaprecord['targetAddress']=$targetAddress;
              $ldaprecord['proxyAddresses']=$proxyAddresses;
    //          $ldaprecord['sAMAccountName']=$sAMAccountName;
     
              $ldaprecord['legacyExchangeDN']=$legacyExchangeDN;
     
              // attributs ne changeant pas
              $ldaprecord['objectCategory']='CN=Person,CN=Schema,CN=Configuration,DC=win,DC=info,DC=pcf';
              $ldaprecord['instanceType']='4';
              $ldaprecord['MSExchHideFromAddressLists']='TRUE';
              $ldaprecord['mAPIRecipient']='FALSE';
     
              echo "<br>".$dn."<br>";
             $dn = utf8_encode('CN='.$CN.',OU=ouParlementairesTest,OU=ouContacts,DC=win,DC=info,DC=pcf');
     
              $r = ldap_add($connect, $dn, $ldaprecord);
     
             }
    else
    	echo '<p>bind Nok</p>';
     ?>
    merci !

  9. #9
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Cool oublie pas de mettre le TAG résolu .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/01/2011, 15h18
  2. Réponses: 8
    Dernier message: 23/01/2007, 21h02
  3. [LDAP] Ajout dans un annuaire ldap via un script php
    Par pascale86 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 24/11/2006, 11h58
  4. Outlook : Nouveau contact
    Par bdf94 dans le forum VBScript
    Réponses: 1
    Dernier message: 20/10/2005, 08h18
  5. Impossible de deboquer tout nouveau contact sur msn
    Par maadadi dans le forum Messagerie instantanée
    Réponses: 22
    Dernier message: 28/08/2005, 18h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo