obexapp 1.4.5

Maksim Yevmenkin 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..

ok

> 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).
                 */
                cru2x(td->td_ucred, &unp3->unp_peercred);
                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

thanks,
max


More information about the freebsd-bluetooth mailing list