文档章节

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

shawnplaying
 shawnplaying
发布于 2016/08/16 17:49
字数 317
阅读 1162
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部