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

Python Discussion :

python + ldap modification.


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations forums :
    Inscription : Juillet 2013
    Messages : 114
    Par défaut python + ldap modification.
    Bonsoir!

    Je reviens encore une fois de plus avec un autre probleme.

    Cette fois ci je veux faire des modifications dans l'annuaire ldap à partir de l'application qui est faite avec le langage python.

    Alors d'apres les cherches que je fais sur le net, j'ai trouvé une fonction qui permet de faire des modifications mais j'utilise cette fonction, je me coince avec une erreur dont je n'arrive pas à corriger.

    voilà la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def modifierPasswdLdap(self, uid, passwd):             
            C=ConnexionLdap()  
            C.connexionAdminLdap() 
            l=C.getL()
            # The dn of our new entry/object
            dn="uid="+uid+",ou=people,dc=lnlm,dc=africacte"  
            Mod_attrs = [ (l.MOD_REPLACE, 'userPassword', passwd), (l.MOD_ADD, 'uid', uid) ] 
            l.modify_s (dn, mod_attrs) 
            C.deconnexionAdminLdap()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Traceback (most recent call last):
      File "/usr/lib/python2.7/dist-packages/cherrypy/_cprequest.py", line 656, in respond
        response.body = self.handler()
      File "/usr/lib/python2.7/dist-packages/cherrypy/lib/encoding.py", line 188, in __call__
        self.body = self.oldhandler(*args, **kwargs)
      File "/usr/lib/python2.7/dist-packages/cherrypy/_cpdispatch.py", line 34, in __call__
        return self.callable(*self.args, **self.kwargs)
      File "acceuil.py", line 476, in modifier_cpts
        cpte.modifierPasswdLdap(login, motp1)
      File "/home/brahim/Bureau/workspace_cherrypy/Compte.py", line 59, in modifierPasswdLdap
        Mod_attrs = [ (l.MOD_REPLACE, 'userPassword', passwd), (l.MOD_ADD, 'uid', uid) ]
      File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 129, in __getattr__
        self.__class__.__name__,repr(name)
    AttributeError: SimpleLDAPObject has no attribute 'MOD_REPLACE'
    donc si quelqu'un peut me corriger l'erreur ou me propose une autre fonction qui permet de faire des modifications sera tres necessaire.
    Merci d'avnece.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations forums :
    Inscription : Juillet 2013
    Messages : 114
    Par défaut
    Bonjour!

    Aucune idée, SVP?

    j'ai pu amelioré mais je me suis coincé toujours par une autre.

    voilà l'erreur qui me donne apres la modification.

    la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def modifierPasswdLdap(self, uid, passwd):             
            C=ConnexionLdap()  
            C.connexionAdminLdap() 
            l=C.getL()
            # The dn of our new entry/object
            dn="uid="+uid+",ou=people,dc=lnlm,dc=africacte"  
            Mod_attrs = [ (ldap.MOD_REPLACE, 'userPassword', passwd)] 
            l.modify_s (dn, Mod_attrs) 
            C.deconnexionAdminLdap()
    l'erreur:
    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
    Traceback (most recent call last):
      File "/usr/lib/python2.7/dist-packages/cherrypy/_cprequest.py", line 656, in respond
        response.body = self.handler()
      File "/usr/lib/python2.7/dist-packages/cherrypy/lib/encoding.py", line 188, in __call__
        self.body = self.oldhandler(*args, **kwargs)
      File "/usr/lib/python2.7/dist-packages/cherrypy/_cpdispatch.py", line 34, in __call__
        return self.callable(*self.args, **self.kwargs)
      File "acceuil.py", line 476, in modifier_cpts
        cpte.modifierPasswdLdap(login, motp1)
      File "/home/brahim/Bureau/workspace_cherrypy/Compte.py", line 66, in modifierPasswdLdap
        l.modify_s (dn, Mod_attrs)
      File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 356, in modify_s
        msgid = self.modify(dn,modlist)
      File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 353, in modify
        return self.modify_ext(dn,modlist,None,None)
      File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 325, in modify_ext
        return self._ldap_call(self._l.modify_ext,dn,modlist,RequestControlTuples(serverctrls),RequestControlTuples(clientctrls))
      File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 99, in _ldap_call
        result = func(*args,**kwargs)
    TypeError: ('expected a string in the list', u'v')
    une idée SVP.

    Merci d'avance.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,
    En regardant la trace, il semble que vous partiez bille en tête a vouloir intégrer une fonctionnalité LDAP qui n'est pas encore au point dans un ensemble "fonctionnel" beaucoup plus gros.
    C'est pas très malin:
    • la fonctionnalité LDAP que vous essayez d'ajouter (modifier le password d'un utilisateur) doit pouvoir fonctionner indépendamment du reste de l'application,
    • cela ne vous permet pas de reproduire le problème avec un code minimal qui permettrait a un lecteur de voir ce qui cloche cote initialisation voire d'essayer de reproduire quelque chose ailleurs.

    Dans ces conditions, la population des personnes qui pourraient vous aider se limitant aux magiciens et aux voyants, ca fait pas grand monde pour aider.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations forums :
    Inscription : Juillet 2013
    Messages : 114
    Par défaut
    salut!

    Effectivement, si je sais tous les necessaires, je saurai aussi l'erreur.

    Mais ça ce n'est pas grave, si quelqu'un ne comprends pas ce que je postulé il pouvait poser des questions ou me demander de postuler au plus ce qui est necessaire.

    A mon avis ici seul la classe ConnexionLdap() qui n'est pas detaillé dont je postule ici:


    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
    import ldap 
    import ldap.modlist as modlist
     
    class ConnexionLdap(object): 
     
        def __init__(self):                       
            self.__l = ldap.initialize("LDAP://localhost") 
     
        def connexionAdminLdap(self):                 
            self.__l.simple_bind_s("cn=admin,dc=lnlm,dc=africacte","erebi") 
     
     
        def deconnexionAdminLdap(self):       
            self.__l.unbind_s() 
     
        def rechercheLoginLdap(self,uid): 
            baseDN = "ou=people, dc=lnlm, dc=africacte" 
            searchScope = ldap.SCOPE_SUBTREE
            # retrieve all attributes - again adjust to your needs - see documentation for more options
            retrieveAttributes = None 
            searchFilter = "uid="+uid       
            ldap_result_id = self.__l.search(baseDN, searchScope, searchFilter, retrieveAttributes) 
            result_type, result_data = self.__l.result(ldap_result_id, 0)
            if (result_data == []): 
                return 0 
            else: 
                return 1
     
        def countLDAP(self): 
            ## The next lines will also need to be changed to support your search requirements and directory
            baseDN = "ou=people, dc=lnlm, dc=africacte" 
            searchScope = ldap.SCOPE_SUBTREE
            ## retrieve all attributes - again adjust to your needs - see documentation for more options
            retrieveAttributes = None 
            searchFilter = "cn=*"    
            ldap_result_id = self.__l.search(baseDN, searchScope, searchFilter, retrieveAttributes)
            result_set = []
            while 1:
                result_type, result_data = self.__l.result(ldap_result_id, 0)
                if (result_data == []):
                    break
                else:
                        ## here you don't have to append to a list
                        ## you could do whatever you want with the individual entry
                        ## The appending to list is just for illustration. 
                    if result_type == ldap.RES_SEARCH_ENTRY:
                        result_set.append(result_data)
            return len(result_set)
     
        def getL(self):
            return self.__l
    Merci.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations forums :
    Inscription : Juillet 2013
    Messages : 114
    Par défaut
    Citation Envoyé par koreimy Voir le message
    salut!

    Effectivement, si je sais tous les necessaires, je saurai aussi l'erreur.

    Mais ça ce n'est pas grave, si quelqu'un ne comprends pas ce que je postulé il pouvait poser des questions ou me demander de postuler au plus ce qui est necessaire.

    A mon avis ici seul la classe ConnexionLdap() qui n'est pas detaillé dont je postule ici:


    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
    import ldap 
    import ldap.modlist as modlist
     
    class ConnexionLdap(object): 
     
        def __init__(self):                       
            self.__l = ldap.initialize("LDAP://localhost") 
     
        def connexionAdminLdap(self):                 
            self.__l.simple_bind_s("cn=admin,dc=lnlm,dc=africacte","erebi") 
     
     
        def deconnexionAdminLdap(self):       
            self.__l.unbind_s() 
     
        def rechercheLoginLdap(self,uid): 
            baseDN = "ou=people, dc=lnlm, dc=africacte" 
            searchScope = ldap.SCOPE_SUBTREE
            # retrieve all attributes - again adjust to your needs - see documentation for more options
            retrieveAttributes = None 
            searchFilter = "uid="+uid       
            ldap_result_id = self.__l.search(baseDN, searchScope, searchFilter, retrieveAttributes) 
            result_type, result_data = self.__l.result(ldap_result_id, 0)
            if (result_data == []): 
                return 0 
            else: 
                return 1
     
        def countLDAP(self): 
            ## The next lines will also need to be changed to support your search requirements and directory
            baseDN = "ou=people, dc=lnlm, dc=africacte" 
            searchScope = ldap.SCOPE_SUBTREE
            ## retrieve all attributes - again adjust to your needs - see documentation for more options
            retrieveAttributes = None 
            searchFilter = "cn=*"    
            ldap_result_id = self.__l.search(baseDN, searchScope, searchFilter, retrieveAttributes)
            result_set = []
            while 1:
                result_type, result_data = self.__l.result(ldap_result_id, 0)
                if (result_data == []):
                    break
                else:
                        ## here you don't have to append to a list
                        ## you could do whatever you want with the individual entry
                        ## The appending to list is just for illustration. 
                    if result_type == ldap.RES_SEARCH_ENTRY:
                        result_set.append(result_data)
            return len(result_set)
     
        def getL(self):
            return self.__l
    Merci.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par koreimy Voir le message
    A mon avis ici seul la classe ConnexionLdap() qui n'est pas detaillé dont je postule ici:
    Sans poster un code "complet" et minimal qui illustre le problème rencontré, c'est le lecteur qui devra faire ce boulot pour vous.
    Ne pensez vous pas exagérer un peu?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations forums :
    Inscription : Juillet 2013
    Messages : 114
    Par défaut
    finalement je te comprends pas, si je postule tous les fichiers que j'en ai ça va etre un roman.
    Quant à moi, seulement les elements essentiels qui permet aux lecteurs de comprendre le code qui seront postulé. Donc c'est pourquoi je n'ai pas postulé tous les fichiers en suite je suis pres à postulé au cas quelqu'un demande un éclaircissement sur un fichier.

    Pour moi si vous avez une idée qui me depanne sera tres interessant que de critiquer la forme.

    Merci

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

Discussions similaires

  1. python + Ldap
    Par koreimy dans le forum Réseau/Web
    Réponses: 8
    Dernier message: 31/07/2013, 17h27
  2. Ajout des commentaires dans les fichiers LDIF (python-ldap)
    Par doudoubens dans le forum Général Python
    Réponses: 0
    Dernier message: 26/06/2012, 15h16
  3. php - ldap - modification d'un attribut de type 'array'
    Par raymondub dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2010, 12h53
  4. Montage Lecteur Réseau Python Ldap
    Par fredouzzz dans le forum Réseau/Web
    Réponses: 4
    Dernier message: 24/02/2008, 02h36
  5. [LDAP]modification du mot de passe - ligne de commande
    Par sangei dans le forum API standards et tierces
    Réponses: 24
    Dernier message: 01/12/2005, 14h49

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