Структуры данных
Библиотека libshadow.a опирается на структуру spwd в которой размещается вся информация извлекаемая из файла /etc/shadow. Ниже приведено определение этой структуры.
struct spwd
{
char *sp_namp; /* регистрационное имя */
char *sp_pwdp; /* зашифрованный пароль */
sptime sp_lstchg; /* дата последнего изменения */
sptime sp_min; /* минимальный срок между изменениями */
sptime sp_max; /* максимальный срок между изменениями */
sptime sp_warn; /* срок начала предупреждения */
sptime sp_inact; /* срок блокировки счета после истечения пароля */
sptime sp_expire; /* количество дней с 1/1/70 до конца службы пароля */
unsigned long sp_flag; /* зарезервировано для следующих версий */
};
Shadow Suite позволяет передавать в поле sp_pwdp не только зашифрованный пароль. Предположим, например, что запись о пользователе имеет следующий вид:
username:Npge08pfz4wuk;@/sbin/extra:9479:0:10000::::
Это означает, что для дальнейшей аутентификации пользователя должна быть запущена программа /sbin/extra. Этой программе будет передано имя пользователя и ключ, поясняющий причину ее запуска[10]. Для нас это означает, что нам придется использовать функцию pwauth для выполнения собственно аутентификации. Пример, приведенный ниже проиллюстрирует этот подход.