Bug 248614

Summary: getpeereid.3 says listen where it means accept.
Product: Documentation Reporter: George Nachman <gnachman>
Component: Manual PagesAssignee: Gordon Bergling <gbe>
Status: Closed FIXED    
Severity: Affects Some People CC: doc, gbe
Priority: ---    
Version: Latest   
Hardware: Any   
OS: Any   
See Also: https://reviews.freebsd.org/D42629
Attachments:
Description Flags
Client and server that demonstrate the actual behavior of getpeereid none

Description George Nachman 2020-08-12 09:06:54 UTC
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).
Comment 1 Conrad Meyer freebsd_committer freebsd_triage 2020-08-12 22:11:08 UTC
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?)
Comment 2 George Nachman 2020-08-14 03:36:44 UTC
> 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.
Comment 3 commit-hook freebsd_committer freebsd_triage 2023-11-18 09:03:07 UTC
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(-)
Comment 4 commit-hook freebsd_committer freebsd_triage 2023-11-21 06:50:10 UTC
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(-)
Comment 5 commit-hook freebsd_committer freebsd_triage 2023-11-21 06:50:11 UTC
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(-)