Есть задача проверять пароль на наличие стандартных фраз и сложность при вводе его пользователем с авторизцией в SAMBA. Делать это обязательно, так как юзеры крайне бестолковые и могут вводить самые чудные пароли типа 1234; аааа. Пытаюсь откомпелировать crackcheck для проверки сложности пароля из директории с примерами самбы /usr/local/share/examples/samba/auth/crackcheck. Директория содержит после установки самбы два файла Makefile и crackcheck.c.
Потребовалось создать скрипт генерации библиотеки для проверки пароля и заголовочного файл для crack.h для компиляции утилиты crackcheck.
Информацию по этому вопросу использовал samba.org а также статью http://www.linuxfromscratch.org/hints/downloads/files/OLD/pa...
Порядок действий был таков:
1. Откомпилировал пакет cracklib во freebsd.
2. Создал скрипт для создания словаря проверки пароля create_cracklib_dict.sh (используя словарь пакета cracklib).
--------------------------------------------
#!/bin/sh
if [ -z "$*" ]; then
echo "Usage:"
echo " $0 wordlist ..."
echo
echo "This script takes one or more word list files as arguments"
echo "and converts them into cracklib dictionaries for use"
echo "by password checking programs. The results are placed in"
echo "/usr/local/libdata/cracklib_dict.*"
echo
echo "Example:"
echo "$0 /usr/share/dict/words"
else
/usr/local/bin/mkdict $* | /usr/local/bin/packer /usr/local/libdata/cracklib_dict
fi
---------------------------------------------
3. Получились: файл содержащий словарь "cracklb_dict.pwd" и вспом. файлы "cracklb_dict.hwm""cracklb_dict.pwi" в директории /usr/local/libdata/.
4. Создал файл "crack.h", поместил в каталог с Makefile и crackcheck.c.
---------------------------------------------
#ifndef CRACKLIB_H
#define CRACKLIB_H
/* Pass this function a password (pw) and a path to the
* dictionaries (/usr/lib/cracklib_dict should be specified)
* and it will either return a NULL string, meaning that the
* password is good, or a pointer to a string that explains the
* problem with the password.
* You must link with -lcrack
*/
extern char *FascistCheck(char *pw, char *dictpath);
#endif
---------------------------------------------
5. В файле crackcheck.c указал define "crack.h" в двойные ковычки, чтобы искался в тойже директории, а не в системной. Файл при компиляции находится.
6. Для компиляции такая команда в директории:
#cd /usr/local/share/examples/samba/auth/crackcheck
#make DICTPATH=/usr/local/libdata/cracklib_dict SRCDICTS=/usr/share/dict/words install
7. Компиляция утилиты crackcheck, которую, в свою очередь, будет испльзовать САМБА при проверке пароля, вываливается с такой ошибкой:
gcc -O2 -I -c crackcheck.c
crackcheck.c: In function 'main':
crackcheck.c:132 warning: assignment discards qualifrom pointer target type
/var/tmp//ccURpSIn.o(.text+0x318): In function 'main':
: undefined reference to 'FascistCheck'
*** Error code 1
Stop in /usr/local/share/examples/samba/auth/crackcheck
Результатом компиляции должен получиться файлик libcrack.a до него дело не доходит...
Вопрос такой: если кто-то делал проверку пароля таким образом, помогите советом. Возможно есть другие пути проверки паролей, а я иду неверным? Все идеи на эту тему будут полезны.
Заранее спасибо за ответы.