13
2016-08-05 09:54:48 +08:00 1
我看你的需求里有获取域用户名,还有登录域:
import ldap
import time
class Ldap(object):
def __init__(self):
self.server = "ldap 服务器地址"
self.servername = "需要申请的用来登录域的名称"
self.serverpass = "密码"
self.handle = ldap.initialize(self.server)
self.handle.protocol_version = ldap.VERSION3
self.handle.simple_bind(self.servername, self.serverpass)
self.basedn = u"OU=xx 研发中心,OU=xx,OU=xxxx,DC=xxxx,DC=xxx"
self.usercn = None
def searchdn(self, useremail):
self.searchscope = ldap.SCOPE_SUBTREE
# 这个 attr 可能要根据需要来更改
self.attr = "userPrincipalName"
self.retrieveattributes = None
self.searchfilter = "(" + self.attr + "=" + useremail + ")"
# 加入延时后测试通过,否则一直报错,怀疑中间过程太快
time.sleep(0.1)
ldap_result = self.handle.search(self.basedn, self.searchscope, self.searchfilter, self.retrieveattributes)
# 配置结果获取,返回 dn ,第三个参数为超时时间的设置,超过时间返回
result_type, result_data = self.handle.result(ldap_result, 0, 2)
self.usercn = result_data[0][0]
return self.usercn
# 认证功能
def auth(self, usercn, password):
try:
ldapuser = ldap.initialize(self.server)
ldapuser.simple_bind(usercn, password)
result_type, _ = ldapuser.result(timeout=2)
return result_type
except Exception, e:
return None
这是我根据网上的实例修改过的,用于自己项目的,可能看代码会更好理解一些。
不知道这个能不能满足你的需求。