Листинг 3.2. Пример работы с базой данных пользователей. (html, txt)
По окончании работы этой программы может быть получен следующий результат (см. пример 3.3):
Листинг 3.3. Возможный результат работы с базой данных пользователей. (html, txt)
Аналогичные функции имеются для поиска в базе данных групп - getgrgid() и getgrnam() (см. пример 3.4):
#include <grp.h> struct group *getgrgid (gid_t gid); #include <grp.h> struct group *getgrnam (const char *name);
Листинг 3.4. Описание функций getgrgid() и getgrnam(). (html, txt)
Структура group обязана содержать поля
char *gr_name;/* Имя группы */ gid_t gr_gid; /* Числовой идентификатор группы */ char **gr_mem; /* Указатель на ограниченный пустым указателем массив символьных указателей на имена пользователей, которым разрешено становиться членами данной группы */
Применение функции getgrgid() отражено в пример 3.5.
Листинг 3.5. Пример работы с базой данных групп. (html, txt)
Приведенная в качестве примера программа может привести к результату, показанному в пример 3.6:
Пользователи, включенные в группу с идентификатором 1: root bin daemon
Листинг 3.6. Возможный результат работы с базой данных групп. (html, txt)
Для смены текущей группы пользователя предназначена служебная программа newgrp (стандарт POSIX-2001 относит ее к числу необязательных, входящих в расширение "Мобильность пользователей", UP):
newgrp [-l] [группа]
Группа, в которую осуществляется переход, задается именем или числовым идентификатором. Будучи вызванной без аргументов, утилита newgrp возвращает пользователя в его начальную группу, заданную в базе данных пользователей.
При смене группы порождается новый процесс, в рамках которого запускается новый экземпляр командного интерпретатора, наследующий у своего предшественника текущий каталог и значения переменных окружения. При указании опции -l окружение формируется так, будто пользователь заново вошел в систему.
Если пользователь не входит в список возможных членов новой группы, при переходе в нее может запрашиваться пароль, однако в стандарте POSIX-2001 этот аспект считается зависящим от реализации.Более того, отмечается, что в базе данных групп нет удобных способов задания паролей, поэтому их использование в приложениях не приветствуется, а со временем пароли групп могут стать ненужными.