# -*- coding: UTF-8 -*-
import ldap, ConfigParser, os
from ldap import modlist LDAP_HOST = "mydomain.com"
USER = "cn=admin,dc=mydomain,dc=com"
PASSWORD = password
BASE_DN = dc=mydomain,dc=comclass LdapOpt(object):
def __init__(self, server_port=389):
self.server_uri = LDAP_HOST
self.server_port = server_port
self.ldap_obj = None
self.bind_name = USER
self.bind_passwd = PASSWORD
self.ldap_connect() def ldap_connect(self):
"""
:param bind_name:
:param bind_passwd:
:return:
"""
url = self.server_uri
conn = ldap.open(url)
try:
rest = conn.simple_bind_s(self.bind_name, self.bind_passwd)
except ldap.SERVER_DOWN:
print(u"无法连接到LDAP")
except ldap.INVALID_CREDENTIALS:
print (u"LDAP账号错误")
except Exception, ex:
print (type(ex))
if rest[0] != 97: # 97 表示success
print (rest[1])
self.ldap_obj = conn def add_user(self, base_dn, password):
"""
base_dn: uid=test, ou=magicstack,dc=test,dc=com NOT NONE
"""
if not base_dn:
print (u"DN不能为空")
dn_list = base_dn.split(',')
user_info = dict()
for item in dn_list:
attr, value = item.split('=')
user_info[attr] = value
attrs = {}
attrs['objectclass'] = ['person', 'inetOrgPerson', 'posixAccount', 'organizationalPerson']
attrs['cn'] = str(user_info['uid'])
attrs['homeDirectory'] = '/ftp_data/%s' % str(user_info['uid'])
attrs['loginShell'] = '/bin/bash'
attrs['sn'] = str(user_info['uid'])
attrs['uid'] = str(user_info['uid'])
attrs['uidNumber'] = str(self.__get_max_uidNumber() or "")
attrs['gidNumber'] = ""
attrs['userPassword'] = str(password)
ldif = modlist.addModlist(attrs)
try:
result = self.ldap_obj.add_s(base_dn, ldif)
except ldap.LDAPError, error_message:
print (error_message)
return False, error_message
else:
if result[0] == 105:
return True, []
else:
return False, result[1] def delete_user(self, dn):
"""
dn: cn=test, ou=magicstack,dc=test, dc=com
"""
try:
result = self.ldap_obj.delete_s(dn)
except ldap.LDAPError, error_message:
print (error_message)
return False, error_message
else:
if result[0] == 107:
return True, []
else:
return False, result[1] def __get_max_uidNumber(self):
"""
查询 当前最大的uid,这个是在添加用户时,用于自增uid
:param: None
:return: max uidNumber
"""
obj = self.ldap_obj
obj.protocal_version = ldap.VERSION3
searchScope = ldap.SCOPE_SUBTREE
retrieveAttributes = ['uidNumber']
searchFilter = "uid=*" try:
ldap_result = obj.search_s(
base=BASE_DN,
scope=searchScope,
filterstr=searchFilter,
attrlist=retrieveAttributes
)
result_set = []
for data in ldap_result:
if data[1]:
result_set.append(int(data[1]["uidNumber"][0]))
if not result_set:
return False
return max(result_set) + 1
except ldap.LDAPError, error_message:
print (error_message)
return False def ldap_get_user(self, uid=None):
'''
查询用户返回用户密码
:param uid:
:return: userpassword
'''
obj = self.ldap_obj
obj.protocal_version = ldap.VERSION3
searchScope = ldap.SCOPE_SUBTREE
retrieveAttributes = ["userPassword"]
searchFilter = "uid=" + uid
try:
ldap_result_id = obj.search(BASE_DN, searchScope, searchFilter, retrieveAttributes)
result_type, result_data = obj.result(ldap_result_id, 0)
if result_type == ldap.RES_SEARCH_ENTRY:
return result_data[0][1]["userPassword"][0]
else:
return None
except ldap.LDAPError, e:
print e
return None def ldap_update_pass(self, dn=None, oldpass=None, newpass=None):
'''
修改用户密码
:param dn:
:param oldpass:
:param newpass:
:return:bool
'''
obj = self.ldap_obj
try:
obj.passwd_s(str(dn), oldpass, newpass)
return True
except ldap.LDAPError, e:
print e
return False
LDAP_HOST 

