21.03.2013 Views

Problem - Kevin Tafuro

Problem - Kevin Tafuro

Problem - Kevin Tafuro

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

#ifdef LOCAL_CREDS<br />

nb = 1;<br />

if (setsockopt(sd, 0, LOCAL_CREDS, &nb, sizeof(nb)) == -1) return 0;<br />

#else<br />

#ifdef SO_PASSCRED<br />

nb = 1;<br />

if (setsockopt(sd, SOL_SOCKET, SO_PASSCRED, &nb, sizeof(nb)) == -1)<br />

return 0;<br />

#endif<br />

#endif<br />

do {<br />

msg.msg_iov->iov_base = (void *)&sync;<br />

msg.msg_iov->iov_len = sizeof(sync);<br />

nb = recvmsg(sd, &msg, 0);<br />

} while (nb == -1 && (errno == EINTR || errno == EAGAIN));<br />

if (nb == -1) return 0;<br />

if (msg.msg_controllen < sizeof(struct cmsghdr)) return 0;<br />

cmptr = CMSG_FIRSTHDR(&msg);<br />

#ifndef __NetBSD__<br />

size = sizeof(spc_credentials);<br />

#else<br />

if (cmptr->cmsg_len < SOCKCREDSIZE(0)) return 0;<br />

size = SOCKCREDSIZE(((cred *)CMSG_DATA(cmptr))->sc_ngroups);<br />

#endif<br />

if (cmptr->cmsg_len != CMSG_LEN(size)) return 0;<br />

if (cmptr->cmsg_level != SOL_SOCKET) return 0;<br />

if (cmptr->cmsg_type != SCM_CREDS) return 0;<br />

if (!(credentials = (spc_credentials *)malloc(size))) return 0;<br />

*credentials = *(spc_credentials *)CMSG_DATA(cmptr);<br />

return credentials;<br />

}<br />

int spc_send_credentials(int sd) {<br />

int sync = 0x11223344;<br />

struct iovec iov[1] = { { 0, 0, } };<br />

struct msghdr msg = { 0, 0, iov, 1, 0, 0, 0 };<br />

#if !defined(linux) && !defined(__NetBSD__)<br />

char ctrl[CMSG_SPACE(sizeof(spc_credentials))];<br />

struct cmsghdr *cmptr;<br />

msg.msg_control = ctrl;<br />

msg.msg_controllen = sizeof(ctrl);<br />

cmptr = CMSG_FIRSTHDR(&msg);<br />

cmptr->cmsg_len = CMSG_LEN(sizeof(spc_credentials));<br />

cmptr->cmsg_level = SOL_SOCKET;<br />

cmptr->cmsg_type = SCM_CREDS;<br />

memset(CMSG_DATA(cmptr), 0, sizeof(spc_credentials));<br />

#endif<br />

484 | Chapter 9: Networking<br />

This is the Title of the Book, eMatter Edition<br />

Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!