文档章节

使用包ldap3进行Python的LDAP操作2

shawnplaying
 shawnplaying
发布于 2016/08/16 17:49
字数 317
阅读 1234
收藏 1

我的ldap操作代码。

访问LDAP:

import os
import hashlib
import unittest

import sysmgt.sysconf as sysconf

from ldap3 import Connection,Server

#LDAP服务器信息存放在配置文件中。
_server_ip= sysconf.get_property('ldap.server')
_user_id  = sysconf.get_property('ldap.userid')
_passwd   = sysconf.get_property('ldap.passwd')
_port     = sysconf.get_property('ldap.port')
_baseDN   = sysconf.get_property('ldap.baseDN')

# bind就等于login
_connection = Connection(Server(_server_ip,port=int(_port)),user=_user_id,password=_passwd,auto_bind=True)

def test_LDAP():
	print 'server_ip = ',_server_ip
	print 'user_id   = ',_user_id
	print 'passwd    = ',_passwd
	print 'port      = ',_port
	print 'baseDN    = ',_baseDN
	server=Server(_server_ip,port=int(_port))
	conn=Connection(server,user=_user_id,password=_passwd)
	print server
	print conn
	print conn.bind()
	#print server.info
	#print server.schema
	print conn.extend.standard.who_am_i()
	print hasattr(conn,'entries')
	conn.search('ou=users,'+_baseDN,'(&(uid=hanmj1)(objectclass=person))',attributes=['uid','mail','userPassword'])
	if hasattr(conn,'entries'):
		ens=conn.entries
		for e in ens:
			print '*'*20
			print e
			print e['userPassword']
			print type(e['userPassword'])
			#print dir(e['userPassword'])
			print _checkPassword(str(e['userPassword']),'hanmj1x')
			#print dir(e)

检查密码是否正确:

def check_user(username,password):
	'''
	connection to LDAP and check whether user exists
	return str and '' means password correct, otherwise it means error message
	'''
	_connection.search('ou=users,'+_baseDN,'(&(uid='+username+')(objectclass=person))',attributes=['uid','userPassword'])
	if hasattr(_connection,'entries'):
		ens=_connection.entries
		if len(ens)==1:
			pwd=str(ens[0]['userPassword'])
			if _checkPassword(pwd,password):
				return ''
			else:
				return 'password not correct'
		elif len(ens)>1:
			return 'too many users'
	return 'user not found'


def _makeSecret(password):
    salt = os.urandom(4)
    h = hashlib.sha1(password)
    h.update(salt)
    return "{SSHA}" + encode(h.digest() + salt)

def _checkPassword(challenge_password, password):
    challenge_bytes = decode(challenge_password[6:])
    digest = challenge_bytes[:20]
    salt = challenge_bytes[20:]
    hr = hashlib.sha1(password)
    hr.update(salt)
    return digest == hr.digest()
'''
>>> challenge_password = _makeSecret('testing123')

>>> challenge_password
    '{SSHA}0c0blFTXXNuAMHECS4uxrj3ZieMoWImr'

>>> _checkPassword(challenge_password, 'testing123')
    True

>>> _checkPassword(challenge_password, 'testing124')
    False
'''

 

© 著作权归作者所有

共有 人打赏支持
shawnplaying
粉丝 14
博文 128
码字总数 70642
作品 0
海淀
系统管理员
加载中

评论(2)

shawnplaying
shawnplaying

引用来自“abelhu”的评论

那个 setting 里 ldap需要配置什么,可以发下吗哥?
你说啥?没明白。
abelhu
abelhu
那个 setting 里 ldap需要配置什么,可以发下吗哥?
使用包ldap3进行Python的LDAP操作

背景:我的管理平台系统需要在权限验证方面与ldap集成,所以需要使用python操作LDAP。 本来想使用python-ldap,但是安装过程中出现如下问题,而且花费很多时间精力没有解决该问题,所以放弃p...

shawnplaying
2016/08/16
1K
1
jumpserver 3.0 开源跳板机环境搭建

摘要: Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能。基于ssh协议来管理,客户端无需安装agent。 特点: 完全开源,GPL授权 Python编写,容易再次开发 ...

YU文武貝
07/14
0
0
Review board整合ldap

Review board整合ldap Review board本身已经支持ldap登录,我们需要做的就是一些安装、配置工作。首先review board需要python-ldap,如果没有安装,我们在打开ldap配置页面,就会提醒LDAP au...

youthflies
2014/07/15
0
0
pycharm中使用anaconda

source activate python34 # for Linux & Mac# 激活后,会发现terminal输入的地方多了python34的字样,实际上,此时系统做的事情就是把默认2.7环境从PATH中去除,再把3.4对应的命令加入PATH#...

h8b6pk7m7r8
01/07
0
0
在Windows安装Python的教程

在Windows安装Python的教程 作者:马哥教育 来源:http://www.magedu.com/74574.html Python几乎可以在任何平台下运行,如我们所熟悉的:Windows/Unix/Linux/Macintosh。 在这里我们说一下,...

Py爱好
07/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker Compose 原理

Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制。也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 dock...

Java干货分享
19分钟前
0
0
解决过滤器中设置cookie无效的问题

解决过滤器中设置cookie无效的问题 代码现场 filterChain.doFilter(sessionSyncRequestWrapper, response);Cookie emailCook = WebServletUtil.getSelectedCookie(request.getCookies(), ......

黄威
30分钟前
0
0
Hbase Schema 设计注意事项及最佳实践总结

一个列族的所有列在硬盘上存放在一起,使用这个特性可以把不同访问模式的列放在不同列族,以便隔离它们。这也是HBase被称为面向列族的存储(column-family-oriented store)的原因。 1、RowKe...

PeakFang-BOK
42分钟前
1
0
t-io给群组成员内置排序

1、实现比较器Comparator<ChannelContext> package xxx;import java.util.Comparator;import java.util.Objects;import java.util.Set;import java.util.TreeSet;import or......

talent-tan
46分钟前
2
0
px、em、rem 区别及作用

原文 起因: 一开始是为了解决页面放大时,字体不跟着放大的 bug。现在多用用于统一规范。 概念: 任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em...

lemos
55分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部