LOCAL_CREDS socket option

Hartmut Brandt Hartmut.Brandt at dlr.de
Fri Mar 16 12:47:14 UTC 2007


Maxim Konovalov wrote:
> On Fri, 16 Mar 2007, 10:51+0100, Harti Brandt wrote:
>
>   
>> Hi,
>>
>> is there any specific reason that we don't support the LOCAL_CREDS
>> option for SOCK_DGRAM sockets in the local domain? It's documented
>> in unix(4) for a long time and it looks like it is supported, for
>> example, in NetBSD.
>>     
>
> IIRC it is supported.
>
> From tools/regression/sockets/unix_cmsg/README:
>
> For SOCK_DGRAM sockets:
> ----------------------
> [...]
>  3: Sending cmsgcred, receiving sockcred
>
>     Server creates datagram socket and set socket option LOCAL_CREDS
>     for it.  Client sends one message with data and control message with
>     SOCK_CREDS type to Server.  Server should receive one message with
>     data and control message with SCM_CREDS type followed by struct
>     sockcred{} and this structure should contain correct information.
>
>   
Well, this comment does not actually mean, that the feature works - it 
just means that the regression test tests it. If you look at uipc_usrreq.c:

static struct protosw localsw[] = {
{
	.pr_type =		SOCK_STREAM,
	.pr_domain =		&localdomain,
	.pr_flags =		PR_CONNREQUIRED|PR_WANTRCVD|PR_RIGHTS,
	.pr_ctloutput =		&uipc_ctloutput,
	.pr_usrreqs =		&uipc_usrreqs
},
{
	.pr_type =		SOCK_DGRAM,
	.pr_domain =		&localdomain,
	.pr_flags =		PR_ATOMIC|PR_ADDR|PR_RIGHTS,
	.pr_usrreqs =		&uipc_usrreqs
},

you see that .pr_ctloutput is NULL for SOCK_DGRAM sockets which means they don't
support any of the socket options described in unix(4). Also I included that feature
into bsnmp(1) where I found out that it doesn't work. I've a patch to fix it, but wanted
to know whether it was left out on purpose or not.

harti
};




More information about the freebsd-current mailing list