Deleted Added
full compact
37c37
< __FBSDID("$FreeBSD: head/lib/libc/rpc/svc_vc.c 115394 2003-05-29 22:06:06Z mbr $");
---
> __FBSDID("$FreeBSD: head/lib/libc/rpc/svc_vc.c 116391 2003-06-15 10:32:01Z mbr $");
73,77d72
< struct cmessage {
< struct cmsghdr cmsg;
< struct cmsgcred cmcred;
< };
<
97d91
< static int __msgread_withcred(int, void *, size_t, struct cmessage *);
479,480d472
< struct sockaddr *sa;
< struct cmessage *cm;
490,491d481
< cm = NULL;
< sa = (struct sockaddr *)xprt->xp_rtaddr.buf;
493,498c483
< if (sa->sa_family == AF_LOCAL) {
< cm = (struct cmessage *)xprt->xp_verf.oa_base;
< if ((len = __msgread_withcred(sock, buf, len, cm)) > 0)
< xprt->xp_p2 = &cm->cmcred;
< } else
< len = _read(sock, buf, (size_t)len);
---
> len = _read(sock, buf, (size_t)len);
527,538c512,514
< if (sa->sa_family == AF_LOCAL) {
< cm = (struct cmessage *)xprt->xp_verf.oa_base;
< if ((len = __msgread_withcred(sock, buf, len, cm)) > 0) {
< xprt->xp_p2 = &cm->cmcred;
< return (len);
< } else
< goto fatal_err;
< } else {
< if ((len = _read(sock, buf, (size_t)len)) > 0) {
< gettimeofday(&cfp->last_recv_time, NULL);
< return (len);
< }
---
> if ((len = _read(sock, buf, (size_t)len)) > 0) {
> gettimeofday(&cfp->last_recv_time, NULL);
> return (len);
558d533
< struct sockaddr *sa;
570d544
< sa = (struct sockaddr *)xprt->xp_rtaddr.buf;
572,575c546
< if (sa->sa_family == AF_LOCAL)
< i = __msgwrite(xprt->xp_fd, buf, (size_t)cnt);
< else
< i = _write(xprt->xp_fd, buf, (size_t)cnt);
---
> i = _write(xprt->xp_fd, buf, (size_t)cnt);
750,816d720
< int
< __msgread_withcred(sock, buf, cnt, cmp)
< int sock;
< void *buf;
< size_t cnt;
< struct cmessage *cmp;
< {
< struct iovec iov[1];
< struct msghdr msg;
< union {
< struct cmsghdr cmsg;
< char control[CMSG_SPACE(sizeof(struct cmsgcred))];
< } cm;
< int ret;
<
<
< bzero(&cm, sizeof(cm));
< iov[0].iov_base = buf;
< iov[0].iov_len = cnt;
<
< msg.msg_iov = iov;
< msg.msg_iovlen = 1;
< msg.msg_name = NULL;
< msg.msg_namelen = 0;
< msg.msg_control = &cm;
< msg.msg_controllen = CMSG_SPACE(sizeof(struct cmsgcred));
< msg.msg_flags = 0;
<
< ret = _recvmsg(sock, &msg, 0);
< bcopy(&cm.cmsg, &cmp->cmsg, sizeof(cmp->cmsg));
< bcopy(CMSG_DATA(&cm), &cmp->cmcred, sizeof(cmp->cmcred));
<
< if ((msg.msg_flags & MSG_CTRUNC) != 0)
< return (-1);
<
< return (ret);
< }
<
< static int
< __msgwrite(sock, buf, cnt)
< int sock;
< void *buf;
< size_t cnt;
< {
< struct iovec iov[1];
< struct msghdr msg;
< struct cmessage cm;
<
< bzero((char *)&cm, sizeof(cm));
< iov[0].iov_base = buf;
< iov[0].iov_len = cnt;
<
< cm.cmsg.cmsg_type = SCM_CREDS;
< cm.cmsg.cmsg_level = SOL_SOCKET;
< cm.cmsg.cmsg_len = sizeof(struct cmessage);
<
< msg.msg_iov = iov;
< msg.msg_iovlen = 1;
< msg.msg_name = NULL;
< msg.msg_namelen = 0;
< msg.msg_control = &cm;
< msg.msg_controllen = sizeof(struct cmessage);
< msg.msg_flags = 0;
<
< return(_sendmsg(sock, &msg, 0));
< }
<
818,819c722,723
< * Get the effective UID of the sending process. Used by rpcbind and keyserv
< * (AF_LOCAL).
---
> * Get the effective UID of the sending process. Used by rpcbind, keyserv
> * and rpc.yppasswdd on AF_LOCAL.
822,830c726,739
< __rpc_get_local_uid(SVCXPRT *transp, uid_t *uid)
< {
< struct cmsgcred *cmcred;
< struct cmessage *cm;
< struct cmsghdr *cmp;
<
< cm = (struct cmessage *)transp->xp_verf.oa_base;
<
< if (cm == NULL)
---
> __rpc_get_local_uid(SVCXPRT *transp, uid_t *uid) {
> int sock, ret;
> gid_t egid;
> uid_t euid;
> struct sockaddr *sa;
>
> sock = transp->xp_fd;
> sa = (struct sockaddr *)transp->xp_rtaddr.buf;
> if (sa->sa_family == AF_LOCAL) {
> ret = getpeereid(sock, &euid, &egid);
> if (ret == 0)
> *uid = euid;
> return (ret);
> } else
832,841d740
< cmp = &cm->cmsg;
< if (cmp == NULL || cmp->cmsg_level != SOL_SOCKET ||
< cmp->cmsg_type != SCM_CREDS)
< return (-1);
<
< cmcred = __svc_getcallercreds(transp);
< if (cmcred == NULL)
< return (-1);
< *uid = cmcred->cmcred_euid;
< return (0);