Csoportból tagok listájának kiszedése

+6 votes
asked Mar 29, 2014 in IRF tantárgy by majgab91 (77 points)  
retagged Mar 29, 2014 by nadudvarit

Helló!

Az lenne a kérdésem, hogy ha nekem van egy groupOfNames objektumom, ami a member attribútumában tárol több értéket, akkor hogyan tudom kiszedni ezeket az értékeket a groupOfNames-ből? Ismerem a dn-jét neki, de bárhogyan próbálkozom a lekéréssel, vagy egyáltalán nem kapok eredményt, vagy pedig a groupOfNames dn-jét kapom vissza.

Ilyen lekérésekkel próbálkoztam eddig:

search("cn=Project Angel,ou=Projects,dc=irf,dc=local", 2, "(member=*)")

Ez a cn=Project Angel,ou=Projects,dc=irf,dc=local dn-t adta vissza találatként. Ha a membernek a * helyett egy konkrét person dn-jét adom át, akkor is ugyanez. Ha egy szinttel följebb megyek, és az ou=Projects,dc=irf,dc=local bázisból szűrök, akkor az összes project dn-jét magkapom. Ha megpróbálok szűrni, pl. member=*ou=Personnel*, akkor nincs találat.

Hogyan kaphatnám meg az összes member-t egy project-ből?

1 Answer

+3 votes
answered Mar 29, 2014 by IcehT (126 points)  
selected Mar 29, 2014 by majgab91
 
Best answer

Üdv!
esetleg próbáld így:
search("cn=Project Angel,ou=Projects,dc=irf,dc=local", 2, '',['member'])
ekkor visszaadja listában a tagokat.

commented Mar 29, 2014 by majgab91 (77 points)  
ÚÚ hell yeah köszönöm szépen nagyon szépen! :D
commented Mar 29, 2014 by lac21 (20 points)  
Hello!

Igen a search() 4. paraméterében meg lehet adni, hogy milyen attribútumokat adjon vissza. Ez azonban visszaad(a Project Angel esetében) 102 membert, azaz egész konkrétan ennek a 102 membernek  a dn-jét egy egybefüggő eredményként.

Az én kérdésem az lenne, hogy hogyan tudnám ezeknek a membereknek a dn-jét egyesével kezelni? Ugyanis ha jól gondolom ez kellene ahhoz, hogy ellenőrizni tudjam, hogy egy adott ember(akinek már ismerem a dn-jét) egy adott projekten dolgozik-e. Vagy ha nem az egyesével hivatkozással, akkor szerintetek, hogy máshogy lehetne ezt megoldani, hogy ebből az egybefüggő dn eredménysorból csak adott dn-nel rendelkezőket kapjak vissza?
commented Mar 29, 2014 by IcehT (126 points)  
Egybefüggő eredményként?
nálam egy dictionaryként adta vissza.

for project in projectlist:
    result = search(...)   
    membersdn=result[0]['member']
commented Mar 29, 2014 by lac21 (20 points)  
Nem tudom mit hagyok ki, de a példádban lévő result-ra nem tudok [0]['member']  -rel hivatkozni. 'NoneType' object is not subscriptable hibát kapok.
commented Mar 29, 2014 by lac21 (20 points)  
Bocs, elnéztem valamit, tudok már. Köszönöm szépen!
commented Mar 29, 2014 by IcehT (126 points)  
Akkor megoldódott, örülök :)
commented Mar 29, 2014 by lac21 (20 points)  
Nem egészen:D Ebben a dictionary-ben is csak egy kulcs lesz('member') és egy ahhoz tartozó érték, ami ez a 102 dn egymás után felsorolva. Ezt nem jól látom? Mert amit én szeretnék az az, hogy ezt a 102 membert egyesével tudjam kezelni és az így még nem valósult meg. Vagy hogy máshogy lehetne ebből a hosszú értékből kiszedni az egyes dn-eket, hogy összehasonlíthassam máshonnan megkapott dn-ekkel?
commented Mar 29, 2014 by camee (36 points)  
Mit néztél el? Valamit én is elnézek.
commented Mar 29, 2014 by lac21 (20 points)  
A resultnak véletlenül nem a search visszatérési értékét akartam értékül adni, hanem benne volt még egy printben is a search és azt...
commented Mar 29, 2014 by IcehT (126 points)  
az search funkció visszatér egy listával. Ebben a listában szerepelnek a keresési eredmények, LDAPEntry-k

Ha egyetlen, konkrét Projectre keresel, akkor értelemszerűen ez a lista egy elemű lesz, ezért a result[0] (több elem esetén értelemszerűen itt egy ciklusváltozó áll)

A result[0] visszaad egy objektumot.
ennek pl le tudjuk kérni a dn-jét (result[0].dn) vagy hozzáférhetünk a mezőihez, pl result[0]['member']. Ez történetesen ha minden igaz egy LDAPValueList-t ad vissza. Kezelheted listaként. (+ mint összefűzés, iterálhatsz rajta stb)
commented Mar 29, 2014 by lac21 (20 points)  
Ó végre! Ezt nem tudtam eddig, hogy ezt még tudom listaként kezelni. Köszi szépen!
...