python ldap的更多相关文章

  1. odoo11 安装python ldap

    最近在研究odoo11使用ldap登录的问题,本来自己想着怎么开发,无意间在odoo11代码中看到auth_ldap的模块,原来框架已经考虑到了这个,简单研究了代码之后,理解了其大概的登录处理过程,此 ...

  2. Python LDAP中的时间戳转换为Linux下时间

    (Get-ADUser zhangsan -Properties badpasswordtime).badpasswordtime返回值为:131172610187388712131172610187 ...

  3. Django用openLDAP做认证

    前言 之前有需求要做一个django+ldap用户管理的简单接口,研究了好几个模块,最后终于能实现django用ldap做用户认证了.也是自己的水平有限吧,做了好长时间,现在就和大家分享一下这个过程吧 ...

  4. openldap介绍和使用

    openldap介绍和使用 为什么会有本文? 早期,公司是没有统一认证这个东西的,所以各自玩各自的.于是, confluence一个用户体系,gitlab一个用户体系,Jenkins一个用户体系等等, ...

  5. Python实现LDAP用户名密码验证

    网上借鉴了不少东西,下面是python代码,备份后用. 思路,因为每个用户的组都不一样,这样就导致了dn不一致的情况, 据需要先根据用户名获取该用户的dn,然后再bind用户名和密码进行验证. 反正是 ...

  6. Python使用LDAP做用户认证

    LDAP(Light Directory Access Portocol)是轻量目录访问协议,基于X.500标准,支持TCP/IP. LDAP目录以树状的层次结构来存储数据.每个目录记录都有标识名(D ...

  7. 如何使用Python连接ldap

    如何使用Python连接ldap 好多使用ldap认证的软件都是Python的,比如superset和airflow, 好吧,他们都是airbnb家的.在配置ldap的时候可能会出现认证失败,你不知道 ...

  8. python实现ldap接入

    需要提前安装python-ldap模块 python接入ldap其实分了几个步骤: 1.使用一个管理员账户登陆到ldap 2.使用一个字段值是唯一的字段,去搜索到要验证用户的DN值(ldap搜索到的单 ...

  9. python 调用ldap同步密码

    windows + python2.7 安装 python-ldap https://www.lfd.uci.edu/~gohlke/pythonlibs/#python-ldap 2.python ...

随机推荐

  1. 今天有群友不是很清楚htm直接存数据库的危害,我简单举个例子

     通过这个案例就知道为什么不要把原生的html放数据库了  常见的几种转码  常用的几种显示方法 只有原生html和最下面一种弹框了,变成了持久xss 如果是Ajax的方式,请用@Ajax.JavaS ...

  2. 计算照片的面积(UWP篇)

    今天先说UWP应用程序上计算照片面积的方法,改天有空,再说说WPF篇. 其实计算照片面积的原理真TMD简单,只要你有本事读到照片的像素高度和宽度,以及水平/垂直方向上的分辨率(DPI)就可以了.计算方 ...

  3. ODBC、OLE DB、 ADO的区别

    转自:http://blog.csdn.net/yinjingjing198808/article/details/7665577 一.ODBC ODBC的由来 1992年Microsoft和Syba ...

  4. 6.LibSVM核函数

    libsvm的核函数类型(svmtrain.c注释部分): "-t kernel_type : set type of kernel function (default 2)\n" ...

  5. MAVEN学习笔记-maven的获取和安装

      windows下maven的安装步骤:      1.下载压缩包http://maven.apache.org/download.cgi选择apache-maven-3.3.9-bin.zip下载 ...

  6. ASP.NET MVC RouteExistingFiles

    遇到这样一个问题:项目是 MVC,但也包含 WebForm 的页面,RouteConfig 中设置了这样一个路由: routes.MapRoute( name: "SubjectIndex& ...

  7. Android 开发环境搭建以及工具(不断更新)

    学习android需要学习的编程知识 https://wiki.cyanogenmod.org/w/Doc:_Development_Resources 从http://source.android. ...

  8. JQuery知识点总结

    一. 1.JavaScript是Netscape公司开发的一种脚本语言(scripting language).JavaScript的出现实现了使得网页和用户之间实时的,动态的和交互的关系,使网页包含 ...

  9. React.js入门必须知道的那些事

    首先,React.js是facebook在2013年5月开源的一个前端框架,React不是一个MVC框架,它是构建易于可重复调用的web组件,侧重于UI, 也就是view层, React为了更高超的性 ...

  10. 读书笔记--SQL必知必会06--用通配符进行过滤

    6.1 LIKE操作符 通配符(wildcard),用来匹配某些值的的特殊字符. 在搜索子句中必须通过LIKE操作符使用通配符. 通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符 ...