我的编程空间,编程开发者的网络收藏夹
学习永远不晚

通过python-ldap处理ldap服

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

通过python-ldap处理ldap服

    最近项目中加入LDAP认证方式,那么问题来了,在网站上创建用户的时候,要将用户同步到LDAP服务器上。看了一下python-ldap的文档,实现了对ldap服务器上的用户实现增删改查。


import ldap
from rest_framework.exceptions import APIException, ValidationError


class MyLdap(object):
    def __init__(self, server_uri, server_port=389, bind_name='', bind_passwd=''):
        self.server_uri = server_uri
        self.server_port = server_port
        self.ldap_obj = None

        self.ldap_connect(bind_name, bind_passwd)

    def ldap_connect(self, bind_name='', bind_passwd=''):
        """
        :param bind_name: 绑定的ldap用户,可为空; 添加,删除用户时 bind_name 要有root权限
        :param bind_passwd:
        :return:
        """
        url = self.server_uri + ":" + str(self.server_port)
        conn = ldap.initialize(url)
        # try:
        #     conn.start_tls_s()
        # except ldap.LDAPError as exc:
        #     raise APIException(exc.message)
        if bind_name and not bind_passwd:
            raise APIException("请输入LDAP密码")
        try:
            rest = conn.simple_bind_s(bind_name, bind_passwd)
        except ldap.SERVER_DOWN:
            raise APIException("无法连接到LDAP")
        except ldap.INVALID_CREDENTIALS:
            raise APIException("LDAP账号错误")
        except Exception, ex:
            raise APIException(type(ex))
        if rest[0] != 97:  # 97 表示success
            raise APIException(rest[1])
        self.ldap_obj = conn

    def ldap_search(self, base='', keyword=None, rdn='cn'):
        """
        base: 域 ou=test, dc=test, dc=com
        keyword: 搜索的用户
        rdn: cn/uid
        """
        scope = ldap.SCOPE_SUBTREE
        filter = "%s=%s" % (rdn, keyword)
        retrieve_attributes = None
        try:
            result_id = self.ldap_obj.search(base, scope, filter, retrieve_attributes)
            result_type, result_data = self.ldap_obj.result(result_id)
            if not result_data:
                return False, []
        except ldap.LDAPError, error_message:
            raise APIException(error_message)
        return True, result_data

    def add_user(self, base_dn, password):
        """
        base_dn: cn=test, ou=magicstack,dc=test,dc=com  NOT NONE
        """
        if not base_dn:
            raise ValidationError(u"DN不能为空")
        dn_list = base_dn.split(',')
        user_info = dict()
        for item in dn_list:
            attr, value = item.split('=')
            if not value:
                raise ValidationError(u"DN输入错误:属性的值为空")
            user_info[attr] = value
        add_record = [('objectclass', ['person', 'organizationalperson']),
                      ('cn', ['%s' % user_info.get("cn")]),
                      ('sn', ['%s' % user_info.get("cn")]),
                      ('userpassword', ['%s' % password])]
        try:
            result = self.ldap_obj.add_s(base_dn, add_record)
        except ldap.LDAPError, error_message:
            raise APIException(error_message)
        else:
            if result[0] == 105:
                return True, []
            else:
                return False, result[1]

    def modify_user(self, dn, attr_list):
        """
        MOD_ADD: 如果属性存在,这个属性可以有多个值,那么新值加进去,旧值保留
        MOD_DELETE :如果属性的值存在,值将被删除
        MOD_REPLACE :这个属性所有的旧值将会被删除,这个值被加进去

        dn: cn=test, ou=magicstack,dc=test, dc=com
        attr_list: [( ldap.MOD_REPLACE, 'givenName', 'Francis' ),
                    ( ldap.MOD_ADD, 'cn', 'Frank Bacon' )
                   ]
        """
        try:
            result = self.ldap_obj.modify_s(dn, attr_list)
        except ldap.LDAPError, error_message:
            raise APIException(error_message)
        else:
            if result[0] == 103:
                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:
            raise APIException(error_message)
        else:
            if result[0] == 107:
                return True, []
            else:
                return False, result[1]

 

 

 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

通过python-ldap处理ldap服

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

通过python-ldap处理ldap服

最近项目中加入LDAP认证方式,那么问题来了,在网站上创建用户的时候,要将用户同步到LDAP服务器上。看了一下python-ldap的文档,实现了对ldap服务器上的用户实现增删改查。import ldapfrom rest_framewo
2023-01-31

Netdata是否支持通过LDAP或OAuth进行身份验证和授权

目前,Netdata不直接支持通过LDAP或OAuth进行身份验证和授权。然而,您可以通过在反向代理或身份验证代理中设置LDAP或OAuth来实现对Netdata的身份验证和授权。您可以使用Nginx等反向代理来实现此功能。 Netdata
Netdata是否支持通过LDAP或OAuth进行身份验证和授权
2024-06-04

ORA-31224: DBMS_LDAP: invalid LDAP session ORACLE 报错 故障修复 远程处理

文档解释ORA-31224: DBMS_LDAP: invalid LDAP sessionCause: An attempt was made by a PL/SQL module to use an LDAP session
ORA-31224: DBMS_LDAP: invalid LDAP session ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-31202: DBMS_LDAP: LDAP client/server error: string ORACLE 报错 故障修复 远程处理

文档解释ORA-31202: DBMS_LDAP: LDAP client/server error: stringCause: There is a problem either on the LDAP server or on the
ORA-31202: DBMS_LDAP: LDAP client/server error: string ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-12168: TNS:Unable to contact LDAP Directory Server ORACLE 报错 故障修复 远程处理

