Seite 1 von 1

Python-LDAP mit OpenDirectory

Verfasst: Freitag 30. Oktober 2009, 08:24
von halo23
Hallo,
ich würde gerne ein Skript schreiben, mit dm ich Daten aus einem OpenDirectory auslesen kann.
Ich verwende dazu Python2.5 auf einem 10.5.8er Mac und habe dort mit

Code: Alles auswählen

sudo easy_install python-ldap
python-ldap installiert.
Die OpenDirectory BDB liegt auf einem anderen Rechner, einem 10.5.8er Mac OS X Server.
Bei dem Versuch eine Verbindung mit OpenDirectory wie folgt aufzubauen,

Code: Alles auswählen

#!/usr/bin/env python2.5

import ldap
import sys
import os

def connectLDAP(ldapUrl,ldapUser,ldapPassword):
    connection = ldap.initialize(ldapUrl)
    connection.set_option(ldap.OPT_PROTOCOL_VERSION,ldap.VERSION3)
    connection.simple_bind_s(ldapUser,ldapPassword)
    return connection
    
def main():
    ldapUrl = "ldap://rechner.netz.intern"
    ldapUser = "diradmin"
    ldapPassword = "xxxxxx"
    connectLDAP(ldapUrl,ldapUser,ldapPassword)

if __name__ == '__main__':
    main()
bekommen ich aber immer folgenden Fehlercode.

Code: Alles auswählen

Traceback (most recent call last):
  File "./ldap.py", line 20, in <module>
    main()
  File "./ldap.py", line 17, in main
    connectLDAP(ldapUrl,ldapUser,ldapPassword)
  File "./ldap.py", line 8, in connectLDAP
    connection = ldap.initialize(ldapUrl)
AttributeError: 'module' object has no attribute 'initialize'
Hat jemand eine Idee was ich falsch mache?

Verfasst: Freitag 30. Oktober 2009, 08:28
von ms4py
Du benennst dein Skript wie das Paket, das du einbindest (``ldap``).
Das darfst du nicht machen!

Verfasst: Freitag 30. Oktober 2009, 08:31
von halo23
OK, das wusste ich nicht, Danke für den Tipp aber der Fehler erscheint noch immer.

Code: Alles auswählen

Traceback (most recent call last):
  File "./odconnect.py", line 20, in <module>
    main()
  File "./odconnect.py", line 17, in main
    connectLDAP(ldapUrl,ldapUser,ldapPassword)
  File "./odconnect.py", line 8, in connectLDAP
    connection = ldap.initialize(ldapUrl)
AttributeError: 'module' object has no attribute 'initialize'

Verfasst: Freitag 30. Oktober 2009, 08:33
von ms4py
Liegt vielleicht noch die ``ldap.pyc`` in dem Verzeichnis?

Verfasst: Freitag 30. Oktober 2009, 14:34
von halo23
Ja, danke, Du hattest Recht!

Nun klappt die Abfrage - man kann die ja sogar als anonymous machen:

Code: Alles auswählen

#!/usr/bin/env python2.5

import ldap
import sys
import os

def connectLDAP(ldapUrl,ldapUser,ldapPassword):
    connect = ldap.initialize(ldapUrl)
    connect.set_option(ldap.OPT_PROTOCOL_VERSION,ldap.VERSION3)
    connect.simple_bind_s(ldapUser,ldapPassword)
    return connect
    
def openDirectoryResult():    
    ldapUrl = "ldap://rechner.netz.intern:389/"
    ldapUser = ""
    ldapPassword = ""
    opendirectory = connectLDAP(ldapUrl,ldapUser,ldapPassword)

    result = opendirectory.search_s(
    'cn=users,dc=rechner,dc=netz,dc=intern',ldap.SCOPE_SUBTREE,
    '(objectClass=*)',['cn','mail'])
    
    for dn,entry in result:
        print repr(dn)
    
def main():
    openDirectoryResult()
        
if __name__ == '__main__':
    main()