问题

小米的openfalcon在使用ldap首次登陆成功后,会在本地创建同名的账号, 这就有个问题当你更新了ldap的密码时,openfalcon是没有同步本地账号密码的功能

二次改造

  1. 方便我们debug, 先把日志的debug打开,默认是没有运行时日志的,只有console日志

    # 编辑文件 dashboard/rrd/utils/logger.py
      
    import sys
    from rrd import config
    import logging
    file_handler = logging.FileHandler(filename='/data1/dev/open-falcon/dashboard/var/running.log')
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    file_handler.setFormatter(formatter)
    logging.getLogger().addHandler(file_handler)
    logging.getLogger().setLevel(logging.DEBUG)
  2. 添加两个util方法 dashboard/rrd/view/utils.py

    def get_Apitoken(name, password):
        d = {"name": name, "password": password}
        h = {"Content-type":"application/json"}
        r = requests.post("%s/user/login" %(config.API_ADDR,), \
                data=json.dumps(d), headers=h)
        if r.status_code != 200:
            raise Exception("%s %s" %(r.status_code, r.text))
        sig = json.loads(r.text)["sig"]
        return json.dumps({"name":name,"sig":sig})
     
    def get_user_id(name, Apitoken):
        h = {"Content-type":"application/json","Apitoken":Apitoken}
        r = requests.get("%s/user/name/%s" %(config.API_ADDR,name), headers=h)
        if r.status_code != 200:
            user_id = -1
            return user_id
        user_id = json.loads(r.text)["id"]
        return user_id
  3. 重构登陆函数

    diff --git a/rrd/view/auth/auth.py b/rrd/view/auth/auth.py
    index c203c4c..a546b95 100644
    --- a/rrd/view/auth/auth.py
    +++ b/rrd/view/auth/auth.py
    @@ -17,6 +17,7 @@
     from flask import request, g, abort, render_template, redirect
     from flask.ext.babel import refresh
     import requests
    +import traceback
     import json
     from rrd import app
     from rrd import config
    @@ -48,6 +49,7 @@ def auth_login():
             if ldap == "1":
                 try:
                     ldap_info = view_utils.ldap_login_user(name, password)
    +                log.debug("ldap_info: %s" %ldap_info)
                     h = {"Content-type":"application/json"}
                     d = {
    @@ -58,12 +60,20 @@ def auth_login():
                         "phone": ldap_info['phone'],
                     }
    -                r = requests.post("%s/user/create" %(config.API_ADDR,), \
    +                Apitoken = view_utils.get_Apitoken('admin''admin_password')
    +                user_id = view_utils.get_user_id(name, Apitoken)
    +                log.debug('apitoken:%s, user_id:%s' %(Apitoken, user_id))
    +
    +                if user_id > 0:
    +                    r = requests.put("%s/admin/change_user_passwd" %(config.API_ADDR), data=json.dumps({"user_id":user_id,"passwor
    +                    log.debug('ldap login success and synchronize user password')
    +                else:
    +                    r = requests.post("%s/user/create" %(config.API_ADDR,), \
                             data=json.dumps(d), headers=h)
    -                log.debug("%s:%s" %(r.status_code, r.text))
    +                    log.debug("create user status %s:%s" %(r.status_code, r.text))
    -                #TODO: update password in db if ldap password changed
                 except Exception as e:
    +                log.debug(traceback.format_exc())
                     ret["msg"] = str(e)
                     return json.dumps(ret)

falcon适配ldap密码同步的更多相关文章

  1. 记一次LDAP主从同步配置

    LDAP主从同步 OpenLDAP在2.3版本之前的同步复制带有一系列缺点如只支持一主多从模式等,在此缺点就不多说,下文着重介绍一下OpenLDAP V2.4以后的同步负复制功能 同步功能 2.4版最 ...

  2. Azure Active Directory Connect密码同步问题

    这几天一直在弄O365与本地域账号的密码同步问题.由于微软即将用Azure Active Directory Connect(以下简称AADC)这个同步工具替代之前的DirSync,所以我也研究了下这 ...

  3. 如何将多个 Apple 设备中保存在 iCloud 里面密码同步

    如何将多个 Apple 设备中保存在 iCloud 里面密码同步 iCloud 钥匙串 密码同步 数据迁移 iOS iCloud 钥匙串会记住一些信息,因此您就无需记忆这些信息. 它会在您批准的任何设 ...

  4. 通过PowerShell启用AADC的密码同步功能

    在AADC工具里面也可以启用. 下面这个是世纪互联工程师提供的Powershell脚本(我测试了下是可以的),其中,$adConnector和$aadConnector可以在AADC工具里面找到. $ ...

  5. 19 Go的全能ORM简单入门

    gorm 昨天我的ldap账户改了以后,openfalcon(v2.1)-dashboard竟然无法登陆了!显然,没有把我的密码同步到本地数据库里面,怎么办?只能改openfalcon用户认证的源码了 ...

  6. 实验记录贴 —— 账号同步实验 RTX 和 LDAP(AD域)

    目前,公司有多个系统,RTX,邮箱(MD),OA,NC. 这些系统之间,如果要实现单点登录的话,账户肯定需要同步,或者某一种映射机制. 如果所有数据都和中央账号数据库(LDAP,这里是AD域)看齐,那 ...

  7. [原创]django+ldap实现统一认证部分一(django-auth-ldap实践)

    前言 接之前我的文章,django+ldap+memcache实现单点登录+统一认证 ,ldap部署相关,ldap双机\LAM配置管理\ldap备份还原,目前来说,我们已经有了高可用性的ldap环境了 ...

  8. 07: Django 使用ldap登录、注销等

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

  9. lsyncd 实时同步

    1. 几大实时同步工具比较 1.1 inotify + rsync 最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是inotify + rsync,但随着文件数量的增大到100W+,目录下的 ...

随机推荐

  1. C# WebService创建、发布、调用的简单例子

    Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. Web ...

  2. AJAX-DOM事件

    1.DOM事件 1.select的onchange事件 当选项框中的内容发生改变时需要出发的事件.2.Ajax 1.名词解释 1.同步 在一个任务进行中,不能开启其它的任务. 同步访问:浏览器在向服务 ...

  3. 求一个数的n次幂

    1.当这个数是2的多少次幂: 求(2^m)^n  =  2^(m*n) = 1<<m*n; 2.快速幂(要考虑底数a,和m的正负) int quick_mod(int a,int m){ ...

  4. 2019.01.21 bzoj3674: 可持久化并查集加强版(主席树+并查集)

    传送门 题意:维护可持久化并查集,支持在某个版本连边,回到某个版本,在某个版本 询问连通性. 思路: 我们用主席树维护并查集fafafa数组,由于要查询历史版本,因此不能够用路径压缩. 可以考虑另外一 ...

  5. 2018.12.31 NOIP训练 czy的后宫5(树形dp)

    传送门 题意:给一棵有根树,树有点权,最多选出mmm个点,如果要选一个点必须先选其祖先,问选出来的点权和最大值是多少. 直接背包转移就行了. 代码

  6. CString int转换

    1.CString 转 int      CString strtemp = "100";    int  intResult;    intResult= atoi(strtem ...

  7. SVN previous operation has not finished

    svn提交遇到恶心的问题,可能是因为上次cleanup中断后,进入死循环了. 错误如下: 解决方法:清空svn的队列 1.下载sqlite3.exe 2.找到你项目的.svn文件,查看是否存在wc.d ...

  8. oracle学习笔记一:用户管理(2)创建删除用户

    本文主要介绍如何创建和删除用户,当然里面牵涉很多知识,慢慢道来. 1,创建用户 需求:假设你是oracle管理员,当一个同事入职,你需要分配给一个账号. 创建用户,一般需要有相应权限的用户才可以创建用 ...

  9. Python 错误和异常小结[转]

    原文链接    http://blog.csdn.net/sinchb/article/details/8392827 事先说明哦,这不是一篇关于Python异常的全面介绍的文章,这只是在学习Pyth ...

  10. mui框架如何实现页面间传值

    mui框架如何实现页面间传值 我的传值 listDetail = '<li class="mui-table-view-cell mui-media>">< ...