Created attachment 217167 [details] Client and server that demonstrate the actual behavior of getpeereid The manpage for `getpeereid` states: > The argument s must be a UNIX-domain socket (unix(4)) of type SOCK_STREAM on which either connect(2) or listen(2) have been called. This is surprising! Why would you be able to get the effective user ID of the peer on the socket for which *listen* has been called? There isn't a peer until you `accept`. Using the attached server and client programs, it looks like my intuition is correct: $ ./server status=-1 eid=0 errno=57 status=0 eid=1001 errno=57 `getpeereid` requires s to be the socket that has been returned by `accept()`, not the one that was `listen()`ed on. I think the language should be changed to: > The argument s must be a UNIX-domain socket (unix(4)) of type SOCK_STREAM on which connect(2) has been called or was returned by accept(2) or accept4(2).
Probably connect(2) has to succeed, too, right? Maybe we can simplify to "a connected UNIX-domain socket?" (Does it really have to be SOCK_STREAM, either, or just any connectable socket type?)
> a connected UNIX-domain socket This would have been better, since it's what I expected. It looks like they've added some new socket types that I'm not familiar with, so I won't comment on whether it's only SOCK_STREAM.
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=fa9f74220146233b7224da7c94870540dc39ae68 commit fa9f74220146233b7224da7c94870540dc39ae68 Author: Gordon Bergling <gbe@FreeBSD.org> AuthorDate: 2023-11-18 09:02:12 +0000 Commit: Gordon Bergling <gbe@FreeBSD.org> CommitDate: 2023-11-18 09:02:12 +0000 getpeerid.3: Clarify the 's' argument The argument 's' of getpeerid(3) must be a connected UNIX-domain socket, so document it. PR: 248614 MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D42629 lib/libc/gen/getpeereid.3 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
A commit in branch stable/14 references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=edb6d4f50d9ea5a57dfc01964e950b5fb3a7e0fa commit edb6d4f50d9ea5a57dfc01964e950b5fb3a7e0fa Author: Gordon Bergling <gbe@FreeBSD.org> AuthorDate: 2023-11-18 09:02:12 +0000 Commit: Gordon Bergling <gbe@FreeBSD.org> CommitDate: 2023-11-21 06:49:28 +0000 getpeerid.3: Clarify the 's' argument The argument 's' of getpeerid(3) must be a connected UNIX-domain socket, so document it. PR: 248614 Differential Revision: https://reviews.freebsd.org/D42629 (cherry picked from commit fa9f74220146233b7224da7c94870540dc39ae68) lib/libc/gen/getpeereid.3 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
A commit in branch stable/13 references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=05d562a4e53e6c808949591d10b4b94fd0898eeb commit 05d562a4e53e6c808949591d10b4b94fd0898eeb Author: Gordon Bergling <gbe@FreeBSD.org> AuthorDate: 2023-11-18 09:02:12 +0000 Commit: Gordon Bergling <gbe@FreeBSD.org> CommitDate: 2023-11-21 06:49:47 +0000 getpeerid.3: Clarify the 's' argument The argument 's' of getpeerid(3) must be a connected UNIX-domain socket, so document it. PR: 248614 Differential Revision: https://reviews.freebsd.org/D42629 (cherry picked from commit fa9f74220146233b7224da7c94870540dc39ae68) lib/libc/gen/getpeereid.3 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)