Index: nfs/nfs_socket.c =================================================================== RCS file: /cvs/src/sys/nfs/nfs_socket.c,v retrieving revision 1.39 diff -u -r1.39 nfs_socket.c --- nfs/nfs_socket.c 14 Jul 2004 18:32:34 -0000 1.39 +++ nfs/nfs_socket.c 15 Apr 2005 13:12:38 -0000 @@ -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; @@ -403,8 +412,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. */ @@ -539,11 +549,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) @@ -570,10 +575,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 {