ldapsearch ล้มเหลวด้วย umlaut ในภาชนะฐาน


0

ฉันมีouชื่อMünchenใน LDAP ของฉัน (ไดเรกทอรีที่ใช้งานอยู่จะแม่นยำ) หากต้องการค้นหาฉันต้องเข้าสู่เครื่องหมายบนม้าอย่าง\C3\BCแน่นอน แต่อย่างน้อยก็ouมีอยู่ตามที่พิสูจน์:

$ ldapsearch -D $ADMIN -w $ADMINPWD -v -u -h $HOST -b 'ou=Benutzer,dc=[obfuscate]' '(ou=M\C3\BCnchen)' ou
ldap_initialize( ldap://[obfuscate] )
filter: (ou=M\C3\BCnchen)
requesting: ou 
# extended LDIF
#
# LDAPv3
# base <ou=Benutzer,dc=[obfuscate]> with scope subtree
# filter: (ou=M\C3\BCnchen)
# requesting: ou 
#

# M\C3\BCnchen, Benutzer, [obfuscate]
dn:: T1U9TcO8b[obfuscate]==
ufn: M\C3\BCnchen, Benutzer, [obfuscate]
ou:: TcO8bmNoZW4=

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

แต่ผมในขณะที่ผมสามารถค้นหาสำหรับ umlauts (เช่นใช้\C3\BCในฟิลเตอร์) ผมไม่สามารถค้นหาภายใน OU ที่เครื่องหมาย (ใช้ IE \C3\BCใน "ฐาน" พารามิเตอร์):

$ ldapsearch -D $ADMIN -w $ADMINPWD -v -u -h $HOST -b 'ou=M\C3\BCnchen,ou=Benutzer,dc=[obfuscate]'                        
ldap_initialize( ldap://[obfuscate] )
filter: (objectclass=*)
requesting: All userApplication attributes
# extended LDIF
#
# LDAPv3
# base <ou=M\C3\BCnchen,ou=Benutzer,dc=[obfuscate]> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object
matchedDN: OU=Benutzer,DC=[obfuscate]
text: 0000208D: NameErr: DSID-031001CD, problem 2001 (NO_OBJECT), data 0, best match of:
    'OU=Benutzer,DC=[obfuscate]'


# numResponses: 1

ข้อผิดพลาดอ้างว่า ou ไม่มีอยู่ในขณะที่เราเพิ่งเห็นว่ามีอยู่ ดังนั้นมีอะไรผิดปกติกับแบบสอบถามของฉัน นั่นคือ: ฉันต้องเข้ารหัส umlauts ได้-bอย่างไร เห็นได้ชัดว่าวิธีการจะแตกต่างจากการเข้ารหัสที่ใช้สำหรับตัวกรอง ...

ในกรณีที่จำเป็นต้องใช้ข้อมูล: เซิร์ฟเวอร์ LDAP เป็นเซิร์ฟเวอร์ MS Windows 2003 Active Directory และฉันเรียกใช้ldapsearchจาก pengulin แม่นยำล่าสุดของ Ubuntu และ (แม้ว่าสิ่งนี้ไม่ควรใช้เนื่องจากเรามีการเข้ารหัส basckslash อยู่แล้ว):

$ locale
LANG=de_DE.UTF-8
LANGUAGE=de_DE@euro
LC_CTYPE="de_DE@euro"
LC_NUMERIC="de_DE@euro"
LC_TIME="de_DE@euro"
LC_COLLATE="de_DE@euro"
LC_MONETARY="de_DE@euro"
LC_MESSAGES="de_DE@euro"
LC_PAPER="de_DE@euro"
LC_NAME="de_DE@euro"
LC_ADDRESS="de_DE@euro"
LC_TELEPHONE="de_DE@euro"
LC_MEASUREMENT="de_DE@euro"
LC_IDENTIFICATION="de_DE@euro"
LC_ALL=de_DE@euro

คำตอบ:


1

ฉันพบวิธีแก้ปัญหา (แม้ว่าฉันไม่แน่ใจว่าจะใช้กับ ldap ingeneral หรือเป็นสิ่งเฉพาะกับ MS active directory) Umlauts ได้รับการปฏิบัติเทียบเท่ากับคู่หูที่ไม่มีจุด (เช่น dieresis-less) ดังนั้นแทนที่จะระบุ "München" หนึ่งสามารถระบุ "Munchen" นี่คือเหตุผลว่าทำไมไม่สามารถสร้างวัตถุที่ชื่อว่าMunchen เมื่อมีMünchenอยู่แล้ว


0

ตามRFC2849การค้นหาใด ๆ ที่มีข้อมูล UTF-8 จะต้องมีการเข้ารหัสแบบเบส 64 ลองเข้ารหัส 64 ทั้งสตริง (รวมถึงข้อมูลที่คุณลบออก) และค้นหาโดยใช้


หืมอย่างน้อยก็ใช้ldapsearch ... -b 'T1U9TcO8bmNo...hbA=='ไม่ได้ เห็นได้ชัดว่ามีกลไกบางอย่างในการแจ้ง ldapsearch ว่า-bพารามิเตอร์นั้นจำเป็นต้องเข้ารหัสแบบ base64
Hagen von Eitzen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.