This shows you the differences between two versions of the page.
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> |