zoukankan      html  css  js  c++  java
  • 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()
            
            
            
            
            
  • 相关阅读:
    jQuery弹出层插件大全:
    JavaScript数组去重的几种方法
    sql去除重复列(行)
    VS无法启动调试
    .将DayOfWeek转换成中文的几种方式
    关于 uniqueidentifier
    链接服务器
    我的目标:系统架构师
    异常(1)
    Visual C++开发工具与调试技巧整理
  • 原文地址:https://www.cnblogs.com/daysn/p/12396600.html
Copyright © 2011-2022 走看看