Программа, которая запускается при регистрации пользователя. Обычно это оболочка, но не обязательно. Если это поле оставлено пустым, по умолчанию используется /bin/sh
Доступ к базе данных пользователей осуществляется через процедуры, объявленные в
#include
#include
struct passwd *getpwent(void);
void setpwent(void);
void endpwent(void);
struct passwd *getpwnam(const char *name);
struct passwd *getpwuid(uid_t uid);
Поля в struct passwd
struct passwd {
char *pw_name; /* имя пользователя */
char *pw_passwd; /* пароль пользователя */
uid_t pw_uid; /* id пользователя */
gid_t pw_gid; /* id группы */
char *pw_gecos; /* настоящее имя */
char *pw_dir; /* домашний каталог */
char *pw_shell; /* программа оболочки */
};
(Имя pw_gecos
Назначение каждой процедуры описано в следующем списке.
struct passwd *getpwent(void)
Возвращает указатель на внутреннюю структуру static struct passwd
struct passwd переписывается заново. Когда getpwent() достигает конца базы данных паролей, она возвращает NULL. Таким образом, она позволяет пройти через всю базу данных по одному пользователю за раз. Порядок, в котором возвращаются записи, не определен.void setpwent(void)
Сбрасывает внутреннее состояние, так что следующий вызов getpwent()
void endpwent(void)
«Закрывает базу данных», так сказать, будь то простой файл, сетевое соединение или что-нибудь еще.
struct passwd *getpwnam(const char *name)
Ищет пользователя с членом pw_name
name, возвращая указатель на static struct passwd, описывающий пользователя, или NULL, если пользователь не найден.struct passwd *getpwuid(uid_t uid)
Сходным образом ищет пользователя с номером ID, приведенным в uid
static struct passwd, описывающий пользователя, или NULL, если пользователь не найден.getpwuid()
struct stat) и вам нужно вывести имя соответствующего пользователя. getpwnam() преобразует имя в номер ID пользователя, например, если вы хотите использовать с файлом chown() или fchown(). Теоретически обе эти процедуры осуществляют линейный поиск по базе данных паролей для обнаружения нужных сведений. На практике это верно, когда используется файл паролей, однако, кулуарные базы данных (сетевые или другие, как на системах BSD) склоняются к использованию более эффективных методов хранения, так что эти вызовы, возможно, в таком случае не такие дорогие[70].getpwent()
bsearch(). Это очень полезно для избежания множества линейных поисков, свойственных поиску по одному элементу за раз с помощью getpwuid() или getpwnam().