Differences

This shows you the differences between two versions of the page.

Link to this comparison view

saisp:labs:01:contents:04 [2014/01/24 18:55]
razvan.deaconescu [04. Folosire bibliotecă de client de LDAP]
saisp:labs:01:contents:04 [2014/02/18 11:45] (current)
razvan.deaconescu [04. [15p] Folosire programatică client de LDAP]
Line 1: Line 1:
-==== 04. [15p] Folosire ​bibliotecă de client de LDAP ====+==== 04. [15p] Folosire ​programatică client de LDAP ====
  
-  * (tutorial) Script PHP sau Python ​pentru ​conectare ​LDAP +Pe stația client este instalat pachetul ''​python-ldap''​ util pentru ​programarea unui client ​LDAP în Python.
-  * Augmentare script PHP sau Python+
  
 +Fișierul de mai jos implementează căutarea intrărilor LDAP pentru utilizatorii al căror atribut ''​cn''​ începe cu ''​Mihai''​ și afișează pentru aceștia atributele ''​cn''​ și ''​e-mail''​.
 +
 +<file python simple-ldap.py>​
 +#​!/​usr/​bin/​env python
 +
 +import sys
 +import ldap
 +
 +def main():
 +    ldap.set_option(ldap.OPT_PROTOCOL_VERSION,​ 3)
 +    l = ldap.initialize("​ldaps://​swarm.cs.pub.ro"​)
 +    entries = l.search_s("​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro",​ ldap.SCOPE_SUBTREE,​ '​(cn=Mihai*)',​ ['​cn',​ '​mail'​])
 +
 +    for dn, attrs in entries:
 +        print '​Found:',​ repr(dn)
 +        print attrs
 +
 +if __name__ == "​__main__":​
 +    sys.exit(main())
 +</​file>​
 +
 +Fișierul se găsește și pe stația client, în directorul ''/​root/'',​ și îl putem rula:<​code bash>
 +root@ldap-client:​~#​ python simple-ldap.py ​
 +Found: '​uid=mihai,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro'​
 +{'​mail':​ ['​XXXXXX@gmail.com'​],​ '​cn':​ ['​Mihai Maruseac'​]}
 +Found: '​uid=moro,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro'​
 +{'​mail':​ ['​XXXXXX@gmail.com'​],​ '​cn':​ ['​Mihai Morogan'​]}
 +[...]
 +</​code>​
 +
 +Actualizați scriptul astfel încât sa extragă din intrările de mai sus acele intrări ale căror adresă de e-mail conține șirul ''​@gmail.com''​. Apoi afișați doar atributele ''​uid'',​ ''​cn''​ și ''​email''​ pe o singură linie, separate prin virgulă, la fel ca mai jos:<​code>​
 +mihai, Mihai Maruseac, XXXXXX@gmail.com
 +moro, Mihai Morogan, XXXXXX@gmail.com
 +</​code>​
 +
 +<note hint>
 +Variabila ''​attrs''​ este un dicționar. Pentru a obține fiecare element numit ''​item''​ dintr-un dicționar ''​d''​ folosiți construcția ''​d['​item'​]''​.
 +
 +Fiecare element din dicționarul ''​attrs''​ este o listă. Pentru a obține primul element (cel căutat) din listă, folosiți o expresie de forma ''​l[0]'',​ unde ''​l''​ este lista.
 +</​note>​
 +
 +<​solution-hidden>​
 +Fișierul de mai jos conține soluția:
 +
 +<file python simple-ldap-solution.py>​
 +#​!/​usr/​bin/​env python
 +
 +import sys
 +import ldap
 +
 +def main():
 +    ldap.set_option(ldap.OPT_PROTOCOL_VERSION,​ 3)
 +    l = ldap.initialize("​ldaps://​swarm.cs.pub.ro"​)
 +    entries = l.search_s("​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro",​ ldap.SCOPE_SUBTREE,​ '​(&​(cn=Mihai*)(mail=*@gmail.com))',​ ['​uid',​ '​cn',​ '​mail'​])
 +
 +    for dn, attrs in entries:
 +        print "%s, %s, %s" %(attrs['​uid'​][0],​ attrs['​cn'​][0],​ attrs['​mail'​][0])
 +
 +if __name__ == "​__main__":​
 +    sys.exit(main())
 +</​file>​
 +
 +La rularea sa, vom obține rezultatul căutat:<​code bash>
 +root@ldap-client:​~#​ python simple-ldap-sol.py ​
 +mihai, Mihai Maruseac, XXXXXX@gmail.com
 +moro, Mihai Morogan, XXXXXX@gmail.com
 +fr33ze, Mihai Dumitrache, XXXXXX@gmail.com
 +mihait, Mihai Tabara, XXXXXX@gmail.com
 +[...]
 +</​code>​
 +</​solution>​
saisp/labs/01/contents/04.1390582542.txt.gz · Last modified: 2014/01/24 18:55 by razvan.deaconescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0