日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ladp3 获取属性_Ldap3库使用方法(四)

發布時間:2025/3/12 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ladp3 获取属性_Ldap3库使用方法(四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import json

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("adtest.com", port=636, use_ssl=True, get_info=ALL, connect_timeout=5)

LDAP_SERVER_POOL = [server1]

SERVER_USER = 'adtest\\administrator'

SERVER_PASSWORD = "XXXXXXX"

class AD(object):

''' AD用戶操作 '''

def __init__(self):

'''初始化'''

self.conn = Connection( #配置服務器連接參數

server=LDAP_SERVER_POOL,

auto_bind=True,

authentication=NTLM, #連接Windows AD需要配置此項

read_only=False, #禁止修改數據:True

user=SERVER_USER,#管理員賬戶

password=SERVER_PASSWORD,

)

self.leaved_base_dn = 'ou=Leaved,dc=adtest,dc=intra'#離職賬戶所在OU

self.active_base_dn = 'ou=測試部門,dc=adtest,dc=intra'#正式員工賬戶所在OU

self.search_filter = '(objectclass=user)'#只獲取【用戶】對象

self.ou_search_filter = '(objectclass=organizationalUnit)'#只獲取【OU】對象

def update_obj(self, dn, attr):

'''更新員工 or 部門屬性先比較每個屬性值,是否和AD中的屬性一致,不一樣的記錄,統一update注意:1. attr中dn屬性寫在最后2. 如果name屬性不一樣的話,需要先變更名字(實際是變更原始dn為新name的DN),后續繼續操作update and move_objectUser 的 attr 照如下格式寫:dn = "cn=test4,ou=IT組,dc=adtest,dc=com" #需要移動的User的原始路徑{#updateUser需要更新的屬性表"Sn": "李", # 姓"telephoneNumber": "12345678944","mobile": "12345678944","Displayname": "張三3","Manager":"CN=李四,OU=人事部,DC=adtest,DC=com",#需要使用用戶的DN路徑'DistinguishedName':"cn=張三,ou=IT組,dc=adtest,dc=com" #用戶需要移動部門時,提供此屬性,否則不提供}OU 的 attr 格式如下:dn = "ou=人事部,dc=adtest,dc=com" #更新前OU的原始路徑attr = {'name':'人事部','managedBy':"CN=張三,OU=IT組,DC=adtest,DC=com",'DistinguishedName': "ou=人事部,dc=adtest,dc=com" # 更新后的部門完整路徑}'''

changes_dic = {}

for k,v in attr.items():

if not self.conn.compare(dn=dn,attribute=k,value=v):

if k == "name":

res = self.__rename_obj(dn=dn,newname=attr['name']) # 改過名字后,DN就變了,這里調用重命名的方法

if res['description'] == "success":

if "CN" == dn[:2]:

dn = "cn=%s,%s" % (attr["name"], dn.split(",", 1)[1])

if "OU" == dn[:2]:

dn = "DN=%s,%s" % (attr["name"], dn.split(",", 1)[1])

if k == "DistinguishedName": # 如果屬性里有“DistinguishedName”,表示需要移動User or OU

self.__move_object(dn=dn,new_dn=v) # 調用移動User or OU 的方法

changes_dic.update({k:[(MODIFY_REPLACE,[v])]})

self.conn.modify(dn=dn,changes=changes_dic)

return self.conn.result

def __rename_obj(self,dn,newname):

'''OU or User 重命名方法:param dn:需要修改的object的完整dn路徑:param newname: 新的名字,User格式:"cn=新名字";OU格式:"OU=新名字":return:返回中有:'description': 'success', 表示操作成功{'result': 0, 'description': 'success', 'dn': '', 'message': '', 'referrals': None, 'type': 'modDNResponse'}'''

self.conn.modify_dn(dn,newname)

return self.conn.result

def compare_attr(self,dn,attr,value):

'''比較員工指定的某個屬性'''

res = self.conn.compare(dn=dn,attribute=attr,value=value)

return res

def __move_object(self,dn,new_dn):

'''移動員工 or 部門到新部門'''

relative_dn,superou = new_dn.split(",",1)

res = self.conn.modify_dn(dn=dn,relative_dn=relative_dn,new_superior=superou)

return res

總結

以上是生活随笔為你收集整理的ladp3 获取属性_Ldap3库使用方法(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。