2008-12-11 60 views
2

在许多操作系统下,Unix域套接字允许进程可靠地将其凭据传递给另一个进程,但不能被恶意破坏。例如,这是在Linux上通过SO_PASSCRED and SO_PEERCRED options,在FreeBSD by passing messages that include the cmsgcred structure和NetBSD by setting the LOCAL_CREDS option上完成的。但是,我一直无法找到在Mac OS X下执行此操作的方法。相应的头文件(socket.h)似乎禁用了Apple的构建功能。如何在Mac OS X上通过Unix域套接字传递用户凭据?

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

任何想法的另一个Mac OS X设施可以实现相同的结果吗?

回答

4

我从来没有使用它,但我认为你正在寻找LOCAL_PEERCRED。 (请参阅man unix)

您可以使用Mac OS X 10.4中引入的LOCAL_PEERCRED套接字选项来确认套接字另一端的程序标识。

Technical Note TN2083. Daemons and Agents

+0

确实,在你的指针后面,我发现了unix(4)中记录的选项。谢谢! – 2008-12-11 16:16:37

5

更妙的是,由于接受的答案,我发现getpeereid(),直接返回所需的数据。