使用 Python 实现 LDAP 交互的例子

简介:

这两天在配置 mutt 邮件客户端,有一个比较重要的功能就是需要实现使用 LDAP 查询公司的员工邮件。

Python 上有现成的 ldap 模块,在 http://www.python-ldap.org/ ,虽然官方上也有示例代码,但是要正常从 MS 的服务中获取到数据也真是折腾了一番。后面发现其实这个问题在官方的 FAQ 中都有明确说明的。

后来又看了一下 LDAP 协议中 filter 的写法,然后根据公司服务的情况自已定义了一些需要的属性。

把一些东西搞明白之后,用起来还是比较顺手的 :)

# -*- coding: utf-8 -*-


import sys
import ldap

ldap.set_option(ldap.OPT_REFERRALS, 0)    <--- 不加这个访问不到MS的服务
con = ldap.initialize('server') 
con.simple_bind_s( 'user', 'password' )

base_dn = 'dc=xxx,dc=com'
scope = ldap.SCOPE_SUBTREE

input = sys.argv[1]

filter = "(&(|(cn=*%(input)s*)(mail=*%(input)s*))(mail=*))" % {'input': input}

attrs = ['mail', 'givenName', 'sn', 'department', 'telephoneNumber', 'displayName']

result = []
for i in con.search_s(base_dn, scope, filter, None):
    if i[0]:
        d = {}
        for k in i[1]:
            d[k] = i[1][k][0]

        if 'telephoneNumber' not in d:
            d['telephoneNumber'] = '(无电话)'

        if 'department' not in d:
            d['department'] = '(无部门)'

        if 'sn' not in d and 'givenName' not in d:
            d['givenName'] = d.get('displayName', '')

        if 'sn' not in d:
            d['sn'] = ''

        if 'givenName' not in d:
            d['givenName'] = ''

        result.append(d)

print '共找到结果 %s 条' % (len(result))
for d in result:
    print '%(mail)s\t%(sn)s%(givenName)s\t%(telephoneNumber)s %(department)s' % d

参考:

目录
相关文章
|
3月前
|
前端开发 API UED
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
109 2
|
5月前
|
开发框架 JSON API
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
【7月更文挑战第22天】在Python Web开发中,设计高效的RESTful API涉及选择框架(如Flask或Django)、明确资源及使用HTTP方法(GET, POST, PUT, DELETE)来操作数据。响应格式通常是JSON,错误处理也很重要。示例展示了使用Flask创建图书管理API,包括版本控制、文档化、安全性和性能优化是最佳实践。这样的API使数据交互更顺畅。
98 2
|
1月前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
43 1
|
2月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
69 1
|
2月前
|
Python
Python软链接:Python 2与现代Python的交互
Python软链接:Python 2与现代Python的交互
30 4
|
2月前
|
前端开发 API 开发者
从零到精通,AJAX与Fetch API让你的Python Web前后端交互无所不能!
从零到精通,AJAX与Fetch API让你的Python Web前后端交互无所不能!
45 3
|
3月前
|
Python
Python软链接:Python 2与现代Python的交互 原创
Python软链接:Python 2与现代Python的交互 原创
43 2
|
3月前
|
关系型数据库 MySQL Python
pymysql模块,python与MySQL之间的交互
pymysql模块,python与MySQL之间的交互
|
3月前
|
开发框架 JSON 缓存
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
在数字化浪潮推动下,RESTful API成为Web开发中不可或缺的部分。本文详细介绍了在Python环境下如何设计并实现高效、可扩展的RESTful API,涵盖框架选择、资源定义、HTTP方法应用及响应格式设计等内容,并提供了基于Flask的示例代码。此外,还讨论了版本控制、文档化、安全性和性能优化等最佳实践,帮助开发者实现更流畅的数据交互体验。
91 1
|
2月前
|
Python
Python软链接:Python 2与现代Python的交互
Python软链接:Python 2与现代Python的交互
23 0