การเพจโดยใช้ ldapsearch


14

ฉันค้นหาไดเรกทอรี LDAP ที่มีจำนวนผลลัพธ์มากกว่า sizelimit ที่ตั้งค่าไว้ในปัจจุบันคือ 500 โดย slapd.conf ซึ่งไม่สามารถเปลี่ยนแปลง intent และวัตถุประสงค์ทั้งหมดได้)

ความคิดของฉันคือการใช้ ldapsearch ต่อไป แต่มาจากออฟเซ็ตที่แตกต่างกันในแต่ละครั้ง (501, 1001 ฯลฯ ) จนกระทั่งได้รับผลลัพธ์ทั้งหมด

ฉันเห็นman page สำหรับ ldapsearchแล้วและปรากฏว่าสิ่งนี้ได้รับการจัดการให้คุณโดยใช้ตัวเลือก -E:

-E [!]<ext>[=<extparam>] search extensions (! indicates criticality)
         [!]domainScope              (domain scope)
         [!]mv=<filter>              (matched values filter)
         [!]pr=<size>[/prompt|noprompt]   (paged results/prompt)
         [!]subentries[=true|false]  (subentries)
         [!]sync=ro[/<cookie>]            (LDAP Sync refreshOnly)
                 rp[/<cookie>][/<slimit>] (LDAP Sync refreshAndPersist)

ดังนั้นฉันจึงพยายาม: ldapsearch -h $HOST -p $PORT -x -L -b "$BASE" '*' '+' -E pr=$SIZE

อย่างไรก็ตามเมื่อผลลัพธ์ (เช่นผลลัพธ์ที่เพจได้ถึงขนาด = 50 เช่น) ถึง 500 ฉันได้รับข้อผิดพลาดเดียวกันกับถ้าผลลัพธ์ไม่ได้เพจ:

Size limit exceeded (4)

ฉันเคยเห็นใน man pages มีตัวเลือกอื่นสำหรับ virtuallistview แต่ไม่สามารถหาตัวอย่างได้และฉันไม่คิดว่า ldapsearch รุ่นของฉันมีตัวเลือกนี้

เป้าหมายที่นี่คือการสร้างการสำรองข้อมูลโดยใช้ ldapsearch และตัวเลือก -L เพื่อสร้างไฟล์ ldif ที่เหมาะสำหรับการกู้คืนฐานข้อมูล

การค้นหา google สองสามครั้งปรากฏขึ้นพร้อมกับปัญหาเดียวกันที่ฉันมี แต่ไม่มีวิธีแก้ไขที่เหมาะสม ..


ฉันขอแนะนำให้คุณตั้งค่าloglevelเป็น 256 เพื่อดูว่ามันพูดอะไร
quanta

ฉันไม่สามารถเข้าถึงไฟล์ slapd.conf โดยตรงและฉันรู้ว่าปัญหาคืออะไรดังนั้นการบันทึก verbose เพิ่มเติมจะไม่ใช้งานมากนัก
สตีฟเกรกอรี่

ในการตอบสนองต่ออีธาน 2147483647 คือ 2 ^ 32 หรือ 0b11111111111111111111111111111111111 นี่คือ maximim สำหรับ int ที่ลงชื่อเข้าใช้แบบ 32 บิต นี่เป็นขีด จำกัด ขนาดสูงสุดที่อนุญาต
เร่งด่วน

2147483647 = 2 ^ 31-1
ฌอน

คำตอบ:


8

ผู้ดูแลระบบเซิร์ฟเวอร์ไดเรกทอรีมีข้อ จำกัด เกี่ยวกับจำนวนรายการที่สามารถส่งคืนได้ในการตอบกลับคำขอการค้นหา ไคลเอ็นต์ LDAP สามารถร้องขอการ จำกัด ขนาด แต่ขีด จำกัด ที่ไคลเอ็นต์ร้องขอนี้ไม่สามารถแทนที่ขีด จำกัด ที่กำหนดโดยเซิร์ฟเวอร์ เพจจิ้งทำงานอย่างถูกต้อง: เพจเพียงส่งการตอบกลับการค้นหาหลายครั้งแต่ละขนาดที่ลูกค้าร้องขอ แต่ก็ยังต้องไม่เกินขนาดที่กำหนดโดยเซิร์ฟเวอร์ มุมมองรายการเสมือนนั้นคล้ายกับการแบ่งหน้าอย่างง่ายยกเว้นว่าไคลเอ็นต์ LDAP สามารถเริ่มต้นและทำงานต่อได้ทุกที่ในขณะที่ผลลัพธ์หน้าง่าย ๆ ไคลเอ็นต์ LDAP จะต้องอ่านผลลัพธ์ตามลำดับ


10
ldapsearch -LLL  -x -h $LDAPHOST -b"dc=whatever" -D${LDAPUSER} -w"${LDAPPASW}" objectclass=* -E pr=2147483647/noprompt

ส่วนที่สำคัญคือตอนท้าย: -E pr=2147483647/noprompt. ฉันใช้สิ่งนี้ในวันนี้ดังนั้นฉันจึงรู้ว่ามันใช้งานได้อย่างน้อยกับแบ็กเอนด์ LDAP ของ Active Directory สำหรับฉันนี่สามารถข้ามข้อ จำกัด ของเซิร์ฟเวอร์ได้

จากตัวอย่างของคุณดูเหมือนว่าคุณอาจไม่ได้ใช้พรอมต์ / / พรอมต์ ความแตกต่างคือด้วย / พรอมต์มันหยุดระหว่างแต่ละหน้า

ฉันไม่แน่ใจว่าทำไมหมายเลข 2147483647 ถึงใช้ได้ แต่เป็นเช่นนั้น

แหล่งที่มาของฉัน: http://www.commandlinefu.com/commands/view/2779/bypass-1000-entry-limit-of-active-directory-with-ldapsearch


3
จำนวน2147483647คือขนาดหน้ากระดาษ หากคุณเปลี่ยน-Eพารามิเตอร์เป็นpr=100/promptคุณจะเห็นว่าให้ldapsearchคุณกดปุ่มทุก ๆ 100 ผลลัพธ์
rpet

นั่นได้ผล !!!!
Saheb

Active Directory ผิดปกติในประสบการณ์ของฉันซึ่งทำให้การค้นหาแบบเพจเกินขนาด จำกัด ของเซิร์ฟเวอร์ อย่างไรก็ตามจะบังคับใช้ขีด จำกัด ขนาดของเพจในการค้นหา เนื่องจากคุณบอกให้ ldapsearch ไม่แจ้งเตือนคุณจึงไม่เห็นว่าขนาดหน้ากระดาษที่ใช้จริงสำหรับการค้นหานั้นน้อยกว่ามาก สิ่งนี้จะไม่ทำงานกับ Sun LDAP เมื่อ 10 ปีที่แล้ว OpenLDAP เมื่อ 8 ปีที่แล้วหรือ 389-ds เมื่อ 10 นาทีก่อน (นั่นคือสิ่งที่ฉันทำงานที่บ้านทุกวันนี้)
Ed Grimm

0

ApacheDS สามารถทำการค้นหาเพจที่คุณต้องการ อย่างน้อยกับ Active Directory

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.