setnetgrent, endnetgrent, getnetgrent, getnetgrent_r, innetgr -
работа с
элементами
групп
сетей
Standard C library (
libc,
-lc)
#include <netdb.h>
int setnetgrent(const char *netgroup);
void endnetgrent(void);
int getnetgrent(char **restrict host,
char **restrict user, char **restrict domain);
int getnetgrent_r(char **restrict host,
char **restrict user, char **restrict domain,
char buf[restrict .buflen], size_t buflen);
int innetgr(const char *netgroup, const char *host,
const char *user, const char *domain);
setnetgrent(),
endnetgrent(),
getnetgrent(),
getnetgrent_r(),
innetgr():
начиная с glibc 2.19:
_DEFAULT_SOURCE
в glibc 2.19 и старее:
_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(),
getnetgrent_r(),
innetgr(),
getnetgrent()
или
endnetgrent(), то
может
возникнуть
состязательность
по данным.
Эти
функции
отсутствуют
в POSIX.1, но
setnetgrent(),
endnetgrent(),
getnetgrent() и
innetgr()
доступны в
большинстве
систем UNIX.
Функция
getnetgrent_r() не так
широко
распространена
в других
системах.
В
реализации
BSD функция
setnetgrent()
возвращает
void.
sethostent(3),
setprotoent(3),
setservent(3)
Русский
перевод
этой
страницы
руководства
был сделан
Alexander Golubev <
[email protected]>, Azamat Hackimov
<
[email protected]>, Hotellook, Nikita
<
[email protected]>, Spiros Georgaras <
[email protected]>, Vladislav
<
[email protected]>, Yuri Kozlov <
[email protected]>
и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]