maksim.yevmenkin at gmail.com
Thu Feb 22 00:49:31 UTC 2007
On 2/21/07, Iain Hibbert <plunky at rya-online.net> wrote:
> On Wed, 21 Feb 2007, Maksim Yevmenkin wrote:
> > well, the sdp_session_open() is called before setgid()/setuid() so
> > sdpd will mark this session as "privileged". once sdp session is open,
> > obexapp can drop its privileges and still be able to register service
> > with sdpd.
> I think the problem with my implementation of this is that the SCM_CREDS
> information is sent alongside the first normal message, and because that
> are not sent until after the setuid(), the credentials have changed..
> As I recall, for PEER_CREDS, sdpd actively queries the remote credentials
> when as the socket is open - (it seems that a slight race condition could
> exist there, or are the credentials passed the ones that were used to open
> the socket?)
i do not think so, from kern/uipc_usrreq.c
* unp_peercred management:
* The connecter's (client's) credentials are copied from its
* process structure at the time of connect() (which is now).
unp3->unp_flags |= UNP_HAVEPC;
* The receiver's (server's) credentials are copied from the
* unp_peercred member of socket on which the former called
* listen(); unp_listen() cached that process's credentials
* at that time so we can use them now.
> I will look into this a bit more, maybe if I arrange to send() an zero
> length message before changing the uid it may work, though I'm not sure
> how well sdpd will handle that..
i'm not sure what are you suggesting
More information about the freebsd-bluetooth