# -*- 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. 架构设计:负载均衡层设计方案(3)——Nginx进阶

    版权声明:欢迎转载,但是看在我辛勤劳动的份上,请注明来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) 目录(?)[-] Nginx继续进阶 1gzip ...

  2. HTML5_05之SVG扩展、地理定位、拖放

    1.SVG绘图总结: ①方法一:已有svg文件,<img src="x.svg">  方法二:<body><svg></svg>&l ...

  3. AVL树原理及实现(C语言实现以及Java语言实现)

    欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. AVL定义 AVL树是一种改进版的搜索二叉树.对于一般的搜索二叉树而言,如果数据恰好 ...

  4. shell script 执行常用的两种方式

    2016-11-17 直接输入脚本名执行 ./script #!/bin/bash# /root/shell/001 # 2016-11-17 test for script running name ...

  5. 一、Redis基本操作——String(原理篇)

    小喵的唠叨话:最近京东图书大减价,小喵手痒了就买了本<Redis设计与实现>[1]来看看.这里权当小喵看书的笔记啦.这一系列的模式,主要是先介绍Redis的实现原理(可能很大一部分会直接照 ...

  6. ASP.NET中Session的sessionState 4种mode模式

    1. sessionState的4种mode模式 在ASP.NET中Session的sessionState的4中mode模式:Off.InProc.StateServer及SqlServer. 2. ...

  7. 1. SVM简介

    从这一部分开始,将陆续介绍SVM的相关知识,主要是整理以前学习的一些笔记内容,梳理思路,形成一套SVM的学习体系. 支持向量机(Support Vector Machine)是Cortes和Vapni ...

  8. TortoiseGIT创建及合并分支

    一.创建分支 项目右键 => TortoiseGit(T) => 创建分支,然后右键切换到刚刚创建的分支,新增/修改一个文件,提交分支到远端服务器,推送成功之后分支就创建好了. 二.合并分 ...

  9. .net汉字转字母

    目前手上有一个需要实现:将用户输入的姓名转换成汉语拼音. 使用枚举,既麻烦又易出错,发现有一个微软拼音转换工具类ChnCharInfo.dll,在此记录下: 首先需要引入此dll, 链接: http: ...

  10. IDEA上安装和使用checkstyle,findbugs,visualVM,PMD插件

    ##安装插件步骤: 1.打开settings 2.选择plugins 3.点击"Browse repositories" 4.搜索对应内插件,点击"install&quo ...