Other Alias
setnetgrent, endnetgrent, getnetgrent, innetgr
ОБЗОР
#include <netdb.h>
int setnetgrent(const char *netgroup);
void endnetgrent(void);
int getnetgrent(char **host, char **user, char **domain);
int getnetgrent_r(char **host, char **user,
char **domain, char *buf, size_t buflen);
int innetgr(const char *netgroup, const char *host,
const char *user, const char *domain);
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
setnetgrent(), endnetgrent(), getnetgrent(), getnetgrent_r(), innetgr(): _BSD_SOURCE || _SVID_SOURCE
ОПИСАНИЕ
Файл netgroup впервые появился в SunOS. База данных netgroup представляет
собой список строк с тремя элементами (hostname, username,
domainname) или с другими именами netgroup. Любой из элементов тройки
может быть пустым, то есть совпадает с любым значением. Описываемые здесь
функции предоставляют доступ к базам данных netgroup. В файле
/etc/nsswitch.conf задаётся какая база данных будет использована при
поиске.
Вызов setnetgrent() настраивает netgroup, которая будет использована при поиске в последующих вызовах getnetgrent(). Функция getnetgrent() выбирает следующий элемент netgroup и возвращает указатели в host, user, domain. Указатель null означает, что соответствующая запись совпадает с любой строкой. Значения указателей корректны до тех пор, пока не произойдёт других вызовов функций работы с netgroup. Чтобы избежать этой проблемы вы можете использовать функцию GNU getnetgrent_r(), которая хранит строки в переданной ей буфере. Чтобы освободить все выделенные буферы используйте endnetgrent().
В большинстве случаев чаще всего проверяется присутствие тройки (hostname, username, domainname) в netgroup. Для этого можно использовать функцию innetgr() и не вызывать остальные три функции. Не забудьте, что указатель null — универсальный символ и совпадает с любой строкой. Функцию можно безопасно использовать в нитях.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении эти функции возвращают 1 и 0 при ошибке.
ФАЙЛЫ
/etc/netgroup/etc/nsswitch.conf
АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс Атрибут Значение
setnetgrent(),
getnetgrent_r(),
innetgr()
безвредность в потоках:
MT-Unsafe race:netgrent
locale
endnetgrent()
безвредность в потоках: небезопасно (MT-Unsafe race:netgrent)
getnetgrent()
безвредность в потоках:
MT-Unsafe race:netgrent
race:netgrentbuf locale
В приведённой выше таблице netgrent в race:netgrent означает, что если в нескольких нитях программы одновременно используются функции setnetgrent(3), getnetgrent_r(3), innetgr(3), getnetgrent(3) или endnetgrent(3), то может возникнуть состязательность по данным.