python:ldap3连接openldap

自己整的一个demo能用的

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import json
from ldap3 import Server, Connection, ALL, NTLM
from ldap3 import ALL_ATTRIBUTES
# 注意:ldap3库如果要使用tls(安全连接),需要ad服务先安装并配置好证书服务,才能通过tls连接,否则连接测试时会报LDAPSocketOpenError('unable to open socket'
# 如果是进行账号密码修改及账户激活时,会报错:“WILL_NOT_PERFORM”
from ldap3 import Connection, NTLM, Server
from ldap3 import MODIFY_REPLACE


server1 = Server("192.168.98.143",  get_info=ALL, connect_timeout=5)
LDAP_SERVER_POOL = [server1]
SERVER_USER = 'cn=admin,dc=my-company,dc=com'
SERVER_PASSWORD = '123456'

class AD(object):
    '''    AD用户操作    '''
    def __init__(self):
        '''初始化'''
        self.conn = Connection( #配置服务器连接参数
            server=LDAP_SERVER_POOL,
            auto_bind=True,
            read_only=False,  #禁止修改数据:True
            user=SERVER_USER,#管理员账户
            password=SERVER_PASSWORD,
        )


    def create_obj(self,dn="cn=dayss,dc=my-company,dc=com",type="user",attr=None):
        print('connet-------')
        print(self.conn)
        print('3211')
        '''
        新建用户or 部门,User需要设置密码,激活账户
        :param dn: dn = "ou=人事部3,ou=罗辑实验室,dc=adtest,dc=intra"  # 创建的OU的完整路径
                   dn = "cn=张三,ou=人事部3,ou=罗辑实验室,dc=adtest,dc=intra"  # 创建的User的完整路径
        :param type:选项:ou or user
        :param attr = {#User 属性表,需要设置什么属性,增加对应的键值对
                        "SamAccountName": "zhangsan",  # 账号
                        "EmployeeID":"1",    # 员工编号
                        "Sn": "",  # 姓
                        "name": "张三",
                        "telephoneNumber": "12345678933",
                        "mobile": "12345678933",
                        "UserPrincipalName":"zhangsan@adtest.com",
                        "Mail":"zhangsan@adtest.com",
                        "Displayname": "张三",
                        "Manager":"CN=李四,OU=人事部,DC=adtest,DC=com",#需要使用用户的DN路径
                    }
                attr = {#OU属性表
                        'name':'人事部',
                        'managedBy':"CN=张三,OU=IT组,OU=罗辑实验室,DC=adtest,DC=intra", #部分负责人
                        }
        :return:True and success 是创建成功了
        (True, {'result': 0, 'description': 'success', 'dn': '', 'message': '', 'referrals': None, 'type': 'addResponse'})

        
        object_class = {'user':['user', 'posixGroup', 'top'],
                        'ou':['organizationalUnit', 'posixGroup', 'top'],
                        }
        res = self.conn.add(dn=dn,object_class=object_class[type],attributes=attr)
        if type == "user": # 如果是用户时,我们需要给账户设置密码,并把账户激活
            self.conn.extend.microsoft.modify_password(dn, "123456")    #设置用户密码
            self.conn.modify(dn, {'userAccountControl': [('MODIFY_REPLACE',512)]})    #激活用户
        print(self.conn.result)
        return res, self.conn.result
        '''
        # 添加一个组织
        dn = 'cn=day323,dc=my-company,dc=com'
        res = self.conn.add(dn, attributes={'userPassword':'312321'},object_class=['simpleSecurityObject','organizationalRole'])
        print(res)
        print(self.conn.result)
         
    

if __name__ == '__main__':  
    ad = AD()
    ad.create_obj()
        
        
        
        
        
原文地址:https://www.cnblogs.com/daysn/p/12396600.html