问题

小米的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. Java第2章笔记

    1.什么是变量:在程序运行过程中它的值是允许改变的量 2.java中常用的数据类型分为四类八种  第一类:整型   int(整数类型)     byte(字节类型)    short(短整形)     ...

  2. 使用delphi 10.2 开发linux 上的webservice

    前几天做了linux下apache的开发,今天做一个linux 下的webservice ,以供客户端调用. 闲话少说,直接干. 新建一个工程.选other...,选择如图. 继续输入服务名 然后就生 ...

  3. fabric 安装

    fabric 是一个python的库,fabric可以通过ssh批量管理服务器. 第一步安装依赖包 安装fabric依赖及pip yum install -y python-pip gcc pytho ...

  4. 2019.02.07 bzoj4316: 小C的独立集(仙人掌+树形dp)

    传送门 题意:给出一个仙人掌森林求其最大独立集. 思路:如果没有环可以用经典的树形dpdpdp解决. fi,0/1f_{i,0/1}fi,0/1​表示第iii个点不选/选的最大独立集. 然后fi,0+ ...

  5. 2019.01.14 codeforces685B. Kay and Snowflake(树形dp)

    传送门 题意简述:给出一棵树,求每个子树的重心. 首先通过画图可以观察出一个性质,我们从叶子结点向根节点递推重心的话重心的位置是不会下降的. 然后由于一个点的重心要么是自己,要么在重儿子子树内,因此如 ...

  6. 2018.12.31 bzoj3771: Triple(生成函数+fft+容斥原理)

    传送门 生成函数经典题. 题意简述:给出nnn个数,可以从中选1/2/31/2/31/2/3个,问所有可能的和对应的方案数. 思路: 令A(x),B(x),C(x)A(x),B(x),C(x)A(x) ...

  7. ac自动机板子

    hdu2222 #include<bits/stdc++.h> #define ll long long #define M 500005 using namespace std; int ...

  8. Win7 VS2015环境编译cegui-0.8.5

    首先是去官网下载源码与依赖库 http://cegui.org.uk/ 然后得提一下,编译DX11版本带Effects11框架的话会有问题,也就是默认情况编译有问题,这是因为VS2015升级后编译器对 ...

  9. boost-字符编码转换:使用conv

    Windows下的字符集转换可以使用WideCharToMultiByte/ MultiByteToWideChar,Linux下字符集转换可以使用iconv()函数,下面为使用boost的conv来 ...

  10. s4-3 CSMA

    载波侦听多路访问协议  CSMA:Carrier Sense Multiple Access 特点:"先听后发" 改进ALOHA协议的侦听/发送策略  分类 非持续式 持 ...