Необходимо всегда использовать -lm
при использовании функций от math.h
если Вы хотите сохранить свой код/make-файлы портативным.
Некоторыми вещами в том заголовке являются макросы (которым, очевидно, не нужны дополнительные библиотеки), но которые являются, не указан (за исключением нескольких). Некоторые другие функции могли бы быть реализованы как сборка-ins Вашим компилятором (даже замененный определенными для процессора кодами операций непосредственно), встроенный, и т.д...., таким образом, корректное соединение Вашего кода могло также зависеть от настроек оптимизатора и точного компилятора/версии, Вы используете.
Например:
#include <stdio.h>
#include <math.h>
int main()
{
double d = 0.2;
fprintf(stdout, "%f\n", sqrt(d));
return 0;
}
С GCC 4.5.1 на Linux:
$ gcc -o t t.c
/tmp/cczCfJsj.o: In function `main':
t.c:(.text+0x30): undefined reference to `sqrt'
collect2: ld returned 1 exit status
$ gcc -O3 -o t t.c
# ok, compiled and linked fine
Таким образом для сохранения себя головная боль просто добавьте -lm
.
Необходимо изменить первую строку password [success=1 default=ignore] pam_unix.so obscure sha512
Но не используйте md5, так как новый использует sha512. Если Вы хотите установить использование минимальной длины пароля (8) строка ниже
password [success=2 default=ignore] pam_unix.so obscure sha512 min=8
pam_unix
модуль PAM, который обрабатывает аутентификацию с именем пользователя и паролем, таким образом, это - то, где Вы настроили бы политику паролей.
В конфигурации PAM первый столбец указывает на группу управления. Здесь, это password
, который настраивает обновления данных аутентификации пользователей. Второй столбец указывает поток управления между различными модулями, не касайтесь его, если Вы не знаете то, что Вы делаете. Третий столбец является именем модуля, и последующие столбцы являются параметрами к этому модулю.
Загляните pam_unix
документация, или лучше в pam_unix
страница справочника в Вашей системе, для наблюдения, какие опции поддерживаются. Добавьте опции, которые Вы хотите, например.
password [success=1 default=ignore] pam_unix.so obscure sha512 rounds=10000 minlen=8
Вы могли бы хотеть добавить другие модули для выполнения проверок сложности на пароле, такой как pam_cracklib
. Набор pam_cracklib
как required
и помещенный это прежде pam_unix
(который проверяет изменение пароля):
password required pam_cracklib.so retry=3 difok=1 minlen=10
password [success=1 default=ignore] pam_unix.so obscure sha512 rounds=10000 minlen=8