Использование пакета TCL ldap для изменения пароля пользователя AD - PullRequest
0 голосов
/ 29 января 2019

Задача состоит в том, чтобы изменить пароль AD пользователя.У меня есть сценарий TCL ldapmodify для установки пароля, который работает:

set unicodePwd [encodePw4ad $pw]
lappend text {dn: $dn}
lappend text {changetype: modify}
lappend text {replace: unicodePwd}
lappend text {unicodePwd:: $unicodePwd}
lappend text {-} 

set fn /tmp/ldiff.[clock microseconds].ldif
write_file $fn [subst [join $text \n]] 
.....
exec ldapmodify -H $host -D $binddn -x -w $bindpw -f $fn 

Используя TCL 8.6 с LDAP 1.9.2 Пакет код выглядит так:

set unicodePwd [encodePw4ad $pw]
set handle [::ldap::secure_connect $host 636 0]
ldap::bind $handle $binddn $bindpw
#ldap::modify $handle $dn [list postalCode 123456]
ldap::modify $handle $dn [list unicodePwd $unicodePwd]                                                                                                                       
ldap::unbind $handle
ldap::disconnect $handle

Это работает для"postalCode", но не для "unicodePwd".

LDAP error unwillingToPerform '': 0000001F: SvcErr: DSID-031A12D2, problem 5003 (WILL_NOT_PERFORM), data 0

Любой намек на расследование?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Обнаружена проблема:

ldapmodify использует 'unicodePwd ::'.'::' сообщает AD, что значение закодировано в base64.

в TCL ldap :: modify 'unicodePwd' следует отправлять только в Unicode (без base64).

Мынашел способ отправить base64 через TCL ldap :: modify

0 голосов
/ 30 января 2019

Я не могу проверить это (поскольку у меня нет доступной среды), но следую этой цитате ...

Синтаксис атрибута unicodePwd - строка октетов;однако служба каталогов ожидает, что строка октетов будет содержать строку UNICODE (как указывает имя атрибута).Это означает, что любые значения этого атрибута, передаваемые в LDAP, должны быть строками UNICODE, которые закодированы в BER (базовые правила кодирования) в виде строки октетов.Кроме того, строка UNICODE должна начинаться и заканчиваться кавычками, которые не являются частью требуемого пароля.

из https://support.microsoft.com/en-gb/help/269190/how-to-change-a-windows-active-directory-and-lds-user-password-through

... значение для записи записи unicodePwdдолжен быть отформатирован следующим образом в Tcl (> = 8.6):

set pwd "abc123"
set pwd [string cat \" $pwd \"]; # must begin/ end in quotes
set pwd [encoding convertto unicode $pwd]; # UNICODE (UTF-16LE) string
set unicodePwd [binary encode base64 $pwd]; # base64 encoded variant

Примечание: вы можете наблюдать, что результирующая строка из [encoding convertto unicode $pwd] использует 2 байта на символ (16 байтов для «abc123», включая кавычки)) или всего восемь, если вы использовали utf-8 или что-то еще, когда запускаете [string length] на разных шагах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...