Index: nfs/nfs_socket.c =================================================================== RCS file: /cvs/src/sys/nfs/nfs_socket.c,v retrieving revision 1.44 diff -u -r1.44 nfs_socket.c --- nfs/nfs_socket.c 2006/08/04 12:35:57 1.44 +++ nfs/nfs_socket.c 2006/12/18 16:17:45 @@ -171,6 +171,7 @@ if (saddr->sa_family == AF_INET) { struct mbuf *mopt; int *ip; + struct ucred *ocred; MGET(mopt, M_WAIT, MT_SOOPTS); mopt->m_len = sizeof(int); @@ -186,8 +187,16 @@ sin->sin_family = AF_INET; sin->sin_addr.s_addr = INADDR_ANY; sin->sin_port = htons(0); + + /* temporarily become root (ugh; sobind should take cred arg) */ + ocred = curproc->p_ucred; + curproc->p_ucred = crdup(ocred); + curproc->p_ucred->cr_uid = 0; + error = sobind(so, m); m_freem(m); + crfree(curproc->p_ucred); + curproc->p_ucred = ocred; if (error) goto bad; @@ -401,8 +410,9 @@ (struct mbuf *)0, flags); if (error) { if (rep) { - log(LOG_INFO, "nfs send error %d for server %s\n",error, - rep->r_nmp->nm_mountp->mnt_stat.f_mntfromname); + if (error != EPIPE) + log(LOG_INFO, "nfs send error %d for server %s\n",error, + rep->r_nmp->nm_mountp->mnt_stat.f_mntfromname); /* * Deal with errors for the client side. */ @@ -537,11 +547,6 @@ } } while (error == EWOULDBLOCK); if (!error && auio.uio_resid > 0) { - log(LOG_INFO, - "short receive (%d/%d) from nfs server %s\n", - sizeof(u_int32_t) - auio.uio_resid, - sizeof(u_int32_t), - rep->r_nmp->nm_mountp->mnt_stat.f_mntfromname); error = EPIPE; } if (error) @@ -568,10 +573,6 @@ } while (error == EWOULDBLOCK || error == EINTR || error == ERESTART); if (!error && auio.uio_resid > 0) { - log(LOG_INFO, - "short receive (%d/%d) from nfs server %s\n", - len - auio.uio_resid, len, - rep->r_nmp->nm_mountp->mnt_stat.f_mntfromname); error = EPIPE; } } else {