ldapsearch 因基本容器中的变音符号而失败

ldapsearch 因基本容器中的变音符号而失败

我的 LDAP(准确地说是活动目录)中有一个ou名称。要搜索它,我必须输入变音符号,当然,但至少存在,因为这证明了:München\C3\BCou

$ 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

然而,虽然我可以搜索为了变音符号(即在过滤器中使用\C3\BC),我无法搜索之内变音符号 ou(即\C3\BC在“base”参数中使用):

$ 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 不存在,而我们刚刚看到它存在。那么我的查询有什么问题?那就是:我必须如何对 中的变音符号进行编码-b?显然,该方法将不同于用于过滤器的编码...

如果需要以下信息:LDAP 服务器是 MS Windows 2003 Active Directory 服务器,我使用ldapsearch最新的 Ubuntu 精确 pengulin 运行。并且(尽管这不适用,因为我们有 basckslash-encoding):

$ 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 或特定于 MS active directory)。变音符号与无点(即无分音符)的对应符号被视为等效。因此,可以指定“Munchen”,而不是指定“München”。这也是为什么名为慕尼黑无法创建慕尼黑已经存在。

答案2

根据RFC2849,任何包含 UTF-8 数据的查询都需要进行 base64 编码。尝试对整个字符串(包括您删除的信息)进行 base64 编码,然后以此进行搜索。

相关内容