文档解释ORA-12168: TNS:Unable to contact LDAP Directory ServerCause: Cannot contact LDAP directory server to get Oracle Net
ORA-12168: TNS:Unable to contact LDAP Directory Server ORACLE 报错 故障修复 远程处理
2023-11-04

ORA-31227: DBMS_LDAP: invalid LDAP MESSAGE handle ORACLE 报错 故障修复 远程处理

文档解释ORA-31227: DBMS_LDAP: invalid LDAP MESSAGE handleCause: An attempt was made by a PL/SQL module to use an LDAP
ORA-31227: DBMS_LDAP: invalid LDAP MESSAGE handle ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-31212: DBMS_LDAP: PL/SQL – Invalid LDAP mod_array. ORACLE 报错 故障修复 远程处理

文档解释ORA-31212: DBMS_LDAP: PL/SQL - Invalid LDAP mod_array.Cause: There has been an error in the DBMS_LDAP
ORA-31212: DBMS_LDAP: PL/SQL – Invalid LDAP mod_array. ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-31219: DBMS_LDAP: PL/SQL – Invalid LDAP notypes. ORACLE 报错 故障修复 远程处理

文档解释ORA-31219: DBMS_LDAP: PL/SQL - Invalid LDAP notypes.Cause: There has been an error in the DBMS_LDAP explode_dn or
ORA-31219: DBMS_LDAP: PL/SQL – Invalid LDAP notypes. ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-31218: DBMS_LDAP: PL/SQL – Invalid LDAP deleteoldrdn. ORACLE 报错 故障修复 远程处理

文档解释ORA-31218: DBMS_LDAP: PL/SQL - Invalid LDAP deleteoldrdn.Cause: There has been an error in the DBMS_LDAP rename_s
ORA-31218: DBMS_LDAP: PL/SQL – Invalid LDAP deleteoldrdn. ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-31209: DBMS_LDAP: PL/SQL – LDAP count_entry error. ORACLE 报错 故障修复 远程处理

文档解释ORA-31209: DBMS_LDAP: PL/SQL - LDAP count_entry error.Cause: There has been an error in the DBMS_LDAP count_entry
ORA-31209: DBMS_LDAP: PL/SQL – LDAP count_entry error. ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-28030: Server encountered problems accessing LDAP directory service ORACLE 报错 故障修复 远程处理

文档解释ORA-28030: Server encountered problems accessing LDAP directory serviceCause: Unable to access LDAP directory
ORA-28030: Server encountered problems accessing LDAP directory service ORACLE 报错 故障修复 远程处理
2023-11-04

ORA-31208: DBMS_LDAP: PL/SQL – Invalid LDAP Message. ORACLE 报错 故障修复 远程处理

文档解释ORA-31208: DBMS_LDAP: PL/SQL - Invalid LDAP Message.Cause: There has been an error in the DBMS_LDAP
ORA-31208: DBMS_LDAP: PL/SQL – Invalid LDAP Message. ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-31216: DBMS_LDAP: PL/SQL – Invalid LDAP rdn. ORACLE 报错 故障修复 远程处理

文档解释ORA-31216: DBMS_LDAP: PL/SQL - Invalid LDAP rdn.Cause: There has been an error in the DBMS_LDAP operation.Action:
ORA-31216: DBMS_LDAP: PL/SQL – Invalid LDAP rdn. ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-31217: DBMS_LDAP: PL/SQL – Invalid LDAP newparent. ORACLE 报错 故障修复 远程处理

文档解释ORA-31217: DBMS_LDAP: PL/SQL - Invalid LDAP newparent.Cause: There has been an error in the DBMS_LDAP rename_s
ORA-31217: DBMS_LDAP: PL/SQL – Invalid LDAP newparent. ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-31210: DBMS_LDAP: PL/SQL – LDAP get_dn error. ORACLE 报错 故障修复 远程处理

文档解释ORA-31210: DBMS_LDAP: PL/SQL - LDAP get_dn error.Cause: There has been an error in the DBMS_LDAP get_dn
ORA-31210: DBMS_LDAP: PL/SQL – LDAP get_dn error. ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-31399: Cannot contact LDAP server string at port number ORACLE 报错 故障修复 远程处理

文档解释ORA-31399: Cannot contact LDAP server string at port numberCause: The LDAP server specified could not be contacted.
ORA-31399: Cannot contact LDAP server string at port number ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-31214: DBMS_LDAP: PL/SQL – Invalid LDAP mod type. ORACLE 报错 故障修复 远程处理

文档解释ORA-31214: DBMS_LDAP: PL/SQL - Invalid LDAP mod type.Cause: There has been an error in the DBMS_LDAP
ORA-31214: DBMS_LDAP: PL/SQL – Invalid LDAP mod type. ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-31206: DBMS_LDAP: PL/SQL – Invalid LDAP search scope. ORACLE 报错 故障修复 远程处理

文档解释ORA-31206: DBMS_LDAP: PL/SQL - Invalid LDAP search scope.Cause: There has been an error in the DBMS_LDAP search
ORA-31206: DBMS_LDAP: PL/SQL – Invalid LDAP search scope. ORACLE 报错 故障修复 远程处理
2023-11-05

ORA-31213: DBMS_LDAP: PL/SQL – Invalid LDAP mod option. ORACLE 报错 故障修复 远程处理

文档解释ORA-31213: DBMS_LDAP: PL/SQL - Invalid LDAP mod option.Cause: There has been an error in the DBMS_LDAP
ORA-31213: DBMS_LDAP: PL/SQL – Invalid LDAP mod option. ORACLE 报错 故障修复 远程处理
2023-11-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录