From:Dmitry Popov 10:40 Subject: IB password encryption with crypt() Вспомнил тут как-то проблему и покопался в исходниках. Исходники IB6, правда не первой свежести. Но не думаю, что там что-то поменялось. Выяснил следующее. Способ шифрования пароля определяется в jrd/enc.c. Все остальные модули используют ENC_crypt(), определённую там. А определяется она одним из двух способов: либо как перевызов системной функции crypt() в тех системах где она есть, или местной функцией в том же модуле, если в системе такого нет. Так что если IB на вашей платформе зависит от системной crypt(), то для избавления от зависимости достаточно подправить буквально один #define. Ну и потом пересобраться :) Далее, чтение доков по системной функции crypt() выявило, что она может работать (интерфейс позволяет) как в режиме DES, так и MD5. Принимает два параметра - key и salt, возвращает шифровку. Так вот, алгоритм шифрования выбирается по началу строки salt - для MD5 там надо всунуть специальный префикс, который IB, естественно, не всовывает. Но! Тот и другой алгоритм должен быть реализован в установленной криптобиблиотеке, чего в некоторых системах не наблюдается. Откуда и проблемы. Что именно произойдёт, если вызвать crypt() в режиме DES в отсутствие надлежащей библиотеки, я сказать не могу - у меня поддерживаются оба варианта. Однако можно предположить, что ничего нормального не выдаст. Решений, как уже теперь понятно, два - либо доставить descrypt в своей системе, либо перекомпилить IB, кому что легче. Ещё хочу добавить: авторы Слаквари, в которой я в основном живу, недавно выложили на сайт пакетик glibc 2.2. Так вот когда я его поставил и глянул доки, оказалось, что оба алгоритма (MD5 и DES) там поддерживаются вместе и ничего доставлять не нужно. В деталях не копался, но похоже, что во всех системах, основанных на glibc проблемы с криптованием скоро (после 2.2) должны пройти. Для полной уверенности провёл эксперимент - переправил себе пароль с новым glibc и глянул в isc4.gdb таблицу users. Шифровка по формату однозначно DESовская. -- Дмитрий Попов, mailto:popov@krista.ru