У меня есть ou имени München в моем LDAP (Active Directory, чтобы быть точным). Чтобы найти его, я должен ввести умляут как \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

Тем не менее, я пока могу найти умляутов (т.е. использовать \C3\BC в фильтрах), я не могу найти в пределах умляут оу (т.е. использовать \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 не существует, а мы только что видели, что она существует. Так что не так с моим запросом? То есть: как мне кодировать умлауты в -b? Видимо, метод будет отличаться от кодировки, используемой для фильтров ...

Если требуется информация: Сервер LDAP является сервером Active Directory для MS Windows 2003, и я запускаю ldapsearch из современного 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

2 ответа2

1

Я нашел решение (хотя я не уверен, применимо ли оно к ldap ingeneral или относится к активному каталогу MS). Умлауты рассматриваются как эквивалентные с их точечными (то есть без диареза) аналогами. Таким образом, вместо указания "Мюнхен" можно указать "Мюнхен". Это также причина, по которой объект с именем Munchen не может быть создан там, где München уже существует.

0

Согласно RFC2849, любой поиск, содержащий данные UTF-8, должен быть закодирован в base64. Попробуйте base64-кодирование всей строки (включая удаленную информацию) и поиск по ней.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .