Во многих операционных системах сокеты домена 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, которое может достичь того же результата?
Еще лучше, благодаря принятому ответу, я обнаружил, что getpeereid () напрямую возвращает необходимые данные.
Я никогда не работал с этим, но я думаю, что вы ищете LOCAL_PEERCRED. (см. man unix)
Вы можете подтвердить подлинность программы на другом конце сокета, используя опцию сокета LOCAL_PEERCRED, представленную в Mac OS X 10.4.
См. Техническое примечание TN2083. Демоны и агенты