1. 程式人生 > >用python解決ldap的Size limit exceeded問題!

用python解決ldap的Size limit exceeded問題!

    本人工作中用到ldap進行使用者的管理等,我的主程式語言是python,所以用python對ldap進行操作,在私有云部分因為客戶的ldap需求不一樣,所以會產生一些問題,特此記錄一下.

    ldap其他問題暫且不談,先說下解決 ”Size limit exceeded“ 的問題。

產生”Size limit exceeded“ 問題的原因就是客戶端去ldap服務端查詢,客戶端想一次把查詢到的多個數據返回,結果伺服器不讓,就產生了這個問題,解決辦法有兩個:

一、在ldap伺服器上把一次可返回的資料的總量調大。

    1、ldap一般執行在windows上,linux系統先不說,在windows上單擊開始選單,搜到Ntdsutil.exe程式後點擊執行

    2、輸入:ldap policies, 然後enter

    3、輸入:connections, 然後enter

    4、輸入:connect to domain xxxxx.com, 然後enter(xxxxx.com是AD上繫結的域名)

    5、輸入:q,然後enter

    6、輸入:show values,然後enter(檢視MaxPageSize)

    7、輸入:set MaxPageSize to 2000,然後enter

    8、輸入:commit changes,然後enter

    然後重複第6步檢視結果,無誤後可鍵入quit退出。

    第一種方法需要服務端做修改,但對於一些金融證券類的公司可能不行,因為他們認為這個風險不可控,值要設定多大才為最好?所以第二種方法需要修改客戶端程式碼。

二、修改python程式碼,分頁獲取ldap伺服器返回的資訊,當時百度谷歌了很久,又遇到過'module' object has no attribute 'LDAP_CONTROL_PAGE_OID'的問題,現在終於搞定了,此方法不用管ldap的版本資訊。

    程式碼所用python版本: 2.7.6

import ldap
from ldap.controls import SimplePagedResultsControl

l = ldap.initialize('ldap://域名或ip')
l.simple_bind_s('ldap使用者', 'ldap使用者密碼')
PAGE_SIZE = 500  #設定每頁返回的條數
ATTRLIST = ['cn', 'displayName', 'name', 'telephoneNumber', 'objectClass', 'sAMAccountName']  #設定返回的屬性值
pg_ctrl = SimplePagedResultsControl(True, size=PAGE_SIZE, cookie="")
userdata = []

while True:
    msgid = l.search_ext('OU=xxx,OU=xxx,DC=xxx,DC=com', ldap.SCOPE_ONELEVEL, "(objectClass=user)", ATTRLIST, serverctrls=[pg_ctrl])
    _a, res_data, _b, srv_ctrls = l.result3(msgid)
    print 'res_data', len(res_data)
    userdata.extend(res_data)
    cookie = srv_ctrls[0].cookie
    if cookie:
        pg_ctrl.cookie = cookie
    else:
        break

print 'totalnum:', len(userdata)

    程式碼要點為怎麼用cookie值,程式碼中pg_ctrl的方法有:

   

    其中size為每頁返回的資料數量,可控,其他引數不做說明。

    有問題歡迎指正。


相關推薦

python解決ldap的Size limit exceeded問題!

    本人工作中用到ldap進行使用者的管理等,我的主程式語言是python,所以用python對ldap進行操作,在私有云部分因為客戶的ldap需求不一樣,所以會產生一些問題,特此記錄一下.    ldap其他問題暫且不談,先說下解決 ”Size limit exceed

強烈推薦一本免費演算法書《Python解決資料結構與演算法問題》

學 Python 僅僅只學 Python 語法和 API 是遠遠不夠的,掌握演算法和資料結構這種永遠都不會過時的核心技能才是決定一個程式設計師職業發展的關鍵因素。演算法和資料結構對專業程式設計師來說重要性不言而喻,同樣一個問題,不同演算法效率可謂千差萬別。在問題規模很小的時候你可能感知不到,

python解決剪刀石頭布

選擇與迴圈:玩家與計算機一起玩剪刀、石頭、布的遊戲,分別由0、1、2代表剪刀、石頭、布,玩家需要通過鍵盤輸入值,計算機隨機產生,比較大小,如果玩家獲勝,則輸出“恭喜,你贏了!”,如果平局,則輸出“平局,要不再來一局!”,如果玩家輸了,則輸出“輸了,遊戲結束!

python解決 圖論 和 多項式的矩陣、特徵值、特徵多項式的相互轉化

馬上就要畢業了,不少的同學都在緊鑼密鼓的寫論文,對於一些數學系或者理科生來說,經常會遇到一些圖論問題,根據圖形來求出這個圖的矩陣、圖的度……那麼我們知道很多的圖形都能轉化成特徵多項式,那麼今天我們就來寫一個程式,使其通過圖形的矩陣來求多項式。 開始 其實大部分數學工具(Matlab)都能

Python解決TSP問題(2)——動態規劃演算法

