15.5. Функция door_cred
Интерфейс дверей предусматривает полезную возможность получения информации о клиенте при каждом вызове. Это осуществляется функцией door_cred:
#include
int door_cred(door_cred_t *cred);
/* Возвращает 0 в случае успешного завершения, –1 – в случае ошибки */
Структура, на которую указывает аргумент cred, имеет тип door_cred_t, определяемый как
typedef struct door_cred {
uid_t dc_euid; /* действующий идентификатор пользователя клиента */
gid_t dc_egid; /* действующий идентификатор группы клиента */
uid_t dc_ruid; /* реальный идентификатор пользователя клиента */
gid_t dc_rgid; /* реальный идентификатор группы клиента */
pid_t dc_pid; /* идентификатор процесса клиента */
} door_cred_t;
В эту структуру помещается информация о клиенте при возвращении из вызова door_cred. В разделе 4.4 [21] подробно рассказывается о различиях между действующими и реальными идентификаторами пользователя и группы, а пример использования этой функции приведен в листинге. 15.5.
Обратите внимание, что эта функция не принимает никаких дескрипторов. Она возвращает информацию о клиенте, осуществившем конкретный вызов через дверь, и поэтому должна вызываться из процедуры сервера или другой функции, вызываемой из процедуры сервера.