Deleted Added
full compact
nfs_nfsiod.c (34961) nfs_nfsiod.c (36176)
1/*
2 * Copyright (c) 1989, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Rick Macklem at The University of Guelph.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 20 unchanged lines hidden (view full) ---

29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * @(#)nfs_syscalls.c 8.5 (Berkeley) 3/30/95
1/*
2 * Copyright (c) 1989, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Rick Macklem at The University of Guelph.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 20 unchanged lines hidden (view full) ---

29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * @(#)nfs_syscalls.c 8.5 (Berkeley) 3/30/95
37 * $Id: nfs_syscalls.c,v 1.36 1998/02/09 06:10:37 eivind Exp $
37 * $Id: nfs_syscalls.c,v 1.37 1998/03/30 09:54:17 phk Exp $
38 */
39
40#include <sys/param.h>
41#include <sys/systm.h>
42#include <sys/sysproto.h>
43#include <sys/kernel.h>
44#include <sys/sysctl.h>
45#include <sys/file.h>

--- 172 unchanged lines hidden (view full) ---

218 if (error)
219 return (error);
220 if ((nd.ni_vp->v_flag & VROOT) == 0)
221 error = EINVAL;
222 nmp = VFSTONFS(nd.ni_vp->v_mount);
223 vput(nd.ni_vp);
224 if (error)
225 return (error);
38 */
39
40#include <sys/param.h>
41#include <sys/systm.h>
42#include <sys/sysproto.h>
43#include <sys/kernel.h>
44#include <sys/sysctl.h>
45#include <sys/file.h>

--- 172 unchanged lines hidden (view full) ---

