int getpeereid(int s,uid_t *u,gid_t *g);


The getpeereid function stores the effective user and group IDs of the peer on local domain socket s in u and g, respectively. It returns 0 if successful, and -1 if an error occurs, setting errno appropriately.

When it accepts a connection, ipcserver uses the effective user ID and effective group ID of the process that called connect to decide whether to handle the connection or drop it immediately. Therefore ucspi-ipc requires operating system support for passing the client credentials to the server. For discussions of various credential-passing mechanisms, see D.J. Bernstein’s Secure interprocess communication and the BugTraq mailing list thread containing Re: Wiping out setuid programs.

Programs in the ucspi-ipc package use getpeereid to obtain client credentials. Unless your operating system supports an implementation of getpeereid, you cannot use ucspi-ipc.


Recent Linux kernels that support SO_PEERCRED with getsockopt provide sufficient basis for a getpeereid function. Various systems offer a gepeereid system call, including OpenBS 3.0, FreeBS 4.6, and AI 5L.

Experimental operating system patches that add a getpeereid system call are available for several BSD variants.


William Baxter <>