Как я могу передать учетные данные пользователя через сокет Unix-домена в Mac OS X? - PullRequest
2 голосов
/ 11 декабря 2008

Во многих операционных системах сокеты домена Unix позволяют процессу надежно передавать свои учетные данные другому процессу таким образом, который не может быть злонамеренно подорван. Например, это делается в Linux с помощью параметров SO_PASSCRED и SO_PEERCRED , во FreeBSD путем передачи сообщений, включающих структуру cmsgcred , и в NetBSD путем установки параметра LOCAL_CREDS . Однако я не смог найти способ выполнить эту операцию в Mac OS X. Кажется, что в соответствующем заголовке (socket.h) функциональность отключена для сборки Apple.

#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
#ifndef __APPLE__
// ...
struct cmsgcred {

Есть идеи о другом средстве Mac OS X, которое может достичь того же результата?

Ответы [ 2 ]

5 голосов
/ 11 декабря 2008

Еще лучше, благодаря принятому ответу, я обнаружил, что getpeereid () напрямую возвращает необходимые данные.

4 голосов
/ 11 декабря 2008

Я никогда не работал с этим, но я думаю, что вы ищете LOCAL_PEERCRED. (см. man unix)

Вы можете подтвердить подлинность программы на другом конце сокета, используя опцию сокета LOCAL_PEERCRED, представленную в Mac OS X 10.4.

См. Техническое примечание TN2083. Демоны и агенты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...