218 if (error)
219 return (error);
220 if ((nd.ni_vp->v_flag & VROOT) == 0)
221 error = EINVAL;
222 nmp = VFSTONFS(nd.ni_vp->v_mount);
223 vput(nd.ni_vp);
224 if (error)
225 return (error);
226 if ((nmp->nm_flag & NFSMNT_MNTD) &&
226 if ((nmp->nm_state & NFSSTA_MNTD) &&
227 (uap->flag & NFSSVC_GOTAUTH) == 0)
228 return (0);
227 (uap->flag & NFSSVC_GOTAUTH) == 0)
228 return (0);
229 nmp->nm_flag |= NFSMNT_MNTD;
229 nmp->nm_state |= NFSSTA_MNTD;
230 error = nqnfs_clientd(nmp, p->p_ucred, &ncd, uap->flag,
231 uap->argp, p);
232 } else if (uap->flag & NFSSVC_ADDSOCK) {
233 error = copyin(uap->argp, (caddr_t)&nfsdarg, sizeof(nfsdarg));
234 if (error)
235 return (error);
236 error = getsock(p->p_fd, nfsdarg.sock, &fp);
237 if (error)

--- 271 unchanged lines hidden (view full) ---

509 if ((slp = nfsd->nfsd_slp) == (struct nfssvc_sock *)0)
510 continue;
511 if (slp->ns_flag & SLP_VALID) {
512 if (slp->ns_flag & SLP_DISCONN)
513 nfsrv_zapsock(slp);
514 else if (slp->ns_flag & SLP_NEEDQ) {
515 slp->ns_flag &= ~SLP_NEEDQ;
516 (void) nfs_sndlock(&slp->ns_solock,
230 error = nqnfs_clientd(nmp, p->p_ucred, &ncd, uap->flag,
231 uap->argp, p);
232 } else if (uap->flag & NFSSVC_ADDSOCK) {
233 error = copyin(uap->argp, (caddr_t)&nfsdarg, sizeof(nfsdarg));
234 if (error)
235 return (error);
236 error = getsock(p->p_fd, nfsdarg.sock, &fp);
237 if (error)

--- 271 unchanged lines hidden (view full) ---

509 if ((slp = nfsd->nfsd_slp) == (struct nfssvc_sock *)0)
510 continue;
511 if (slp->ns_flag & SLP_VALID) {
512 if (slp->ns_flag & SLP_DISCONN)
513 nfsrv_zapsock(slp);
514 else if (slp->ns_flag & SLP_NEEDQ) {
515 slp->ns_flag &= ~SLP_NEEDQ;
516 (void) nfs_sndlock(&slp->ns_solock,
517 &slp->ns_solock,
517 (struct nfsreq *)0);
518 nfsrv_rcv(slp->ns_so, (caddr_t)slp,
519 M_WAIT);
518 (struct nfsreq *)0);
519 nfsrv_rcv(slp->ns_so, (caddr_t)slp,
520 M_WAIT);
520 nfs_sndunlock(&slp->ns_solock);
521 nfs_sndunlock(&slp->ns_solock,
522 &slp->ns_solock);
521 }
522 error = nfsrv_dorec(slp, nfsd, &nd);
523 cur_usec = nfs_curusec();
524 if (error && slp->ns_tq.lh_first &&
525 slp->ns_tq.lh_first->nd_time <= cur_usec) {
526 error = 0;
527 cacherep = RC_DOIT;
528 writes_todo = 1;

--- 143 unchanged lines hidden (view full) ---

672 * For stream protocols, prepend a Sun RPC
673 * Record Mark.
674 */
675 if (sotype == SOCK_STREAM) {
676 M_PREPEND(m, NFSX_UNSIGNED, M_WAIT);
677 *mtod(m, u_long *) = htonl(0x80000000 | siz);
678 }
679 if (solockp)
523 }
524 error = nfsrv_dorec(slp, nfsd, &nd);
525 cur_usec = nfs_curusec();
526 if (error && slp->ns_tq.lh_first &&
527 slp->ns_tq.lh_first->nd_time <= cur_usec) {
528 error = 0;
529 cacherep = RC_DOIT;
530 writes_todo = 1;

--- 143 unchanged lines hidden (view full) ---

674 * For stream protocols, prepend a Sun RPC
675 * Record Mark.
676 */
677 if (sotype == SOCK_STREAM) {
678 M_PREPEND(m, NFSX_UNSIGNED, M_WAIT);
679 *mtod(m, u_long *) = htonl(0x80000000 | siz);
680 }
681 if (solockp)
680 (void) nfs_sndlock(solockp, (struct nfsreq *)0);
682 (void) nfs_sndlock(solockp, solockp,
683 (struct nfsreq *)0);
681 if (slp->ns_flag & SLP_VALID)
682 error = nfs_send(so, nd->nd_nam2, m, NULL);
683 else {
684 error = EPIPE;
685 m_freem(m);
686 }
687 if (nfsrtton)
688 nfsd_rt(sotype, nd, cacherep);
689 if (nd->nd_nam2)
690 FREE(nd->nd_nam2, M_SONAME);
691 if (nd->nd_mrep)
692 m_freem(nd->nd_mrep);
693 if (error == EPIPE)
694 nfsrv_zapsock(slp);
695 if (solockp)
684 if (slp->ns_flag & SLP_VALID)
685 error = nfs_send(so, nd->nd_nam2, m, NULL);
686 else {
687 error = EPIPE;
688 m_freem(m);
689 }
690 if (nfsrtton)
691 nfsd_rt(sotype, nd, cacherep);
692 if (nd->nd_nam2)
693 FREE(nd->nd_nam2, M_SONAME);
694 if (nd->nd_mrep)
695 m_freem(nd->nd_mrep);
696 if (error == EPIPE)
697 nfsrv_zapsock(slp);
698 if (solockp)
696 nfs_sndunlock(solockp);
699 nfs_sndunlock(solockp, solockp);
697 if (error == EINTR || error == ERESTART) {
698 free((caddr_t)nd, M_NFSRVDESC);
699 nfsrv_slpderef(slp);
700 s = splnet();
701 goto done;
702 }
703 break;
704 case RC_DROPIT:

--- 189 unchanged lines hidden (view full) ---

894 char **auth_str;
895 int *auth_len;
896 char *verf_str;
897 int *verf_len;
898 NFSKERBKEY_T key; /* return session key */
899{
900 int error = 0;
901
700 if (error == EINTR || error == ERESTART) {
701 free((caddr_t)nd, M_NFSRVDESC);
702 nfsrv_slpderef(slp);
703 s = splnet();
704 goto done;
705 }
706 break;
707 case RC_DROPIT:

--- 189 unchanged lines hidden (view full) ---

897 char **auth_str;
898 int *auth_len;
899 char *verf_str;
900 int *verf_len;
901 NFSKERBKEY_T key; /* return session key */
902{
903 int error = 0;
904
902 while ((nmp->nm_flag & NFSMNT_WAITAUTH) == 0) {
903 nmp->nm_flag |= NFSMNT_WANTAUTH;
905 while ((nmp->nm_state & NFSSTA_WAITAUTH) == 0) {
906 nmp->nm_state |= NFSSTA_WANTAUTH;
904 (void) tsleep((caddr_t)&nmp->nm_authtype, PSOCK,
905 "nfsauth1", 2 * hz);
906 error = nfs_sigintr(nmp, rep, rep->r_procp);
907 if (error) {
907 (void) tsleep((caddr_t)&nmp->nm_authtype, PSOCK,
908 "nfsauth1", 2 * hz);
909 error = nfs_sigintr(nmp, rep, rep->r_procp);
910 if (error) {
908 nmp->nm_flag &= ~NFSMNT_WANTAUTH;
911 nmp->nm_state &= ~NFSSTA_WANTAUTH;
909 return (error);
910 }
911 }
912 return (error);
913 }
914 }
912 nmp->nm_flag &= ~(NFSMNT_WAITAUTH | NFSMNT_WANTAUTH);
915 nmp->nm_state &= ~(NFSSTA_WAITAUTH | NFSSTA_WANTAUTH);
913 nmp->nm_authstr = *auth_str = (char *)malloc(RPCAUTH_MAXSIZ, M_TEMP, M_WAITOK);
914 nmp->nm_authlen = RPCAUTH_MAXSIZ;
915 nmp->nm_verfstr = verf_str;
916 nmp->nm_verflen = *verf_len;
917 nmp->nm_authuid = cred->cr_uid;
918 wakeup((caddr_t)&nmp->nm_authstr);
919
920 /*
921 * And wait for mount_nfs to do its stuff.
922 */
916 nmp->nm_authstr = *auth_str = (char *)malloc(RPCAUTH_MAXSIZ, M_TEMP, M_WAITOK);
917 nmp->nm_authlen = RPCAUTH_MAXSIZ;
918 nmp->nm_verfstr = verf_str;
919 nmp->nm_verflen = *verf_len;
920 nmp->nm_authuid = cred->cr_uid;
921 wakeup((caddr_t)&nmp->nm_authstr);
922
923 /*
924 * And wait for mount_nfs to do its stuff.
925 */
923 while ((nmp->nm_flag & NFSMNT_HASAUTH) == 0 && error == 0) {
926 while ((nmp->nm_state & NFSSTA_HASAUTH) == 0 && error == 0) {
924 (void) tsleep((caddr_t)&nmp->nm_authlen, PSOCK,
925 "nfsauth2", 2 * hz);
926 error = nfs_sigintr(nmp, rep, rep->r_procp);
927 }
927 (void) tsleep((caddr_t)&nmp->nm_authlen, PSOCK,
928 "nfsauth2", 2 * hz);
929 error = nfs_sigintr(nmp, rep, rep->r_procp);
930 }
928 if (nmp->nm_flag & NFSMNT_AUTHERR) {
929 nmp->nm_flag &= ~NFSMNT_AUTHERR;
931 if (nmp->nm_state & NFSSTA_AUTHERR) {
932 nmp->nm_state &= ~NFSSTA_AUTHERR;
930 error = EAUTH;
931 }
932 if (error)
933 free((caddr_t)*auth_str, M_TEMP);
934 else {
935 *auth_len = nmp->nm_authlen;
936 *verf_len = nmp->nm_verflen;
937 bcopy((caddr_t)nmp->nm_key, (caddr_t)key, sizeof (key));
938 }
933 error = EAUTH;
934 }
935 if (error)
936 free((caddr_t)*auth_str, M_TEMP);
937 else {
938 *auth_len = nmp->nm_authlen;
939 *verf_len = nmp->nm_verflen;
940 bcopy((caddr_t)nmp->nm_key, (caddr_t)key, sizeof (key));
941 }
939 nmp->nm_flag &= ~NFSMNT_HASAUTH;
940 nmp->nm_flag |= NFSMNT_WAITAUTH;
941 if (nmp->nm_flag & NFSMNT_WANTAUTH) {
942 nmp->nm_flag &= ~NFSMNT_WANTAUTH;
942 nmp->nm_state &= ~NFSSTA_HASAUTH;
943 nmp->nm_state |= NFSSTA_WAITAUTH;
944 if (nmp->nm_state & NFSSTA_WANTAUTH) {
945 nmp->nm_state &= ~NFSSTA_WANTAUTH;
943 wakeup((caddr_t)&nmp->nm_authtype);
944 }
945 return (error);
946}
947
948/*
949 * Get a nickname authenticator and verifier.
950 */

--- 239 unchanged lines hidden ---
946 wakeup((caddr_t)&nmp->nm_authtype);
947 }
948 return (error);
949}
950
951/*
952 * Get a nickname authenticator and verifier.
953 */

--- 239 unchanged lines hidden ---