Задача была простая. Нет, правда - простая. Сдернуть с корпоративной адресной книги на шарике список людей, фильтрануть их по должностям и заменить почти паре сотен неудачников пароли. Паре сотен плюс-минус, да. Т.е. руками еще наверное можно, но уже оч-чень не хочется.
Ок. Python, requests, берем, парсим, python_ldap, биндимся к домену, ищем УЗП, генерируем пароли по требованиям политики безопасности, пишем в csv'шку, меняем...
Не, ну процедура смены там страшная шозвиздец, без поллитры и мануаля никак - но с мануалем соорудить список кортежей для modify_s вполне можно. Сооружаем, пихаем - не выходит каменный цветок, на выходе:
"{'info': '0000001F: SvcErr: DSID-031A12D2, problem 5003 (WILL_NOT_PERFORM), data 0\n', 'desc': 'Server is unwilling to perform'}"
Гм. Ну да, правда - когда оно с первого раза работало? NOT PERFORM - похоже, пароль не соответствует требованиям, что там у нас? 8 символов, большие+маленькие+спецсимволы, пожалуй однострочник из random.sample('abc...ABC12...9!@#$@', 8) в качестве генератора паролей мог оказаться излишне оптимистичным, о! Чтоб не думать - засуну в бесконечный цикл и пихну break по успеху, за пару-тройку проходов точно чего-нибудь да сгенерит! Оп-па. Повис в усмерть. Т.е. генерит-сгенерить не может. А ну-ка, ручками? Гарантированно живой пароль? Хрена? Фигасе...
По хорошему в этот самый момент надо было выгружать фильтрованный список в csv и powershell'ом менять пароль - но а) мы легких путей не ищем! б) если у вас есть молоток - все вопросы начинают казаться гвоздями! и в) хорошая мысля приходит СИЛЬНО опосля.
А как он там его хранит-то? Мож, base64 какой? Охтыежты! UTF-16 да еще little endian? Не, ну тоже можно... encode('utf-16-le';) - хрена? Ошибка другая? Ой-ё. Ему еще кавычки нужны! Т.е. AD как раз не нужны, а вот openldap'у, оберткой к которому является python ldap очень даже. Ну, ок. Генерякаем UTF-16, ставим кавычки... Тот же 5003. Блина. Может ему не python'овская строка нужна, а что-то типа bytes из python3? Мало ли чего они там с юникодом навертели?
Туда. Сюда. Обратно. Два. Долбанных. Часа. После. Окончания. Рабочего. Времени. Проведенных. С wireshark'ом, ADExplorer'ом и openldap'ом. Не считая собственно python'а. С google'ем, как же без него?
И только опосля, deep inside в недрах технета нахожу... ЧТО ПАРОЛЬ НЕЛЬЗЯ МЕНЯТЬ ПОДКЛЮЧАЯСЬ К AD ПО LDAP!!! Только ldapS, только, мать её, бизопасТность, только хардкор! Меняем строку подключения - и все like a charm.
Ну овть нельзя было дать более осмысленное описание ошибки? Обработать исключение как следует на стороне хоть пихоновской обертки, хоть openldap'а?! Повбывав бы.

@темы: Python