Index: nfs/nfs_socket.c =================================================================== RCS file: /cvs/src/sys/nfs/nfs_socket.c,v retrieving revision 1.43 diff -u -r1.43 nfs_socket.c --- nfs/nfs_socket.c 2006/01/24 15:06:41 1.43 +++ nfs/nfs_socket.c 2006/05/24 17:10:17 @@ -170,6 +170,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); @@ -185,8 +186,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; @@ -400,8 +409,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. */ @@ -536,11 +546,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) @@ -567,10 +572,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 {