Python LDAP search - hogyan deríthető ki az egyes eredményekhez tartozó legszűkebb OU vagy DN?

0 votes
asked Mar 27, 2016 in IRF tantárgy by zsolesz (26 points)  
retagged Mar 28, 2016 by kovari

A házi feladatom megoldásához szükségem lenne arra, hogy egy adott LDAP keresés során kapott eredményekhez tartozó bejegyzésekhez megtaláljam a legszűkebb szervezeti egységet azonban az OU-k lekérdezésére nem találtam megoldást a Bonsai dokumentációt böngészve sem. Ezt hogy lehet megcsinálni? Valószínűleg valami teljesen triviális dolog fölött siklik el a figyelmem és az orrom előtt van a megoldás.

Próbálkoztam azzal is, hogy a DN-t szerzem meg és abból nyerem ki a keresett OU értéket, azonban erre sem találtam megoldást.

Előre is köszönöm a válaszokat!

2 Answers

+1 vote
answered Mar 28, 2016 by nadudvarit (1,121 points)  
selected Mar 28, 2016 by zsolesz
 
Best answer

LDAP lekérdezést vagy valami beépített függvényt a modulban erre nem fogsz találni. Ezt a kis funkciót neked kell implementálni a háziba.

A DN alapú megközelítés jó irány lehet. Meg kell vizsgálni az adott DN-hez tartozó RDN-eket, hogy melyik tartozik szervezeti egységhez (OU).

(Tipp: az LDAPEntry típusú objektumoknak van dn attribútuma, egy LDAPDN az RDN-jeit pedig pl. az rdns attribútumon keresztül lehet elérni.)

commented Mar 28, 2016 by zsolesz (26 points)  
Minden bizonnyal  félreértelmezem a választ, de amennyire én látom, a keresés eredményeképpen nem kapok vissza egyik LDAPEntryben sem dn attribútumot, ezért nem tudok igazából továbblépni.

Például a következő keresést futtattam:

>>> from bonsai import LDAPClient
>>> client = LDAPClient("ldap://localhost")
>>> conn = client.connect()
>>> results = conn.search("dc=irf,dc=local", 2, "(telephoneNumber=713-6*)")

##PrettyPrint beállítása

>>> pp.pprint(results)
[   {   'cn': ['cselby'],
        'description': ['University'],
        'displayName': ['Carrie Selby'],
        'gidNumber': [1000],
        'givenName': ['Carrie'],
        'homeDirectory': ['/home/users/cselby'],
        'loginShell': ['/bin/sh'],
        'mail': ['cselby@university.com'],
        'objectClass': ['top', 'inetOrgPerson', 'person', 'posixAccount'],
        'sn': ['Selby'],
        'telephoneNumber': ['713-6984-211'],
        'uid': ['cselby'],
        'uidNumber': [2912]},
    {   'cn': ['ncroft'],
        'description': ['S.T.A.R. Labs'],
        'displayName': ['Noah Croft'],
        'gidNumber': [1000],
        'givenName': ['Noah'],
        'homeDirectory': ['/home/users/ncroft'],
        'loginShell': ['/bin/sh'],
        'mail': ['ncroft@s.t.a.r.labs.com'],
        'objectClass': ['top', 'inetOrgPerson', 'person', 'posixAccount'],
        'sn': ['Croft'],
        'telephoneNumber': ['713-6852-228'],
        'uid': ['ncroft'],
        'uidNumber': [4136]}]

A dokumentációban megnéztem, hogy miket is ad vissza egy ilyen keresés és láttam, hogy LDAPEntry listáról van szó, ez világos is és minden adat szépen ki is derül belőle, csak épp a DN nem.

Hol nézem el a dolgot?
commented Mar 28, 2016 by nadudvarit (1,121 points)  
Igen, a helyzet megtévesztő, mivel keveredik az LDAP esetén értelmezett attribútumok és a Pythonban értelmezett attribútumok fogalma (egy osztálypéldányhoz tartozó értékek, amire ponttal lehet hivatkozni). Ami neked kell:

print(results[0].dn) # az első entry DN-je.
commented Mar 28, 2016 by zsolesz (26 points)  
Áhááá! Szóval a lista egy adott eleme valójában több, mint aminek egy PrettyPrint során látszik.

Köszönöm szépen! :)
commented Mar 28, 2016 by nadudvarit (1,121 points)  
Igen, valójában az évek azt mutatják, hogy logikusabb lenne, ha attribútum mellett kulcsként is lehetne hivatkozni a DN-re, ahogy a többi LDAP attribútum esetén (ekkor szerepelne a pprint során is). Majd lehet a következő verzióban meg lesz oldva.
commented Mar 28, 2016 by kovari (2,221 points)  
Jó, persze, de ha egyszer tudod, hogy egy LDAPEntry  objektumnak van dn attribútuma, akkor ne essünk már kétségbe, mert a prettyprint kiírásban ez éppen nem jelenik meg :). Ilyenkor az az első, hogy a Tomi által írt kódrészletet megnézed (amiről még egy példa is van a bonsai API leírásban).

Egy kicsivel több önálló problémamegoldást várnánk legközelebb.
asked Mar 31, 2016 in IRF tantárgy by valkorn (81 points)   HF1B Ha egy személy nem tartozik OU-ba?
0 votes
answered Mar 28, 2016 by kovari (2,221 points)  

A lekérdezés által visszakapott eredményben benne van ez az információ. Ha elakadsz, érdemes megnézni, hogy egyáltalán milyen objektumot is kapsz vissza egy lekérdezés során, és annak az API dokumentációját megnézni.

...