本介紹用python解決TSP問題的第二個方法——動態規劃法 演算法介紹 動態規劃演算法根據的原理是,可以將原問題細分為規模更小的子問題,並且原問題的最優解中包含了子問題的最優解。也就是說,動態規劃是一種將問題例項分解為更小的、相似的子問題,並存儲子問題的解而避免計算

Python解決Pat上的題目,二戰成功

用Python解決Pat上的題目,第一次以本地測試通過而線上評測失敗告終後,心有不甘。再挑了一道更簡單的題目試了一下,結果成功了。說明python確實是可以用來求解Pat上的題目呀。 題目:1001. 害死人不償命的(3n+1)猜想 (15) 提交的程式

Python版本的資料結構書_《Python解決資料結構與演算法問題》

源於經典 資料結構作為計算機從業人員的必備基礎,Java, c 之類的語言有很多這方面的書籍,Python 相對較少, 其中比較著名的一本 problem-solving-with-algorithms-and-data-structure-using-pyt

Python解決簡單的水果分類問題(二)

接著上一篇:用Python解決簡單的水果分類問題(一)https://blog.csdn.net/uvwxyzhao/article/details/80924139繼續:繪製KNN分類器的決策邊界:這裡封裝一個方法:這裡分別調參,看下效果:效果如下:訓練集k=5的訓練集k=

解決Android Studio 出現 GC overhead limit exceeded

不知道怎麼回事,自從在公司開發新的專案,每次打包studio就出現各種問題,真是讓人摸不著頭腦。在搞不懂所以然的時候只能簡單粗暴的  關機重啟。每次有效只能打包一個apk,第二次就會有不同的問題產生,真是奇怪!! 今天就記錄一下GC overhead limit exceeded這個問題如

python寫一個小程式,解決買水果的問題?

問題: 商店總共有三種水果,香蕉/蘋果/葡萄,單價分別為3.5/5.0/3.0元/500克。 寫一個小程式實現:          1、輸出一個選單:列印每種水果的價格:          2、尋問客戶欲購買水果?          3、客戶想購買的克數?    

學會Python處理Excel文件,萬行Excel資料隨便解決

前段時間小編分享了一篇關於處理文件的文章,本來想第二天再發一篇有關於處理Excel的文章,沒想到後面忘了,今天特地補上用Python來處理Excel文件。python再用於處理資料是非常合適的,所以難免會經常要對excel文件進行讀取的操作,網上這方面的資料相對來說比較殘缺;因此,搜尋了很多資料,總結一下比較

eclipse開發工具報錯gc overhead limit exceeded解決方案

在新建maven工程時會報錯:gc overhead limit exceeded。原因是eclipse的記憶體不夠,需要eclipse目錄下的eclipse.ini檔案。 調大以下的引數值,Ecli

出現GC overhead limit exceeded解決方案

當我在使用MyEclispe IDE建立Maven專案的時候出現  "An internal error occurred during: “Build Project”. GC overhead limit exceeded",剛開始以為我clean一下,然後重啟MyEclipse就可以

Spark OOM:java heap space,OOM:GC overhead limit exceeded解決方法

問題描述: 在使用spark過程中,有時會因為資料增大,而出現下面兩種錯誤: java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError:GC overhead limit exceeded 這兩種錯誤之前我一直認為是e

py4j——python訪問java遇到的問題解決

簡單來說就是先裝上py4j的包,然後在Python環境中去執行官網py4j的demo程式,但是遇到了一些問題。 ERROR:root:Exception while sending command. Traceback (most recent call

python 2.7 chardet解決爬蟲獲取網頁編碼的識別判斷和轉換問題

python3以前版本的最頭痛問題就是編碼的轉換,在爬取不同網頁的時候發現編碼有N多種,目前已爬取到的網頁編碼如下: gbk utf-8 UTF-8-SIG SHIFT_JIS GB2312 Big5 EUC-JP ascii CP932 EUC-KR

myeclipse maven專案搭建卡死 GC overhead limit exceeded 問題解決

以前在使用maven專案時 用的方式是直接在myeclipse裡建立maven project  最近使用了 先建立web專案 再新建一個mavenproject的方式構建Maven 搭建maven 見此連結 不過多敘述 點選開啟 執行環境 : myeclipse201

Python 多程序程式設計解決python多執行緒程式設計CPU利用率低的問題

之前用python寫了個多執行緒,但發現四核的電腦,CPU利用率卻用了不到30%,後來使用多程序程式設計,四核全開,CPU利用率達到了100%!python中的多執行緒其實並不是真正的多執行緒,如果想要充分地使用多核CPU的資源,在python中大部分情況需要使用多程序。Py

python maximum recursion depth exceeded解決方式

用Python寫了一個遞迴指令碼,指令碼如下 def fact(n): return fact_iter(n, 1) def fact_iter(num, product): if num == 1: return product

java.lang.OutOfMemoryError GC overhead limit exceeded原因分析及解決方案

最近一個上線執行良好的專案出現使用者無法登入或者執行某個操作時,有卡頓現象。查看了日誌,出現了大量的java.lang.OutOfMemoryError: GC overhead limit exceeded錯誤。 oracle官方給出了這個錯誤產生的原因和解決方法: Exception in thread