Lines Matching refs:nd

115 static void nfsrvd_symlinksub(struct nfsrv_descript *nd, struct nameidata *ndp,
121 static void nfsrvd_mkdirsub(struct nfsrv_descript *nd, struct nameidata *ndp,
131 nfsrvd_access(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_access() argument
141 if (nd->nd_repstat) { in nfsrvd_access()
142 nfsrv_postopattr(nd, 1, &nva); in nfsrvd_access()
147 if ((nd->nd_flag & ND_NFSV4) && in nfsrvd_access()
152 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_access()
158 if (nfsvno_accchk(vp, VREAD, nd->nd_cred, exp, p, in nfsrvd_access()
164 if (nfsvno_accchk(vp, VWRITE, nd->nd_cred, exp, p, in nfsrvd_access()
170 if (nfsvno_accchk(vp, VWRITE | VAPPEND, nd->nd_cred, exp, p, in nfsrvd_access()
176 if (nfsvno_accchk(vp, VREAD, nd->nd_cred, exp, p, in nfsrvd_access()
182 if (nfsvno_accchk(vp, VWRITE, nd->nd_cred, exp, p, in nfsrvd_access()
188 if (nfsvno_accchk(vp, VREAD, nd->nd_cred, exp, p, in nfsrvd_access()
198 if (nfsvno_accchk(vp, deletebit, nd->nd_cred, exp, p, in nfsrvd_access()
208 if (nfsvno_accchk(vp, VEXEC, nd->nd_cred, exp, p, in nfsrvd_access()
213 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_access()
214 getret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); in nfsrvd_access()
215 nfsrv_postopattr(nd, getret, &nva); in nfsrvd_access()
218 if (nd->nd_flag & ND_NFSV4) { in nfsrvd_access()
226 NFSEXITCODE2(0, nd); in nfsrvd_access()
230 NFSEXITCODE2(error, nd); in nfsrvd_access()
238 nfsrvd_getattr(struct nfsrv_descript *nd, int isdgram, in nfsrvd_getattr() argument
253 if (nd->nd_repstat) in nfsrvd_getattr()
255 if (nd->nd_flag & ND_NFSV4) { in nfsrvd_getattr()
256 error = nfsrv_getattrbits(nd, &attrbits, NULL, NULL); in nfsrvd_getattr()
267 (void) nfsrv_putreferralattr(nd, &attrbits, refp, 1, in nfsrvd_getattr()
268 &nd->nd_repstat); in nfsrvd_getattr()
272 if (nd->nd_repstat == 0) { in nfsrvd_getattr()
293 nd->nd_repstat = nfsvno_accchk(vp, accmode, in nfsrvd_getattr()
294 nd->nd_cred, exp, p, NFSACCCHK_NOOVERRIDE, in nfsrvd_getattr()
298 if (!nd->nd_repstat) in nfsrvd_getattr()
299 nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, &attrbits); in nfsrvd_getattr()
300 if (!nd->nd_repstat) { in nfsrvd_getattr()
301 if (nd->nd_flag & ND_NFSV4) { in nfsrvd_getattr()
303 nd->nd_repstat = nfsvno_getfh(vp, &fh, p); in nfsrvd_getattr()
304 if (!nd->nd_repstat) in nfsrvd_getattr()
305 nd->nd_repstat = nfsrv_checkgetattr(nd, vp, in nfsrvd_getattr()
307 if (nd->nd_repstat == 0) { in nfsrvd_getattr()
322 if ((nd->nd_repstat = in nfsrvd_getattr()
324 nd->nd_repstat = VOP_GETATTR( in nfsrvd_getattr()
325 tvp, &va, nd->nd_cred); in nfsrvd_getattr()
329 if (nd->nd_repstat == 0) in nfsrvd_getattr()
335 if (nd->nd_repstat == 0) in nfsrvd_getattr()
336 nd->nd_repstat = vfs_busy(mp, 0); in nfsrvd_getattr()
338 if (nd->nd_repstat == 0) { in nfsrvd_getattr()
339 (void)nfsvno_fillattr(nd, mp, vp, &nva, in nfsrvd_getattr()
340 &fh, 0, &attrbits, nd->nd_cred, p, in nfsrvd_getattr()
349 nfsrv_fillattr(nd, &nva); in nfsrvd_getattr()
357 NFSEXITCODE2(error, nd); in nfsrvd_getattr()
365 nfsrvd_setattr(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_setattr() argument
379 if (nd->nd_repstat) { in nfsrvd_setattr()
380 nfsrv_wcc(nd, preat_ret, &nva2, postat_ret, &nva); in nfsrvd_setattr()
389 if (nd->nd_flag & ND_NFSV4) { in nfsrvd_setattr()
401 error = nfsrv_sattr(nd, vp, &nva, &attrbits, aclp, p); in nfsrvd_setattr()
407 preat_ret = nfsvno_getattr(vp, &nva2, nd, p, 1, &retbits); in nfsrvd_setattr()
408 if (!nd->nd_repstat) in nfsrvd_setattr()
409 nd->nd_repstat = preat_ret; in nfsrvd_setattr()
412 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_setattr()
419 if (!nd->nd_repstat && gcheck && in nfsrvd_setattr()
422 nd->nd_repstat = NFSERR_NOT_SYNC; in nfsrvd_setattr()
423 if (nd->nd_repstat) { in nfsrvd_setattr()
428 nfsrv_wcc(nd, preat_ret, &nva2, postat_ret, &nva); in nfsrvd_setattr()
431 } else if (!nd->nd_repstat && (nd->nd_flag & ND_NFSV4)) in nfsrvd_setattr()
432 nd->nd_repstat = nfsrv_checkuidgid(nd, &nva); in nfsrvd_setattr()
439 if (!nd->nd_repstat) { in nfsrvd_setattr()
443 nd->nd_repstat = EROFS; in nfsrvd_setattr()
446 nd->nd_repstat = EINVAL; in nfsrvd_setattr()
447 else if (nva2.na_uid != nd->nd_cred->cr_uid || in nfsrvd_setattr()
449 nd->nd_repstat = nfsvno_accchk(vp, in nfsrvd_setattr()
450 VWRITE, nd->nd_cred, exp, p, in nfsrvd_setattr()
459 if (nd->nd_repstat == 0 && (nd->nd_flag & ND_NFSV4) != 0 && in nfsrvd_setattr()
461 nd->nd_repstat = nfsrv_checksetattr(vp, nd, &stateid, in nfsrvd_setattr()
464 if (!nd->nd_repstat && (nd->nd_flag & ND_NFSV4)) { in nfsrvd_setattr()
474 nd->nd_repstat = nfsvno_setattr(vp, &nva2, nd->nd_cred, p, in nfsrvd_setattr()
476 if (!nd->nd_repstat) { in nfsrvd_setattr()
483 if (!nd->nd_repstat && in nfsrvd_setattr()
487 nd->nd_repstat = nfsvno_setattr(vp, &nva2, nd->nd_cred, p, in nfsrvd_setattr()
489 if (!nd->nd_repstat) in nfsrvd_setattr()
492 if (!nd->nd_repstat && in nfsrvd_setattr()
502 nd->nd_repstat = nfsvno_setattr(vp, &nva2, nd->nd_cred, p, in nfsrvd_setattr()
504 if (!nd->nd_repstat) { in nfsrvd_setattr()
511 if (!nd->nd_repstat && in nfsrvd_setattr()
515 nd->nd_repstat = nfsvno_setattr(vp, &nva2, nd->nd_cred, p, in nfsrvd_setattr()
517 if (!nd->nd_repstat) in nfsrvd_setattr()
520 if (!nd->nd_repstat && in nfsrvd_setattr()
525 nd->nd_repstat = nfsvno_setattr(vp, &nva2, nd->nd_cred, p, in nfsrvd_setattr()
527 if (!nd->nd_repstat) { in nfsrvd_setattr()
536 if (!nd->nd_repstat && aclp->acl_cnt > 0 && in nfsrvd_setattr()
538 nd->nd_repstat = nfsrv_setacl(vp, aclp, nd->nd_cred, p); in nfsrvd_setattr()
539 if (!nd->nd_repstat) in nfsrvd_setattr()
543 } else if (!nd->nd_repstat) { in nfsrvd_setattr()
544 nd->nd_repstat = nfsvno_setattr(vp, &nva, nd->nd_cred, p, in nfsrvd_setattr()
547 if (nd->nd_flag & (ND_NFSV2 | ND_NFSV3)) { in nfsrvd_setattr()
548 postat_ret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); in nfsrvd_setattr()
549 if (!nd->nd_repstat) in nfsrvd_setattr()
550 nd->nd_repstat = postat_ret; in nfsrvd_setattr()
556 if (nd->nd_flag & ND_NFSV3) in nfsrvd_setattr()
557 nfsrv_wcc(nd, preat_ret, &nva2, postat_ret, &nva); in nfsrvd_setattr()
558 else if (nd->nd_flag & ND_NFSV4) in nfsrvd_setattr()
559 (void) nfsrv_putattrbit(nd, &retbits); in nfsrvd_setattr()
560 else if (!nd->nd_repstat) in nfsrvd_setattr()
561 nfsrv_fillattr(nd, &nva); in nfsrvd_setattr()
564 NFSEXITCODE2(0, nd); in nfsrvd_setattr()
571 if (nd->nd_flag & ND_NFSV4) { in nfsrvd_setattr()
577 (void) nfsrv_putattrbit(nd, &retbits); in nfsrvd_setattr()
579 NFSEXITCODE2(error, nd); in nfsrvd_setattr()
588 nfsrvd_lookup(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_lookup() argument
599 if (nd->nd_repstat) { in nfsrvd_lookup()
600 nfsrv_postopattr(nd, dattr_ret, &dattr); in nfsrvd_lookup()
608 if (dp->v_type == VLNK && (nd->nd_flag & ND_NFSV4)) { in nfsrvd_lookup()
609 nd->nd_repstat = NFSERR_SYMLINK; in nfsrvd_lookup()
614 NFSNAMEICNDSET(&named.ni_cnd, nd->nd_cred, LOOKUP, in nfsrvd_lookup()
617 error = nfsrv_parsename(nd, bufp, hashp, &named.ni_pathlen); in nfsrvd_lookup()
623 if (!nd->nd_repstat) { in nfsrvd_lookup()
624 nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, &dirp); in nfsrvd_lookup()
629 if (nd->nd_repstat) { in nfsrvd_lookup()
631 if (nd->nd_flag & ND_NFSV3) in nfsrvd_lookup()
632 dattr_ret = nfsvno_getattr(dirp, &dattr, nd, p, in nfsrvd_lookup()
636 if (nd->nd_flag & ND_NFSV3) in nfsrvd_lookup()
637 nfsrv_postopattr(nd, dattr_ret, &dattr); in nfsrvd_lookup()
642 if ((nd->nd_flag & ND_NFSV4) != 0 && !NFSVNO_EXPORTED(exp) && in nfsrvd_lookup()
648 nd->nd_repstat = ENOENT; in nfsrvd_lookup()
649 if (nd->nd_repstat == 0) { in nfsrvd_lookup()
650 nd->nd_repstat = nfsvno_getfh(vp, fhp, p); in nfsrvd_lookup()
655 if (nd->nd_repstat == EOPNOTSUPP) in nfsrvd_lookup()
656 nd->nd_repstat = ENOENT; in nfsrvd_lookup()
658 if (!(nd->nd_flag & ND_NFSV4) && !nd->nd_repstat) in nfsrvd_lookup()
659 nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); in nfsrvd_lookup()
660 if (vpp != NULL && nd->nd_repstat == 0) in nfsrvd_lookup()
665 if (nd->nd_flag & ND_NFSV3) in nfsrvd_lookup()
666 dattr_ret = nfsvno_getattr(dirp, &dattr, nd, p, 0, in nfsrvd_lookup()
670 if (nd->nd_repstat) { in nfsrvd_lookup()
671 if (nd->nd_flag & ND_NFSV3) in nfsrvd_lookup()
672 nfsrv_postopattr(nd, dattr_ret, &dattr); in nfsrvd_lookup()
675 if (nd->nd_flag & ND_NFSV2) { in nfsrvd_lookup()
676 (void)nfsm_fhtom(NULL, nd, (u_int8_t *)fhp, 0, 0); in nfsrvd_lookup()
677 nfsrv_fillattr(nd, &nva); in nfsrvd_lookup()
678 } else if (nd->nd_flag & ND_NFSV3) { in nfsrvd_lookup()
679 (void)nfsm_fhtom(NULL, nd, (u_int8_t *)fhp, 0, 0); in nfsrvd_lookup()
680 nfsrv_postopattr(nd, 0, &nva); in nfsrvd_lookup()
681 nfsrv_postopattr(nd, dattr_ret, &dattr); in nfsrvd_lookup()
685 NFSEXITCODE2(error, nd); in nfsrvd_lookup()
693 nfsrvd_readlink(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_readlink() argument
703 if (nd->nd_repstat) { in nfsrvd_readlink()
704 nfsrv_postopattr(nd, getret, &nva); in nfsrvd_readlink()
708 if (nd->nd_flag & ND_NFSV2) in nfsrvd_readlink()
709 nd->nd_repstat = ENXIO; in nfsrvd_readlink()
711 nd->nd_repstat = EINVAL; in nfsrvd_readlink()
713 if (nd->nd_repstat == 0) { in nfsrvd_readlink()
714 if ((nd->nd_flag & ND_EXTPG) != 0) in nfsrvd_readlink()
715 nd->nd_repstat = nfsvno_readlink(vp, nd->nd_cred, in nfsrvd_readlink()
716 nd->nd_maxextsiz, p, &mp, &mpend, &len); in nfsrvd_readlink()
718 nd->nd_repstat = nfsvno_readlink(vp, nd->nd_cred, in nfsrvd_readlink()
721 if (nd->nd_flag & ND_NFSV3) in nfsrvd_readlink()
722 getret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); in nfsrvd_readlink()
724 if (nd->nd_flag & ND_NFSV3) in nfsrvd_readlink()
725 nfsrv_postopattr(nd, getret, &nva); in nfsrvd_readlink()
726 if (nd->nd_repstat) in nfsrvd_readlink()
731 nd->nd_mb->m_next = mp; in nfsrvd_readlink()
732 nd->nd_mb = mpend; in nfsrvd_readlink()
734 nd->nd_bextpg = mpend->m_epg_npgs - 1; in nfsrvd_readlink()
735 nd->nd_bpos = (char *)(void *) in nfsrvd_readlink()
736 PHYS_TO_DMAP(mpend->m_epg_pa[nd->nd_bextpg]); in nfsrvd_readlink()
737 off = (nd->nd_bextpg == 0) ? mpend->m_epg_1st_off : 0; in nfsrvd_readlink()
738 nd->nd_bpos += off + mpend->m_epg_last_len; in nfsrvd_readlink()
739 nd->nd_bextpgsiz = PAGE_SIZE - mpend->m_epg_last_len - in nfsrvd_readlink()
742 nd->nd_bpos = mtod(mpend, char *) + mpend->m_len; in nfsrvd_readlink()
746 NFSEXITCODE2(0, nd); in nfsrvd_readlink()
754 nfsrvd_read(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_read() argument
769 if (nd->nd_repstat) { in nfsrvd_read()
770 nfsrv_postopattr(nd, getret, &nva); in nfsrvd_read()
773 if (nd->nd_flag & ND_NFSV2) { in nfsrvd_read()
777 } else if (nd->nd_flag & ND_NFSV3) { in nfsrvd_read()
786 if (reqlen > NFS_SRVMAXDATA(nd)) { in nfsrvd_read()
787 reqlen = NFS_SRVMAXDATA(nd); in nfsrvd_read()
793 if (nd->nd_flag & ND_NFSV4) { in nfsrvd_read()
798 stp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_read()
802 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_read()
803 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_read()
804 clientid.qval = nd->nd_clientid.qval; in nfsrvd_read()
805 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_read()
808 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_read()
810 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_read()
811 nd->nd_clientid.qval = clientid.qval; in nfsrvd_read()
817 if ((nd->nd_flag & ND_DSSERVER) != 0 && in nfsrvd_read()
825 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_read()
843 if (nd->nd_flag & ND_NFSV3) in nfsrvd_read()
844 nd->nd_repstat = EINVAL; in nfsrvd_read()
846 nd->nd_repstat = (vp->v_type == VDIR) ? EISDIR : in nfsrvd_read()
849 getret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); in nfsrvd_read()
850 if (!nd->nd_repstat) in nfsrvd_read()
851 nd->nd_repstat = getret; in nfsrvd_read()
852 if (!nd->nd_repstat && in nfsrvd_read()
853 (nva.na_uid != nd->nd_cred->cr_uid || in nfsrvd_read()
855 nd->nd_repstat = nfsvno_accchk(vp, VREAD, in nfsrvd_read()
856 nd->nd_cred, exp, p, in nfsrvd_read()
858 if (nd->nd_repstat) in nfsrvd_read()
859 nd->nd_repstat = nfsvno_accchk(vp, VEXEC, in nfsrvd_read()
860 nd->nd_cred, exp, p, NFSACCCHK_ALLOWOWNER, in nfsrvd_read()
867 if (nd->nd_repstat == 0 && (nd->nd_flag & (ND_NFSV4 | ND_DSSERVER)) == in nfsrvd_read()
869 nd->nd_repstat = nfsrv_lockctrl(vp, &stp, &lop, NULL, clientid, in nfsrvd_read()
870 &stateid, exp, nd, p); in nfsrvd_read()
871 if (nd->nd_repstat) { in nfsrvd_read()
873 if (nd->nd_flag & ND_NFSV3) in nfsrvd_read()
874 nfsrv_postopattr(nd, getret, &nva); in nfsrvd_read()
896 if ((nd->nd_flag & ND_EXTPG) != 0 || (cnt > MCLBYTES && in nfsrvd_read()
897 (nd->nd_flag & (ND_TLS | ND_SAVEREPLY)) == ND_TLS && in nfsrvd_read()
898 (nd->nd_flag & (ND_NFSV4 | ND_NFSV41)) != ND_NFSV4)) in nfsrvd_read()
899 nd->nd_repstat = nfsvno_read(vp, off, cnt, nd->nd_cred, in nfsrvd_read()
900 nd->nd_maxextsiz, p, &m3, &m2); in nfsrvd_read()
902 nd->nd_repstat = nfsvno_read(vp, off, cnt, nd->nd_cred, in nfsrvd_read()
904 if (!(nd->nd_flag & ND_NFSV4)) { in nfsrvd_read()
905 getret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); in nfsrvd_read()
906 if (!nd->nd_repstat) in nfsrvd_read()
907 nd->nd_repstat = getret; in nfsrvd_read()
909 if (nd->nd_repstat) { in nfsrvd_read()
913 if (nd->nd_flag & ND_NFSV3) in nfsrvd_read()
914 nfsrv_postopattr(nd, getret, &nva); in nfsrvd_read()
919 if (nd->nd_flag & ND_NFSV2) { in nfsrvd_read()
920 nfsrv_fillattr(nd, &nva); in nfsrvd_read()
923 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_read()
924 nfsrv_postopattr(nd, getret, &nva); in nfsrvd_read()
936 nd->nd_mb->m_next = m3; in nfsrvd_read()
937 nd->nd_mb = m2; in nfsrvd_read()
939 nd->nd_flag |= ND_EXTPG; in nfsrvd_read()
940 nd->nd_bextpg = m2->m_epg_npgs - 1; in nfsrvd_read()
941 nd->nd_bpos = (char *)(void *) in nfsrvd_read()
942 PHYS_TO_DMAP(m2->m_epg_pa[nd->nd_bextpg]); in nfsrvd_read()
943 poff = (nd->nd_bextpg == 0) ? m2->m_epg_1st_off : 0; in nfsrvd_read()
944 nd->nd_bpos += poff + m2->m_epg_last_len; in nfsrvd_read()
945 nd->nd_bextpgsiz = PAGE_SIZE - m2->m_epg_last_len - in nfsrvd_read()
948 nd->nd_bpos = mtod(m2, char *) + m2->m_len; in nfsrvd_read()
952 NFSEXITCODE2(0, nd); in nfsrvd_read()
956 NFSEXITCODE2(error, nd); in nfsrvd_read()
964 nfsrvd_write(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_write() argument
979 if (nd->nd_repstat) { in nfsrvd_write()
980 nfsrv_wcc(nd, forat_ret, &forat, aftat_ret, &nva); in nfsrvd_write()
984 if (nd->nd_flag & ND_NFSV2) { in nfsrvd_write()
989 } else if (nd->nd_flag & ND_NFSV3) { in nfsrvd_write()
1001 stp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_write()
1005 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_write()
1006 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_write()
1007 clientid.qval = nd->nd_clientid.qval; in nfsrvd_write()
1008 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_write()
1011 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_write()
1013 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_write()
1014 nd->nd_clientid.qval = clientid.qval; in nfsrvd_write()
1020 if ((nd->nd_flag & ND_DSSERVER) != 0 && in nfsrvd_write()
1028 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_write()
1050 nd->nd_repstat = EIO; in nfsrvd_write()
1051 if (vp->v_type != VREG && !nd->nd_repstat) { in nfsrvd_write()
1052 if (nd->nd_flag & ND_NFSV3) in nfsrvd_write()
1053 nd->nd_repstat = EINVAL; in nfsrvd_write()
1055 nd->nd_repstat = (vp->v_type == VDIR) ? EISDIR : in nfsrvd_write()
1060 forat_ret = nfsvno_getattr(vp, &forat, nd, p, 1, &attrbits); in nfsrvd_write()
1061 if (!nd->nd_repstat) in nfsrvd_write()
1062 nd->nd_repstat = forat_ret; in nfsrvd_write()
1063 if (!nd->nd_repstat && in nfsrvd_write()
1064 (forat.na_uid != nd->nd_cred->cr_uid || in nfsrvd_write()
1066 nd->nd_repstat = nfsvno_accchk(vp, VWRITE, in nfsrvd_write()
1067 nd->nd_cred, exp, p, in nfsrvd_write()
1073 if (nd->nd_repstat == 0 && (nd->nd_flag & (ND_NFSV4 | ND_DSSERVER)) == in nfsrvd_write()
1075 nd->nd_repstat = nfsrv_lockctrl(vp, &stp, &lop, NULL, clientid, in nfsrvd_write()
1076 &stateid, exp, nd, p); in nfsrvd_write()
1077 if (nd->nd_repstat) { in nfsrvd_write()
1079 if (nd->nd_flag & ND_NFSV3) in nfsrvd_write()
1080 nfsrv_wcc(nd, forat_ret, &forat, aftat_ret, &nva); in nfsrvd_write()
1090 nd->nd_repstat = nfsvno_write(vp, off, retlen, &stable, in nfsrvd_write()
1091 nd->nd_md, nd->nd_dpos, nd->nd_cred, p); in nfsrvd_write()
1092 error = nfsm_advance(nd, NFSM_RNDUP(retlen), -1); in nfsrvd_write()
1096 if (nd->nd_flag & ND_NFSV4) in nfsrvd_write()
1099 aftat_ret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); in nfsrvd_write()
1101 if (!nd->nd_repstat) in nfsrvd_write()
1102 nd->nd_repstat = aftat_ret; in nfsrvd_write()
1103 if (nd->nd_flag & (ND_NFSV3 | ND_NFSV4)) { in nfsrvd_write()
1104 if (nd->nd_flag & ND_NFSV3) in nfsrvd_write()
1105 nfsrv_wcc(nd, forat_ret, &forat, aftat_ret, &nva); in nfsrvd_write()
1106 if (nd->nd_repstat) in nfsrvd_write()
1127 } else if (!nd->nd_repstat) in nfsrvd_write()
1128 nfsrv_fillattr(nd, &nva); in nfsrvd_write()
1131 NFSEXITCODE2(0, nd); in nfsrvd_write()
1135 NFSEXITCODE2(error, nd); in nfsrvd_write()
1146 nfsrvd_create(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_create() argument
1164 if (nd->nd_repstat) { in nfsrvd_create()
1165 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, &diraft); in nfsrvd_create()
1168 NFSNAMEICNDSET(&named.ni_cnd, nd->nd_cred, CREATE, in nfsrvd_create()
1171 error = nfsrv_parsename(nd, bufp, hashp, &named.ni_pathlen); in nfsrvd_create()
1174 if (!nd->nd_repstat) { in nfsrvd_create()
1176 if (nd->nd_flag & ND_NFSV2) { in nfsrvd_create()
1205 error = nfsrv_sattr(nd, NULL, &nva, NULL, NULL, p); in nfsrvd_create()
1219 if (nd->nd_repstat) { in nfsrvd_create()
1221 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_create()
1222 dirfor_ret = nfsvno_getattr(dp, &dirfor, nd, p, 1, in nfsrvd_create()
1224 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, in nfsrvd_create()
1231 nd->nd_repstat = nfsvno_namei(nd, &named, dp, 1, exp, &dirp); in nfsrvd_create()
1233 if (nd->nd_flag & ND_NFSV2) { in nfsrvd_create()
1237 dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, in nfsrvd_create()
1241 if (nd->nd_repstat) { in nfsrvd_create()
1242 if (nd->nd_flag & ND_NFSV3) in nfsrvd_create()
1243 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, in nfsrvd_create()
1250 if (!(nd->nd_flag & ND_NFSV2)) { in nfsrvd_create()
1254 nd->nd_repstat = EEXIST; in nfsrvd_create()
1270 nd->nd_repstat = nfsvno_createsub(nd, &named, &vp, &nva, in nfsrvd_create()
1273 if (!nd->nd_repstat) { in nfsrvd_create()
1274 nd->nd_repstat = nfsvno_getfh(vp, &fh, p); in nfsrvd_create()
1275 if (!nd->nd_repstat) in nfsrvd_create()
1276 nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, in nfsrvd_create()
1279 if (!nd->nd_repstat) { in nfsrvd_create()
1284 if (nd->nd_flag & ND_NFSV2) { in nfsrvd_create()
1285 if (!nd->nd_repstat) { in nfsrvd_create()
1286 (void)nfsm_fhtom(NULL, nd, (u_int8_t *)&fh, 0, 0); in nfsrvd_create()
1287 nfsrv_fillattr(nd, &nva); in nfsrvd_create()
1290 if (exclusive_flag && !nd->nd_repstat && (cverf[0] != tverf[0] in nfsrvd_create()
1292 nd->nd_repstat = EEXIST; in nfsrvd_create()
1293 diraft_ret = nfsvno_getattr(dirp, &diraft, nd, p, 0, NULL); in nfsrvd_create()
1295 if (!nd->nd_repstat) { in nfsrvd_create()
1296 (void)nfsm_fhtom(NULL, nd, (u_int8_t *)&fh, 0, 1); in nfsrvd_create()
1297 nfsrv_postopattr(nd, 0, &nva); in nfsrvd_create()
1299 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, &diraft); in nfsrvd_create()
1303 NFSEXITCODE2(0, nd); in nfsrvd_create()
1308 NFSEXITCODE2(error, nd); in nfsrvd_create()
1316 nfsrvd_mknod(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_mknod() argument
1335 if (nd->nd_repstat) { in nfsrvd_mknod()
1336 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, &diraft); in nfsrvd_mknod()
1347 if (nd->nd_flag & ND_NFSV4) { in nfsrvd_mknod()
1353 error = nfsvno_getsymlink(nd, &nva, p, &pathcp, in nfsrvd_mknod()
1372 nd->nd_repstat = NFSERR_BADTYPE; in nfsrvd_mknod()
1380 NFSNAMEICNDSET(&named.ni_cnd, nd->nd_cred, CREATE, cnflags | NOCACHE); in nfsrvd_mknod()
1382 error = nfsrv_parsename(nd, bufp, hashp, &named.ni_pathlen); in nfsrvd_mknod()
1385 if (!nd->nd_repstat) { in nfsrvd_mknod()
1386 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_mknod()
1390 error = nfsrv_sattr(nd, NULL, &nva, &attrbits, aclp, p); in nfsrvd_mknod()
1394 if (!nd->nd_repstat && (nd->nd_flag & ND_NFSV3) && in nfsrvd_mknod()
1403 dirfor_ret = nfsvno_getattr(dp, &dirfor, nd, p, 0, NULL); in nfsrvd_mknod()
1404 if (!nd->nd_repstat && (nd->nd_flag & ND_NFSV4)) { in nfsrvd_mknod()
1408 nd->nd_repstat = nfsrv_checkuidgid(nd, &nva); in nfsrvd_mknod()
1410 if (nd->nd_repstat) { in nfsrvd_mknod()
1418 if (nd->nd_flag & ND_NFSV3) in nfsrvd_mknod()
1419 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, in nfsrvd_mknod()
1437 nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, &dirp); in nfsrvd_mknod()
1438 if (nd->nd_repstat) { in nfsrvd_mknod()
1440 if (nd->nd_flag & ND_NFSV3) in nfsrvd_mknod()
1441 dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, in nfsrvd_mknod()
1448 if (nd->nd_flag & ND_NFSV3) in nfsrvd_mknod()
1449 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, in nfsrvd_mknod()
1454 dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, NULL); in nfsrvd_mknod()
1456 if ((nd->nd_flag & ND_NFSV4) && (vtyp == VDIR || vtyp == VLNK)) { in nfsrvd_mknod()
1458 nfsrvd_mkdirsub(nd, &named, &nva, fhp, vpp, dirp, in nfsrvd_mknod()
1466 nfsrvd_symlinksub(nd, &named, &nva, fhp, vpp, dirp, in nfsrvd_mknod()
1477 nd->nd_repstat = nfsvno_mknod(&named, &nva, nd->nd_cred, p); in nfsrvd_mknod()
1478 if (!nd->nd_repstat) { in nfsrvd_mknod()
1480 nfsrv_fixattr(nd, vp, &nva, aclp, p, &attrbits, exp); in nfsrvd_mknod()
1481 nd->nd_repstat = nfsvno_getfh(vp, fhp, p); in nfsrvd_mknod()
1482 if ((nd->nd_flag & ND_NFSV3) && !nd->nd_repstat) in nfsrvd_mknod()
1483 nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, in nfsrvd_mknod()
1485 if (vpp != NULL && nd->nd_repstat == 0) { in nfsrvd_mknod()
1492 diraft_ret = nfsvno_getattr(dirp, &diraft, nd, p, 0, NULL); in nfsrvd_mknod()
1494 if (!nd->nd_repstat) { in nfsrvd_mknod()
1495 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_mknod()
1496 (void)nfsm_fhtom(NULL, nd, (u_int8_t *)fhp, 0, 1); in nfsrvd_mknod()
1497 nfsrv_postopattr(nd, 0, &nva); in nfsrvd_mknod()
1504 (void) nfsrv_putattrbit(nd, &attrbits); in nfsrvd_mknod()
1507 if (nd->nd_flag & ND_NFSV3) in nfsrvd_mknod()
1508 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, &diraft); in nfsrvd_mknod()
1514 NFSEXITCODE2(0, nd); in nfsrvd_mknod()
1526 NFSEXITCODE2(error, nd); in nfsrvd_mknod()
1534 nfsrvd_remove(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_remove() argument
1546 if (nd->nd_repstat) { in nfsrvd_remove()
1547 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, &diraft); in nfsrvd_remove()
1550 NFSNAMEICNDSET(&named.ni_cnd, nd->nd_cred, DELETE, in nfsrvd_remove()
1553 error = nfsrv_parsename(nd, bufp, hashp, &named.ni_pathlen); in nfsrvd_remove()
1559 if (!nd->nd_repstat) { in nfsrvd_remove()
1560 nd->nd_repstat = nfsvno_namei(nd, &named, dp, 1, exp, &dirp); in nfsrvd_remove()
1566 if (!(nd->nd_flag & ND_NFSV2)) { in nfsrvd_remove()
1567 dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, in nfsrvd_remove()
1574 if (!nd->nd_repstat) { in nfsrvd_remove()
1575 if (nd->nd_flag & ND_NFSV4) { in nfsrvd_remove()
1577 nd->nd_repstat = nfsvno_rmdirsub(&named, 1, in nfsrvd_remove()
1578 nd->nd_cred, p, exp); in nfsrvd_remove()
1580 nd->nd_repstat = nfsvno_removesub(&named, 1, in nfsrvd_remove()
1581 nd->nd_cred, p, exp); in nfsrvd_remove()
1582 } else if (nd->nd_procnum == NFSPROC_RMDIR) { in nfsrvd_remove()
1583 nd->nd_repstat = nfsvno_rmdirsub(&named, 0, in nfsrvd_remove()
1584 nd->nd_cred, p, exp); in nfsrvd_remove()
1586 nd->nd_repstat = nfsvno_removesub(&named, 0, in nfsrvd_remove()
1587 nd->nd_cred, p, exp); in nfsrvd_remove()
1590 if (!(nd->nd_flag & ND_NFSV2)) { in nfsrvd_remove()
1592 diraft_ret = nfsvno_getattr(dirp, &diraft, nd, p, 0, in nfsrvd_remove()
1596 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_remove()
1597 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, in nfsrvd_remove()
1599 } else if (!nd->nd_repstat) { in nfsrvd_remove()
1609 NFSEXITCODE2(error, nd); in nfsrvd_remove()
1617 nfsrvd_rename(struct nfsrv_descript *nd, int isdgram, in nfsrvd_rename() argument
1633 if (nd->nd_repstat) { in nfsrvd_rename()
1634 nfsrv_wcc(nd, fdirfor_ret, &fdirfor, fdiraft_ret, &fdiraft); in nfsrvd_rename()
1635 nfsrv_wcc(nd, tdirfor_ret, &tdirfor, tdiraft_ret, &tdiraft); in nfsrvd_rename()
1638 if (!(nd->nd_flag & ND_NFSV2)) in nfsrvd_rename()
1639 fdirfor_ret = nfsvno_getattr(dp, &fdirfor, nd, p, 1, NULL); in nfsrvd_rename()
1642 NFSNAMEICNDSET(&fromnd.ni_cnd, nd->nd_cred, DELETE, WANTPARENT); in nfsrvd_rename()
1644 error = nfsrv_parsename(nd, bufp, hashp, &fromnd.ni_pathlen); in nfsrvd_rename()
1657 if (nd->nd_flag & ND_NFSV4) { in nfsrvd_rename()
1663 tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd, p, 0, in nfsrvd_rename()
1666 tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd, p, 1, in nfsrvd_rename()
1672 error = nfsrv_mtofh(nd, &tfh); in nfsrvd_rename()
1688 tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd, p, 1, in nfsrvd_rename()
1693 nd->nd_cred->cr_uid = nd->nd_saveduid; in nfsrvd_rename()
1694 nfsd_fhtovp(nd, &tfh, LK_EXCLUSIVE, &tdp, &tnes, NULL, in nfsrvd_rename()
1697 tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd, in nfsrvd_rename()
1703 NFSNAMEICNDSET(&tond.ni_cnd, nd->nd_cred, RENAME, LOCKPARENT | LOCKLEAF | NOCACHE); in nfsrvd_rename()
1705 if (!nd->nd_repstat) { in nfsrvd_rename()
1706 error = nfsrv_parsename(nd, tbufp, hashp, &tond.ni_pathlen); in nfsrvd_rename()
1716 if (nd->nd_repstat) { in nfsrvd_rename()
1717 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_rename()
1718 nfsrv_wcc(nd, fdirfor_ret, &fdirfor, fdiraft_ret, in nfsrvd_rename()
1720 nfsrv_wcc(nd, tdirfor_ret, &tdirfor, tdiraft_ret, in nfsrvd_rename()
1734 nd->nd_repstat = nfsvno_namei(nd, &fromnd, dp, 0, exp, &fdirp); in nfsrvd_rename()
1735 if (nd->nd_repstat) { in nfsrvd_rename()
1736 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_rename()
1737 nfsrv_wcc(nd, fdirfor_ret, &fdirfor, fdiraft_ret, in nfsrvd_rename()
1739 nfsrv_wcc(nd, tdirfor_ret, &tdirfor, tdiraft_ret, in nfsrvd_rename()
1751 nd->nd_repstat = nfsvno_namei(nd, &tond, tdp, 0, &tnes, &tdirp); in nfsrvd_rename()
1752 nd->nd_repstat = nfsvno_rename(&fromnd, &tond, nd->nd_repstat, in nfsrvd_rename()
1753 nd->nd_flag, nd->nd_cred, p); in nfsrvd_rename()
1755 fdiraft_ret = nfsvno_getattr(fdirp, &fdiraft, nd, p, 0, NULL); in nfsrvd_rename()
1757 tdiraft_ret = nfsvno_getattr(tdirp, &tdiraft, nd, p, 0, NULL); in nfsrvd_rename()
1762 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_rename()
1763 nfsrv_wcc(nd, fdirfor_ret, &fdirfor, fdiraft_ret, &fdiraft); in nfsrvd_rename()
1764 nfsrv_wcc(nd, tdirfor_ret, &tdirfor, tdiraft_ret, &tdiraft); in nfsrvd_rename()
1765 } else if ((nd->nd_flag & ND_NFSV4) && !nd->nd_repstat) { in nfsrvd_rename()
1779 NFSEXITCODE2(error, nd); in nfsrvd_rename()
1787 nfsrvd_link(struct nfsrv_descript *nd, int isdgram, in nfsrvd_link() argument
1802 if (nd->nd_repstat) { in nfsrvd_link()
1803 nfsrv_postopattr(nd, getret, &at); in nfsrvd_link()
1804 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, &diraft); in nfsrvd_link()
1809 if (nd->nd_flag & ND_NFSV4) in nfsrvd_link()
1810 nd->nd_repstat = NFSERR_ISDIR; in nfsrvd_link()
1812 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_link()
1816 if (!nd->nd_repstat) { in nfsrvd_link()
1817 if (nd->nd_flag & ND_NFSV4) { in nfsrvd_link()
1821 error = nfsrv_mtofh(nd, &dfh); in nfsrvd_link()
1827 nfsd_fhtovp(nd, &dfh, LK_EXCLUSIVE, &dp, &tnes, NULL, in nfsrvd_link()
1833 NFSNAMEICNDSET(&named.ni_cnd, nd->nd_cred, CREATE, LOCKPARENT | NOCACHE); in nfsrvd_link()
1834 if (!nd->nd_repstat) { in nfsrvd_link()
1836 error = nfsrv_parsename(nd, bufp, hashp, &named.ni_pathlen); in nfsrvd_link()
1844 if (!nd->nd_repstat) { in nfsrvd_link()
1845 nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, &tnes, in nfsrvd_link()
1854 if (nd->nd_flag & ND_NFSV2) { in nfsrvd_link()
1858 dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, in nfsrvd_link()
1862 if (!nd->nd_repstat) { in nfsrvd_link()
1864 if ((nd->nd_flag & (ND_IMPLIEDCLID | ND_NFSV41)) == in nfsrvd_link()
1866 clientid.qval = nd->nd_clientid.qval; in nfsrvd_link()
1867 nd->nd_repstat = nfsvno_link(&named, vp, clientid, nd->nd_cred, in nfsrvd_link()
1870 if (nd->nd_flag & ND_NFSV3) in nfsrvd_link()
1871 getret = nfsvno_getattr(vp, &at, nd, p, 0, NULL); in nfsrvd_link()
1873 diraft_ret = nfsvno_getattr(dirp, &diraft, nd, p, 0, NULL); in nfsrvd_link()
1877 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_link()
1878 nfsrv_postopattr(nd, getret, &at); in nfsrvd_link()
1879 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, &diraft); in nfsrvd_link()
1880 } else if ((nd->nd_flag & ND_NFSV4) && !nd->nd_repstat) { in nfsrvd_link()
1889 NFSEXITCODE2(error, nd); in nfsrvd_link()
1897 nfsrvd_symlink(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_symlink() argument
1908 if (nd->nd_repstat) { in nfsrvd_symlink()
1909 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, &diraft); in nfsrvd_symlink()
1915 NFSNAMEICNDSET(&named.ni_cnd, nd->nd_cred, CREATE, in nfsrvd_symlink()
1918 error = nfsrv_parsename(nd, bufp, hashp, &named.ni_pathlen); in nfsrvd_symlink()
1919 if (!error && !nd->nd_repstat) in nfsrvd_symlink()
1920 error = nfsvno_getsymlink(nd, &nva, p, &pathcp, &pathlen); in nfsrvd_symlink()
1926 if (!nd->nd_repstat) { in nfsrvd_symlink()
1927 nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, &dirp); in nfsrvd_symlink()
1932 if (dirp != NULL && !(nd->nd_flag & ND_NFSV3)) { in nfsrvd_symlink()
1941 if (!nd->nd_repstat) { in nfsrvd_symlink()
1943 dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, in nfsrvd_symlink()
1945 nfsrvd_symlinksub(nd, &named, &nva, fhp, vpp, dirp, in nfsrvd_symlink()
1949 dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, NULL); in nfsrvd_symlink()
1955 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_symlink()
1956 if (!nd->nd_repstat) { in nfsrvd_symlink()
1957 (void)nfsm_fhtom(NULL, nd, (u_int8_t *)fhp, 0, 1); in nfsrvd_symlink()
1958 nfsrv_postopattr(nd, 0, &nva); in nfsrvd_symlink()
1960 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, &diraft); in nfsrvd_symlink()
1964 NFSEXITCODE2(error, nd); in nfsrvd_symlink()
1972 nfsrvd_symlinksub(struct nfsrv_descript *nd, struct nameidata *ndp, in nfsrvd_symlinksub() argument
1981 nd->nd_repstat = nfsvno_symlink(ndp, nvap, pathcp, pathlen, in nfsrvd_symlinksub()
1982 !(nd->nd_flag & ND_NFSV2), nd->nd_saveduid, nd->nd_cred, p, exp); in nfsrvd_symlinksub()
1983 if (!nd->nd_repstat && !(nd->nd_flag & ND_NFSV2)) { in nfsrvd_symlinksub()
1984 nfsrv_fixattr(nd, ndp->ni_vp, nvap, aclp, p, attrbitp, exp); in nfsrvd_symlinksub()
1985 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_symlinksub()
1986 nd->nd_repstat = nfsvno_getfh(ndp->ni_vp, fhp, p); in nfsrvd_symlinksub()
1987 if (!nd->nd_repstat) in nfsrvd_symlinksub()
1988 nd->nd_repstat = nfsvno_getattr(ndp->ni_vp, in nfsrvd_symlinksub()
1989 nvap, nd, p, 1, NULL); in nfsrvd_symlinksub()
1991 if (vpp != NULL && nd->nd_repstat == 0) { in nfsrvd_symlinksub()
1998 *diraft_retp = nfsvno_getattr(dirp, diraftp, nd, p, 0, NULL); in nfsrvd_symlinksub()
2001 if ((nd->nd_flag & ND_NFSV4) && !nd->nd_repstat) { in nfsrvd_symlinksub()
2007 (void) nfsrv_putattrbit(nd, attrbitp); in nfsrvd_symlinksub()
2010 NFSEXITCODE2(0, nd); in nfsrvd_symlinksub()
2017 nfsrvd_mkdir(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_mkdir() argument
2029 if (nd->nd_repstat) { in nfsrvd_mkdir()
2030 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, &diraft); in nfsrvd_mkdir()
2033 NFSNAMEICNDSET(&named.ni_cnd, nd->nd_cred, CREATE, LOCKPARENT | NOCACHE); in nfsrvd_mkdir()
2035 error = nfsrv_parsename(nd, bufp, hashp, &named.ni_pathlen); in nfsrvd_mkdir()
2038 if (!nd->nd_repstat) { in nfsrvd_mkdir()
2040 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_mkdir()
2041 error = nfsrv_sattr(nd, NULL, &nva, NULL, NULL, p); in nfsrvd_mkdir()
2049 if (!nd->nd_repstat) { in nfsrvd_mkdir()
2050 nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, &dirp); in nfsrvd_mkdir()
2055 if (dirp != NULL && !(nd->nd_flag & ND_NFSV3)) { in nfsrvd_mkdir()
2059 if (nd->nd_repstat) { in nfsrvd_mkdir()
2061 dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, in nfsrvd_mkdir()
2065 if (nd->nd_flag & ND_NFSV3) in nfsrvd_mkdir()
2066 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, in nfsrvd_mkdir()
2071 dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, NULL); in nfsrvd_mkdir()
2076 nfsrvd_mkdirsub(nd, &named, &nva, fhp, vpp, dirp, &dirfor, &diraft, in nfsrvd_mkdir()
2079 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_mkdir()
2080 if (!nd->nd_repstat) { in nfsrvd_mkdir()
2081 (void)nfsm_fhtom(NULL, nd, (u_int8_t *)fhp, 0, 1); in nfsrvd_mkdir()
2082 nfsrv_postopattr(nd, 0, &nva); in nfsrvd_mkdir()
2084 nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, &diraft); in nfsrvd_mkdir()
2085 } else if (!nd->nd_repstat) { in nfsrvd_mkdir()
2086 (void)nfsm_fhtom(NULL, nd, (u_int8_t *)fhp, 0, 0); in nfsrvd_mkdir()
2087 nfsrv_fillattr(nd, &nva); in nfsrvd_mkdir()
2091 NFSEXITCODE2(0, nd); in nfsrvd_mkdir()
2096 NFSEXITCODE2(error, nd); in nfsrvd_mkdir()
2104 nfsrvd_mkdirsub(struct nfsrv_descript *nd, struct nameidata *ndp, in nfsrvd_mkdirsub() argument
2114 nd->nd_repstat = nfsvno_mkdir(ndp, nvap, nd->nd_saveduid, in nfsrvd_mkdirsub()
2115 nd->nd_cred, p, exp); in nfsrvd_mkdirsub()
2116 if (!nd->nd_repstat) { in nfsrvd_mkdirsub()
2118 nfsrv_fixattr(nd, vp, nvap, aclp, p, attrbitp, exp); in nfsrvd_mkdirsub()
2119 nd->nd_repstat = nfsvno_getfh(vp, fhp, p); in nfsrvd_mkdirsub()
2120 if (!(nd->nd_flag & ND_NFSV4) && !nd->nd_repstat) in nfsrvd_mkdirsub()
2121 nd->nd_repstat = nfsvno_getattr(vp, nvap, nd, p, 1, in nfsrvd_mkdirsub()
2123 if (vpp && !nd->nd_repstat) { in nfsrvd_mkdirsub()
2131 *diraft_retp = nfsvno_getattr(dirp, diraftp, nd, p, 0, NULL); in nfsrvd_mkdirsub()
2134 if ((nd->nd_flag & ND_NFSV4) && !nd->nd_repstat) { in nfsrvd_mkdirsub()
2140 (void) nfsrv_putattrbit(nd, attrbitp); in nfsrvd_mkdirsub()
2143 NFSEXITCODE2(0, nd); in nfsrvd_mkdirsub()
2150 nfsrvd_commit(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_commit() argument
2159 if (nd->nd_repstat) { in nfsrvd_commit()
2160 nfsrv_wcc(nd, for_ret, &bfor, aft_ret, &aft); in nfsrvd_commit()
2166 if (nd->nd_flag & ND_NFSV3) in nfsrvd_commit()
2181 if (nd->nd_flag & ND_NFSV3) in nfsrvd_commit()
2182 for_ret = nfsvno_getattr(vp, &bfor, nd, p, 1, NULL); in nfsrvd_commit()
2183 nd->nd_repstat = nfsvno_fsync(vp, off, cnt, nd->nd_cred, p); in nfsrvd_commit()
2184 if (nd->nd_flag & ND_NFSV3) { in nfsrvd_commit()
2185 aft_ret = nfsvno_getattr(vp, &aft, nd, p, 1, NULL); in nfsrvd_commit()
2186 nfsrv_wcc(nd, for_ret, &bfor, aft_ret, &aft); in nfsrvd_commit()
2189 if (!nd->nd_repstat) { in nfsrvd_commit()
2196 NFSEXITCODE2(0, nd); in nfsrvd_commit()
2200 NFSEXITCODE2(error, nd); in nfsrvd_commit()
2208 nfsrvd_statfs(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_statfs() argument
2219 if (nd->nd_repstat) { in nfsrvd_statfs()
2220 nfsrv_postopattr(nd, getret, &at); in nfsrvd_statfs()
2224 nd->nd_repstat = nfsvno_statfs(vp, sf); in nfsrvd_statfs()
2225 getret = nfsvno_getattr(vp, &at, nd, p, 1, NULL); in nfsrvd_statfs()
2227 if (nd->nd_flag & ND_NFSV3) in nfsrvd_statfs()
2228 nfsrv_postopattr(nd, getret, &at); in nfsrvd_statfs()
2229 if (nd->nd_repstat) in nfsrvd_statfs()
2231 if (nd->nd_flag & ND_NFSV2) { in nfsrvd_statfs()
2260 NFSEXITCODE2(0, nd); in nfsrvd_statfs()
2268 nfsrvd_fsinfo(struct nfsrv_descript *nd, int isdgram, in nfsrvd_fsinfo() argument
2277 if (nd->nd_repstat) { in nfsrvd_fsinfo()
2278 nfsrv_postopattr(nd, getret, &at); in nfsrvd_fsinfo()
2281 getret = nfsvno_getattr(vp, &at, nd, p, 1, NULL); in nfsrvd_fsinfo()
2284 nfsrv_postopattr(nd, getret, &at); in nfsrvd_fsinfo()
2300 NFSEXITCODE2(0, nd); in nfsrvd_fsinfo()
2308 nfsrvd_pathconf(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_pathconf() argument
2317 if (nd->nd_repstat) { in nfsrvd_pathconf()
2318 nfsrv_postopattr(nd, getret, &at); in nfsrvd_pathconf()
2321 nd->nd_repstat = nfsvno_pathconf(vp, _PC_LINK_MAX, &linkmax, in nfsrvd_pathconf()
2322 nd->nd_cred, p); in nfsrvd_pathconf()
2323 if (!nd->nd_repstat) in nfsrvd_pathconf()
2324 nd->nd_repstat = nfsvno_pathconf(vp, _PC_NAME_MAX, &namemax, in nfsrvd_pathconf()
2325 nd->nd_cred, p); in nfsrvd_pathconf()
2326 if (!nd->nd_repstat) in nfsrvd_pathconf()
2327 nd->nd_repstat=nfsvno_pathconf(vp, _PC_CHOWN_RESTRICTED, in nfsrvd_pathconf()
2328 &chownres, nd->nd_cred, p); in nfsrvd_pathconf()
2329 if (!nd->nd_repstat) in nfsrvd_pathconf()
2330 nd->nd_repstat = nfsvno_pathconf(vp, _PC_NO_TRUNC, &notrunc, in nfsrvd_pathconf()
2331 nd->nd_cred, p); in nfsrvd_pathconf()
2332 getret = nfsvno_getattr(vp, &at, nd, p, 1, NULL); in nfsrvd_pathconf()
2334 nfsrv_postopattr(nd, getret, &at); in nfsrvd_pathconf()
2335 if (!nd->nd_repstat) { in nfsrvd_pathconf()
2352 NFSEXITCODE2(0, nd); in nfsrvd_pathconf()
2360 nfsrvd_lock(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_lock() argument
2389 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_lock()
2404 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_lock()
2410 stp->ls_op = nd->nd_rp; in nfsrvd_lock()
2421 if ((nd->nd_flag & ND_NFSV41) != 0 && in nfsrvd_lock()
2426 if ((nd->nd_flag & ND_CURSTATEID) != 0) { in nfsrvd_lock()
2427 stp->ls_stateid = nd->nd_curstateid; in nfsrvd_lock()
2430 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_lock()
2438 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_lock()
2439 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_lock()
2440 clientid.qval = nd->nd_clientid.qval; in nfsrvd_lock()
2441 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_lock()
2444 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_lock()
2446 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_lock()
2447 nd->nd_clientid.qval = clientid.qval; in nfsrvd_lock()
2449 error = nfsrv_mtostr(nd, stp->ls_owner, stp->ls_ownerlen); in nfsrvd_lock()
2457 stp->ls_op = nd->nd_rp; in nfsrvd_lock()
2467 if ((nd->nd_flag & ND_NFSV41) != 0 && in nfsrvd_lock()
2472 if ((nd->nd_flag & ND_CURSTATEID) != 0) { in nfsrvd_lock()
2473 stp->ls_stateid = nd->nd_curstateid; in nfsrvd_lock()
2476 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_lock()
2484 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_lock()
2485 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_lock()
2486 clientid.qval = nd->nd_clientid.qval; in nfsrvd_lock()
2487 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_lock()
2490 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_lock()
2492 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_lock()
2493 nd->nd_clientid.qval = clientid.qval; in nfsrvd_lock()
2504 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_lock()
2508 stp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_lock()
2513 if (!nd->nd_repstat && vp->v_type != VREG) { in nfsrvd_lock()
2515 nd->nd_repstat = NFSERR_ISDIR; in nfsrvd_lock()
2517 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_lock()
2519 if (!nd->nd_repstat) { in nfsrvd_lock()
2521 nd->nd_repstat = nfsvno_accchk(vp, VWRITE, in nfsrvd_lock()
2522 nd->nd_cred, exp, p, NFSACCCHK_ALLOWOWNER, in nfsrvd_lock()
2525 nd->nd_repstat = nfsvno_accchk(vp, VREAD, in nfsrvd_lock()
2526 nd->nd_cred, exp, p, NFSACCCHK_ALLOWOWNER, in nfsrvd_lock()
2528 if (nd->nd_repstat) in nfsrvd_lock()
2529 nd->nd_repstat = nfsvno_accchk(vp, VEXEC, in nfsrvd_lock()
2530 nd->nd_cred, exp, p, NFSACCCHK_ALLOWOWNER, in nfsrvd_lock()
2540 nd->nd_repstat = nfsrv_lockctrl(vp, &stp, &lop, &cf, clientid, in nfsrvd_lock()
2541 &stateid, exp, nd, p); in nfsrvd_lock()
2546 if (!nd->nd_repstat) { in nfsrvd_lock()
2548 if ((nd->nd_flag & ND_NFSV41) != 0) { in nfsrvd_lock()
2549 nd->nd_curstateid = stateid; in nfsrvd_lock()
2550 nd->nd_flag |= ND_CURSTATEID; in nfsrvd_lock()
2555 } else if (nd->nd_repstat == NFSERR_DENIED) { in nfsrvd_lock()
2571 (void) nfsm_strtom(nd, cf.cl_owner, cf.cl_ownerlen); in nfsrvd_lock()
2574 NFSEXITCODE2(0, nd); in nfsrvd_lock()
2580 NFSEXITCODE2(error, nd); in nfsrvd_lock()
2588 nfsrvd_lockt(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_lockt() argument
2605 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_lockt()
2613 stp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_lockt()
2627 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_lockt()
2638 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_lockt()
2643 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_lockt()
2644 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_lockt()
2645 clientid.qval = nd->nd_clientid.qval; in nfsrvd_lockt()
2646 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_lockt()
2649 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_lockt()
2651 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_lockt()
2652 nd->nd_clientid.qval = clientid.qval; in nfsrvd_lockt()
2654 error = nfsrv_mtostr(nd, stp->ls_owner, stp->ls_ownerlen); in nfsrvd_lockt()
2657 if (!nd->nd_repstat && vp->v_type != VREG) { in nfsrvd_lockt()
2659 nd->nd_repstat = NFSERR_ISDIR; in nfsrvd_lockt()
2661 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_lockt()
2663 if (!nd->nd_repstat) in nfsrvd_lockt()
2664 nd->nd_repstat = nfsrv_lockctrl(vp, &stp, &lop, &cf, clientid, in nfsrvd_lockt()
2665 &stateid, exp, nd, p); in nfsrvd_lockt()
2666 if (nd->nd_repstat) { in nfsrvd_lockt()
2667 if (nd->nd_repstat == NFSERR_DENIED) { in nfsrvd_lockt()
2683 (void) nfsm_strtom(nd, cf.cl_owner, cf.cl_ownerlen); in nfsrvd_lockt()
2689 NFSEXITCODE2(0, nd); in nfsrvd_lockt()
2695 NFSEXITCODE2(error, nd); in nfsrvd_lockt()
2703 nfsrvd_locku(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_locku() argument
2723 stp->ls_op = nd->nd_rp; in nfsrvd_locku()
2735 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_locku()
2741 stp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_locku()
2752 if ((nd->nd_flag & ND_NFSV41) != 0 && stp->ls_stateid.seqid == 1 && in nfsrvd_locku()
2755 if ((nd->nd_flag & ND_CURSTATEID) != 0) { in nfsrvd_locku()
2756 stp->ls_stateid = nd->nd_curstateid; in nfsrvd_locku()
2759 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_locku()
2774 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_locku()
2778 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_locku()
2779 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_locku()
2780 clientid.qval = nd->nd_clientid.qval; in nfsrvd_locku()
2781 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_locku()
2784 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_locku()
2786 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_locku()
2787 nd->nd_clientid.qval = clientid.qval; in nfsrvd_locku()
2789 if (!nd->nd_repstat && vp->v_type != VREG) { in nfsrvd_locku()
2791 nd->nd_repstat = NFSERR_ISDIR; in nfsrvd_locku()
2793 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_locku()
2800 nd->nd_repstat = nfsrv_lockctrl(vp, &stp, &lop, NULL, clientid, in nfsrvd_locku()
2801 &stateid, exp, nd, p); in nfsrvd_locku()
2806 if (!nd->nd_repstat) { in nfsrvd_locku()
2813 NFSEXITCODE2(error, nd); in nfsrvd_locku()
2821 nfsrvd_open(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_open() argument
2853 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_open()
2859 stp->ls_op = nd->nd_rp; in nfsrvd_open()
2861 stp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_open()
2866 NFSV4OPEN_WANTPUSHDELEG)) != 0 && (nd->nd_flag & ND_NFSV41) != 0) { in nfsrvd_open()
2908 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_open()
2924 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_open()
2928 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_open()
2929 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_open()
2930 clientid.qval = nd->nd_clientid.qval; in nfsrvd_open()
2931 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_open()
2934 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_open()
2936 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_open()
2937 nd->nd_clientid.qval = clientid.qval; in nfsrvd_open()
2939 error = nfsrv_mtostr(nd, stp->ls_owner, stp->ls_ownerlen); in nfsrvd_open()
2945 if (!nd->nd_repstat) in nfsrvd_open()
2946 nd->nd_repstat = nfsvno_getattr(dp, &dirfor, nd, p, 0, NULL); in nfsrvd_open()
2955 error = nfsv4_sattr(nd, NULL, &nva, &attrbits, aclp, p); in nfsrvd_open()
2964 if (!nd->nd_repstat && NFSVNO_ISSETGID(&nva) && in nfsrvd_open()
2967 if (!nd->nd_repstat) in nfsrvd_open()
2968 nd->nd_repstat = nfsrv_checkuidgid(nd, &nva); in nfsrvd_open()
2979 error = nfsv4_sattr(nd, NULL, &nva, &attrbits, aclp, p); in nfsrvd_open()
2984 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_open()
2991 if (nd->nd_repstat == 0 && NFSVNO_ISSETGID(&nva) && in nfsrvd_open()
2994 if (nd->nd_repstat == 0) in nfsrvd_open()
2995 nd->nd_repstat = nfsrv_checkuidgid(nd, &nva); in nfsrvd_open()
2998 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_open()
3002 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_open()
3025 if (!nd->nd_repstat && create == NFSV4OPEN_CREATE && in nfsrvd_open()
3027 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_open()
3028 if (nd->nd_repstat) { in nfsrvd_open()
3029 nd->nd_repstat = nfsrv_opencheck(clientid, in nfsrvd_open()
3030 &stateid, stp, NULL, nd, p, nd->nd_repstat); in nfsrvd_open()
3034 NFSNAMEICNDSET(&named.ni_cnd, nd->nd_cred, CREATE, in nfsrvd_open()
3037 NFSNAMEICNDSET(&named.ni_cnd, nd->nd_cred, LOOKUP, in nfsrvd_open()
3040 error = nfsrv_parsename(nd, bufp, hashp, &named.ni_pathlen); in nfsrvd_open()
3048 NFSEXITCODE2(error, nd); in nfsrvd_open()
3051 if (!nd->nd_repstat) { in nfsrvd_open()
3052 nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp, in nfsrvd_open()
3061 if (nd->nd_repstat == 0 && named.ni_vp != NULL) { in nfsrvd_open()
3073 if (nd->nd_repstat == 0 && named.ni_vp != NULL) { in nfsrvd_open()
3074 nd->nd_repstat = EEXIST; in nfsrvd_open()
3080 if (nd->nd_repstat == 0 && named.ni_vp == NULL) in nfsrvd_open()
3088 nfsvno_open(nd, &named, clientid, &stateid, stp, in nfsrvd_open()
3090 nd->nd_cred, done_namei, exp, &vp); in nfsrvd_open()
3106 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_open()
3111 if (nd->nd_repstat == 0 && create == NFSV4OPEN_CREATE) in nfsrvd_open()
3112 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_open()
3117 nd->nd_repstat = nfsrv_opencheck(clientid, &stateid, in nfsrvd_open()
3118 stp, vp, nd, p, nd->nd_repstat); in nfsrvd_open()
3120 nd->nd_repstat = NFSERR_PERM; in nfsrvd_open()
3122 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_open()
3129 if (!nd->nd_repstat && vp->v_type != VREG) { in nfsrvd_open()
3134 nd->nd_repstat = (vp->v_type == VDIR) ? NFSERR_ISDIR : NFSERR_SYMLINK; in nfsrvd_open()
3161 if (!nd->nd_repstat && (stp->ls_flags & NFSLCK_WRITEACCESS)) in nfsrvd_open()
3162 nd->nd_repstat = nfsvno_accchk(vp, VWRITE, nd->nd_cred, in nfsrvd_open()
3164 if (!nd->nd_repstat && (stp->ls_flags & NFSLCK_READACCESS)) { in nfsrvd_open()
3165 nd->nd_repstat = nfsvno_accchk(vp, VREAD, nd->nd_cred, in nfsrvd_open()
3167 if (nd->nd_repstat) in nfsrvd_open()
3168 nd->nd_repstat = nfsvno_accchk(vp, VEXEC, in nfsrvd_open()
3169 nd->nd_cred, exp, p, override, in nfsrvd_open()
3173 if (!nd->nd_repstat) { in nfsrvd_open()
3174 nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); in nfsrvd_open()
3175 if (!nd->nd_repstat) { in nfsrvd_open()
3180 if (!nd->nd_repstat && exclusive_flag && (cverf[0] != tverf[0] || in nfsrvd_open()
3182 nd->nd_repstat = EEXIST; in nfsrvd_open()
3186 if (!nd->nd_repstat) in nfsrvd_open()
3187 nd->nd_repstat = nfsrv_openctrl(nd, vp, &stp, clientid, &stateid, in nfsrvd_open()
3199 if (!nd->nd_repstat && dirp) in nfsrvd_open()
3200 nd->nd_repstat = nfsvno_getattr(dirp, &diraft, nd, p, 0, NULL); in nfsrvd_open()
3201 if (!nd->nd_repstat) { in nfsrvd_open()
3203 if ((nd->nd_flag & ND_NFSV41) != 0) { in nfsrvd_open()
3204 nd->nd_curstateid = stateid; in nfsrvd_open()
3205 nd->nd_flag |= ND_CURSTATEID; in nfsrvd_open()
3225 (void) nfsrv_putattrbit(nd, &attrbits); in nfsrvd_open()
3286 (void) nfsm_strtom(nd, "OWNER@", 6); in nfsrvd_open()
3297 NFSEXITCODE2(0, nd); in nfsrvd_open()
3306 NFSEXITCODE2(error, nd); in nfsrvd_open()
3314 nfsrvd_close(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_close() argument
3328 stp->ls_op = nd->nd_rp; in nfsrvd_close()
3329 stp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_close()
3338 if ((nd->nd_flag & ND_NFSV41) != 0 && stp->ls_stateid.seqid == 1 && in nfsrvd_close()
3341 if ((nd->nd_flag & ND_CURSTATEID) != 0) in nfsrvd_close()
3342 stp->ls_stateid = nd->nd_curstateid; in nfsrvd_close()
3344 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_close()
3352 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_close()
3353 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_close()
3354 clientid.qval = nd->nd_clientid.qval; in nfsrvd_close()
3355 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_close()
3358 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_close()
3360 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_close()
3361 nd->nd_clientid.qval = clientid.qval; in nfsrvd_close()
3363 nd->nd_repstat = nfsrv_openupdate(vp, stp, clientid, &stateid, nd, p, in nfsrvd_close()
3369 if (!nd->nd_repstat) { in nfsrvd_close()
3374 if ((nd->nd_flag & ND_CURSTATEID) != 0 && in nfsrvd_close()
3375 stateid.other[0] == nd->nd_curstateid.other[0] && in nfsrvd_close()
3376 stateid.other[1] == nd->nd_curstateid.other[1] && in nfsrvd_close()
3377 stateid.other[2] == nd->nd_curstateid.other[2]) in nfsrvd_close()
3378 nd->nd_flag &= ~ND_CURSTATEID; in nfsrvd_close()
3383 NFSEXITCODE2(0, nd); in nfsrvd_close()
3387 NFSEXITCODE2(error, nd); in nfsrvd_close()
3395 nfsrvd_delegpurge(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_delegpurge() argument
3403 if ((nd->nd_repstat = nfsd_checkrootexp(nd)) != 0) in nfsrvd_delegpurge()
3408 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_delegpurge()
3409 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_delegpurge()
3410 clientid.qval = nd->nd_clientid.qval; in nfsrvd_delegpurge()
3411 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_delegpurge()
3414 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_delegpurge()
3416 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_delegpurge()
3417 nd->nd_clientid.qval = clientid.qval; in nfsrvd_delegpurge()
3419 nd->nd_repstat = nfsrv_delegupdate(nd, clientid, NULL, NULL, in nfsrvd_delegpurge()
3420 NFSV4OP_DELEGPURGE, nd->nd_cred, p, NULL); in nfsrvd_delegpurge()
3422 NFSEXITCODE2(error, nd); in nfsrvd_delegpurge()
3430 nfsrvd_delegreturn(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_delegreturn() argument
3445 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_delegreturn()
3446 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_delegreturn()
3447 clientid.qval = nd->nd_clientid.qval; in nfsrvd_delegreturn()
3448 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_delegreturn()
3451 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_delegreturn()
3453 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_delegreturn()
3454 nd->nd_clientid.qval = clientid.qval; in nfsrvd_delegreturn()
3456 nd->nd_repstat = nfsrv_delegupdate(nd, clientid, &stateid, vp, in nfsrvd_delegreturn()
3457 NFSV4OP_DELEGRETURN, nd->nd_cred, p, &writeacc); in nfsrvd_delegreturn()
3463 NFSEXITCODE2(error, nd); in nfsrvd_delegreturn()
3471 nfsrvd_getfh(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_getfh() argument
3477 nd->nd_repstat = nfsvno_getfh(vp, &fh, p); in nfsrvd_getfh()
3479 if (!nd->nd_repstat) in nfsrvd_getfh()
3480 (void)nfsm_fhtom(NULL, nd, (u_int8_t *)&fh, 0, 0); in nfsrvd_getfh()
3481 NFSEXITCODE2(0, nd); in nfsrvd_getfh()
3489 nfsrvd_openconfirm(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_openconfirm() argument
3499 if ((nd->nd_flag & ND_NFSV41) != 0) { in nfsrvd_openconfirm()
3500 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_openconfirm()
3505 stp->ls_op = nd->nd_rp; in nfsrvd_openconfirm()
3506 stp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_openconfirm()
3515 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_openconfirm()
3516 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_openconfirm()
3517 clientid.qval = nd->nd_clientid.qval; in nfsrvd_openconfirm()
3518 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_openconfirm()
3521 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_openconfirm()
3523 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_openconfirm()
3524 nd->nd_clientid.qval = clientid.qval; in nfsrvd_openconfirm()
3526 nd->nd_repstat = nfsrv_openupdate(vp, stp, clientid, &stateid, nd, p, in nfsrvd_openconfirm()
3528 if (!nd->nd_repstat) { in nfsrvd_openconfirm()
3535 NFSEXITCODE2(error, nd); in nfsrvd_openconfirm()
3543 nfsrvd_opendowngrade(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_opendowngrade() argument
3561 stp->ls_op = nd->nd_rp; in nfsrvd_opendowngrade()
3562 stp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_opendowngrade()
3572 if ((nd->nd_flag & ND_NFSV41) != 0 && stp->ls_stateid.seqid == 1 && in nfsrvd_opendowngrade()
3575 if ((nd->nd_flag & ND_CURSTATEID) != 0) in nfsrvd_opendowngrade()
3576 stp->ls_stateid = nd->nd_curstateid; in nfsrvd_opendowngrade()
3578 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_opendowngrade()
3585 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_opendowngrade()
3599 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_opendowngrade()
3615 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_opendowngrade()
3620 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_opendowngrade()
3621 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_opendowngrade()
3622 clientid.qval = nd->nd_clientid.qval; in nfsrvd_opendowngrade()
3623 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_opendowngrade()
3626 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_opendowngrade()
3628 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_opendowngrade()
3629 nd->nd_clientid.qval = clientid.qval; in nfsrvd_opendowngrade()
3631 if (!nd->nd_repstat) in nfsrvd_opendowngrade()
3632 nd->nd_repstat = nfsrv_openupdate(vp, stp, clientid, &stateid, in nfsrvd_opendowngrade()
3633 nd, p, NULL); in nfsrvd_opendowngrade()
3634 if (!nd->nd_repstat) { in nfsrvd_opendowngrade()
3636 if ((nd->nd_flag & ND_NFSV41) != 0) { in nfsrvd_opendowngrade()
3637 nd->nd_curstateid = stateid; in nfsrvd_opendowngrade()
3638 nd->nd_flag |= ND_CURSTATEID; in nfsrvd_opendowngrade()
3646 NFSEXITCODE2(error, nd); in nfsrvd_opendowngrade()
3654 nfsrvd_renew(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_renew() argument
3662 if ((nd->nd_flag & ND_NFSV41) != 0) { in nfsrvd_renew()
3663 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_renew()
3666 if ((nd->nd_repstat = nfsd_checkrootexp(nd)) != 0) in nfsrvd_renew()
3671 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_renew()
3672 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_renew()
3673 clientid.qval = nd->nd_clientid.qval; in nfsrvd_renew()
3674 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_renew()
3677 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_renew()
3679 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_renew()
3680 nd->nd_clientid.qval = clientid.qval; in nfsrvd_renew()
3682 nd->nd_repstat = nfsrv_getclient(clientid, (CLOPS_RENEWOP|CLOPS_RENEW), in nfsrvd_renew()
3683 NULL, NULL, (nfsquad_t)((u_quad_t)0), 0, nd, p); in nfsrvd_renew()
3685 NFSEXITCODE2(error, nd); in nfsrvd_renew()
3693 nfsrvd_secinfo(struct nfsrv_descript *nd, int isdgram, in nfsrvd_secinfo() argument
3712 NFSNAMEICNDSET(&named.ni_cnd, nd->nd_cred, LOOKUP, in nfsrvd_secinfo()
3715 error = nfsrv_parsename(nd, bufp, hashp, &named.ni_pathlen); in nfsrvd_secinfo()
3721 if (!nd->nd_repstat) { in nfsrvd_secinfo()
3722 nd->nd_repstat = nfsvno_namei(nd, &named, dp, 1, exp, &dirp); in nfsrvd_secinfo()
3729 if (nd->nd_repstat) in nfsrvd_secinfo()
3734 nd->nd_repstat = nfsvno_getfh(vp, (fhandle_t *)fh.nfsrvfh_data, p); in nfsrvd_secinfo()
3736 savflag = nd->nd_flag; in nfsrvd_secinfo()
3737 if (!nd->nd_repstat) { in nfsrvd_secinfo()
3742 nfsd_fhtovp(nd, &fh, LK_SHARED, &vp, &retnes, NULL, 0, in nfsrvd_secinfo()
3747 nd->nd_flag = savflag; in nfsrvd_secinfo()
3748 if (nd->nd_repstat) in nfsrvd_secinfo()
3763 nfsm_strtom(nd, nfsgss_mechlist[KERBV_MECH].str, in nfsrvd_secinfo()
3769 nfsm_strtom(nd, nfsgss_mechlist[KERBV_MECH].str, in nfsrvd_secinfo()
3775 nfsm_strtom(nd, nfsgss_mechlist[KERBV_MECH].str, in nfsrvd_secinfo()
3790 (void) nfsm_strtom(nd, nfsgss_mechlist[KERBV_MECH].str, in nfsrvd_secinfo()
3799 (void) nfsm_strtom(nd, nfsgss_mechlist[KERBV_MECH].str, in nfsrvd_secinfo()
3808 (void) nfsm_strtom(nd, nfsgss_mechlist[KERBV_MECH].str, in nfsrvd_secinfo()
3819 NFSEXITCODE2(error, nd); in nfsrvd_secinfo()
3827 nfsrvd_secinfononame(struct nfsrv_descript *nd, int isdgram, in nfsrvd_secinfononame() argument
3847 nd->nd_repstat = NFSERR_NOTDIR; in nfsrvd_secinfononame()
3850 NFSNAMEICNDSET(&named.ni_cnd, nd->nd_cred, LOOKUP, in nfsrvd_secinfononame()
3853 error = nfsrv_parsename(nd, bufp, hashp, &named.ni_pathlen); in nfsrvd_secinfononame()
3859 if (nd->nd_repstat == 0) in nfsrvd_secinfononame()
3860 nd->nd_repstat = nfsvno_namei(nd, &named, dp, 1, exp, &dirp); in nfsrvd_secinfononame()
3872 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_secinfononame()
3875 if (nd->nd_repstat != 0) in nfsrvd_secinfononame()
3878 nd->nd_repstat = nfsvno_getfh(vp, (fhandle_t *)fh.nfsrvfh_data, p); in nfsrvd_secinfononame()
3880 savflag = nd->nd_flag; in nfsrvd_secinfononame()
3881 if (nd->nd_repstat == 0) { in nfsrvd_secinfononame()
3886 nfsd_fhtovp(nd, &fh, LK_SHARED, &vp, &retnes, NULL, 0, in nfsrvd_secinfononame()
3891 nd->nd_flag = savflag; in nfsrvd_secinfononame()
3892 if (nd->nd_repstat != 0) in nfsrvd_secinfononame()
3907 nfsm_strtom(nd, nfsgss_mechlist[KERBV_MECH].str, in nfsrvd_secinfononame()
3913 nfsm_strtom(nd, nfsgss_mechlist[KERBV_MECH].str, in nfsrvd_secinfononame()
3919 nfsm_strtom(nd, nfsgss_mechlist[KERBV_MECH].str, in nfsrvd_secinfononame()
3934 nfsm_strtom(nd, nfsgss_mechlist[KERBV_MECH].str, in nfsrvd_secinfononame()
3943 nfsm_strtom(nd, nfsgss_mechlist[KERBV_MECH].str, in nfsrvd_secinfononame()
3952 nfsm_strtom(nd, nfsgss_mechlist[KERBV_MECH].str, in nfsrvd_secinfononame()
3963 NFSEXITCODE2(error, nd); in nfsrvd_secinfononame()
3971 nfsrvd_setclientid(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_setclientid() argument
3991 if ((nd->nd_flag & ND_NFSV41) != 0) { in nfsrvd_setclientid()
3992 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_setclientid()
3995 if ((nd->nd_repstat = nfsd_checkrootexp(nd)) != 0) in nfsrvd_setclientid()
4002 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_setclientid()
4006 if (nd->nd_flag & ND_GSS) in nfsrvd_setclientid()
4007 i += nd->nd_princlen; in nfsrvd_setclientid()
4019 error = nfsrv_mtostr(nd, clp->lc_id, idlen); in nfsrvd_setclientid()
4022 if (nd->nd_flag & ND_GSS) { in nfsrvd_setclientid()
4024 if (nd->nd_flag & ND_GSSINTEGRITY) in nfsrvd_setclientid()
4026 else if (nd->nd_flag & ND_GSSPRIVACY) in nfsrvd_setclientid()
4031 if ((nd->nd_flag & ND_GSS) && nd->nd_princlen > 0) { in nfsrvd_setclientid()
4033 clp->lc_namelen = nd->nd_princlen; in nfsrvd_setclientid()
4035 NFSBCOPY(nd->nd_principal, clp->lc_name, clp->lc_namelen); in nfsrvd_setclientid()
4037 clp->lc_uid = nd->nd_cred->cr_uid; in nfsrvd_setclientid()
4038 clp->lc_gid = nd->nd_cred->cr_gid; in nfsrvd_setclientid()
4042 if (nd->nd_flag & ND_TLS) in nfsrvd_setclientid()
4047 error = nfsrv_getclientipaddr(nd, clp); in nfsrvd_setclientid()
4060 nd->nd_repstat = nfsrv_setclient(nd, &clp, &clientid, &confirm, p); in nfsrvd_setclientid()
4061 if (nd->nd_repstat == NFSERR_CLIDINUSE) { in nfsrvd_setclientid()
4070 (void) nfsm_strtom(nd, "tcp", 3); in nfsrvd_setclientid()
4072 (void) nfsm_strtom(nd, "udp", 3); in nfsrvd_setclientid()
4084 (void) nfsm_strtom(nd, "tcp6", 4); in nfsrvd_setclientid()
4086 (void) nfsm_strtom(nd, "udp6", 4); in nfsrvd_setclientid()
4100 (void) nfsm_strtom(nd, addrbuf, strlen(addrbuf)); in nfsrvd_setclientid()
4109 if (!nd->nd_repstat) { in nfsrvd_setclientid()
4118 NFSEXITCODE2(0, nd); in nfsrvd_setclientid()
4127 NFSEXITCODE2(error, nd); in nfsrvd_setclientid()
4135 nfsrvd_setclientidcfrm(struct nfsrv_descript *nd, in nfsrvd_setclientidcfrm() argument
4144 if ((nd->nd_flag & ND_NFSV41) != 0) { in nfsrvd_setclientidcfrm()
4145 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_setclientidcfrm()
4148 if ((nd->nd_repstat = nfsd_checkrootexp(nd)) != 0) in nfsrvd_setclientidcfrm()
4160 nd->nd_repstat = nfsrv_getclient(clientid, (CLOPS_CONFIRM|CLOPS_RENEW), in nfsrvd_setclientidcfrm()
4161 NULL, NULL, confirm, 0, nd, p); in nfsrvd_setclientidcfrm()
4163 NFSEXITCODE2(error, nd); in nfsrvd_setclientidcfrm()
4171 nfsrvd_verify(struct nfsrv_descript *nd, int isdgram, in nfsrvd_verify() argument
4182 nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); in nfsrvd_verify()
4183 if (!nd->nd_repstat) in nfsrvd_verify()
4184 nd->nd_repstat = nfsvno_statfs(vp, sf); in nfsrvd_verify()
4185 if (!nd->nd_repstat) in nfsrvd_verify()
4186 nd->nd_repstat = nfsvno_getfh(vp, &fh, p); in nfsrvd_verify()
4187 if (!nd->nd_repstat) { in nfsrvd_verify()
4189 error = nfsv4_loadattr(nd, vp, &nva, NULL, &fh, fhsize, NULL, in nfsrvd_verify()
4190 sf, NULL, &fs, NULL, 1, &ret, NULL, NULL, p, nd->nd_cred); in nfsrvd_verify()
4192 if (nd->nd_procnum == NFSV4OP_NVERIFY) { in nfsrvd_verify()
4194 nd->nd_repstat = NFSERR_SAME; in nfsrvd_verify()
4196 nd->nd_repstat = ret; in nfsrvd_verify()
4198 nd->nd_repstat = ret; in nfsrvd_verify()
4203 NFSEXITCODE2(error, nd); in nfsrvd_verify()
4211 nfsrvd_openattr(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_openattr() argument
4220 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_openattr()
4223 NFSEXITCODE2(error, nd); in nfsrvd_openattr()
4231 nfsrvd_releaselckown(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_releaselckown() argument
4240 if ((nd->nd_flag & ND_NFSV41) != 0) { in nfsrvd_releaselckown()
4241 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_releaselckown()
4244 if ((nd->nd_repstat = nfsd_checkrootexp(nd)) != 0) in nfsrvd_releaselckown()
4249 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_releaselckown()
4257 stp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_releaselckown()
4260 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_releaselckown()
4261 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_releaselckown()
4262 clientid.qval = nd->nd_clientid.qval; in nfsrvd_releaselckown()
4263 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_releaselckown()
4266 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_releaselckown()
4268 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_releaselckown()
4269 nd->nd_clientid.qval = clientid.qval; in nfsrvd_releaselckown()
4271 error = nfsrv_mtostr(nd, stp->ls_owner, len); in nfsrvd_releaselckown()
4274 nd->nd_repstat = nfsrv_releaselckown(stp, clientid, p); in nfsrvd_releaselckown()
4277 NFSEXITCODE2(0, nd); in nfsrvd_releaselckown()
4282 NFSEXITCODE2(error, nd); in nfsrvd_releaselckown()
4290 nfsrvd_exchangeid(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_exchangeid() argument
4310 if ((nd->nd_repstat = nfsd_checkrootexp(nd)) != 0) in nfsrvd_exchangeid()
4317 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_exchangeid()
4321 if (nd->nd_flag & ND_GSS) in nfsrvd_exchangeid()
4322 i += nd->nd_princlen; in nfsrvd_exchangeid()
4331 switch (nd->nd_nam->sa_family) { in nfsrvd_exchangeid()
4335 sin = (struct sockaddr_in *)nd->nd_nam; in nfsrvd_exchangeid()
4345 sin6 = (struct sockaddr_in6 *)nd->nd_nam; in nfsrvd_exchangeid()
4356 error = nfsrv_mtostr(nd, clp->lc_id, idlen); in nfsrvd_exchangeid()
4359 if ((nd->nd_flag & ND_GSS) != 0) { in nfsrvd_exchangeid()
4361 if ((nd->nd_flag & ND_GSSINTEGRITY) != 0) in nfsrvd_exchangeid()
4363 else if ((nd->nd_flag & ND_GSSPRIVACY) != 0) in nfsrvd_exchangeid()
4367 if ((nd->nd_flag & ND_NFSV42) != 0) in nfsrvd_exchangeid()
4369 if ((nd->nd_flag & ND_GSS) != 0 && nd->nd_princlen > 0) { in nfsrvd_exchangeid()
4371 clp->lc_namelen = nd->nd_princlen; in nfsrvd_exchangeid()
4373 NFSBCOPY(nd->nd_principal, clp->lc_name, clp->lc_namelen); in nfsrvd_exchangeid()
4375 clp->lc_uid = nd->nd_cred->cr_uid; in nfsrvd_exchangeid()
4376 clp->lc_gid = nd->nd_cred->cr_gid; in nfsrvd_exchangeid()
4383 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_exchangeid()
4396 if ((nd->nd_flag & (ND_GSSINTEGRITY | ND_GSSPRIVACY)) == 0 || in nfsrvd_exchangeid()
4397 nd->nd_princlen == 0) in nfsrvd_exchangeid()
4398 nd->nd_repstat = (NFSERR_AUTHERR | AUTH_TOOWEAK); in nfsrvd_exchangeid()
4399 if (nd->nd_repstat == 0) in nfsrvd_exchangeid()
4400 nd->nd_repstat = nfsrv_getopbits(nd, &mustops, NULL); in nfsrvd_exchangeid()
4401 if (nd->nd_repstat == 0) in nfsrvd_exchangeid()
4402 nd->nd_repstat = nfsrv_getopbits(nd, &allowops, NULL); in nfsrvd_exchangeid()
4403 if (nd->nd_repstat != 0) in nfsrvd_exchangeid()
4411 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_exchangeid()
4422 nd->nd_repstat = nfsrv_setclient(nd, &clp, &clientid, &confirm, p); in nfsrvd_exchangeid()
4429 if (nd->nd_repstat == 0) { in nfsrvd_exchangeid()
4439 nfsrv_putopbit(nd, &mustops); in nfsrvd_exchangeid()
4440 nfsrv_putopbit(nd, &allowops); in nfsrvd_exchangeid()
4447 s = nd->nd_cred->cr_prison->pr_hostuuid; in nfsrvd_exchangeid()
4448 nfsm_strtom(nd, s, strlen(s)); /* Owner Major */ in nfsrvd_exchangeid()
4452 s = nd->nd_cred->cr_prison->pr_hostuuid; in nfsrvd_exchangeid()
4453 nfsm_strtom(nd, s, strlen(s) ); /* Scope */ in nfsrvd_exchangeid()
4456 (void)nfsm_strtom(nd, "freebsd.org", strlen("freebsd.org")); in nfsrvd_exchangeid()
4457 (void)nfsm_strtom(nd, version, strlen(version)); in nfsrvd_exchangeid()
4463 NFSEXITCODE2(0, nd); in nfsrvd_exchangeid()
4472 NFSEXITCODE2(error, nd); in nfsrvd_exchangeid()
4480 nfsrvd_createsession(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_createsession() argument
4491 if ((nd->nd_repstat = nfsd_checkrootexp(nd)) != 0) in nfsrvd_createsession()
4529 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_createsession()
4544 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_createsession()
4556 nd->nd_repstat = nfsrv_getclient(clientid, CLOPS_CONFIRM | CLOPS_RENEW, in nfsrvd_createsession()
4557 NULL, sep, confirm, sep->sess_cbprogram, nd, p); in nfsrvd_createsession()
4558 if (nd->nd_repstat == 0) { in nfsrvd_createsession()
4586 if (nd->nd_repstat != 0 && sep != NULL) in nfsrvd_createsession()
4588 NFSEXITCODE2(error, nd); in nfsrvd_createsession()
4596 nfsrvd_sequence(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_sequence() argument
4604 if ((nd->nd_repstat = nfsd_checkrootexp(nd)) != 0) in nfsrvd_sequence()
4607 NFSBCOPY(tl, nd->nd_sessionid, NFSX_V4SESSIONID); in nfsrvd_sequence()
4610 nd->nd_slotid = fxdr_unsigned(uint32_t, *tl++); in nfsrvd_sequence()
4616 nd->nd_repstat = nfsrv_checksequence(nd, sequenceid, &highest_slotid, in nfsrvd_sequence()
4618 if (nd->nd_repstat != NFSERR_BADSLOT) in nfsrvd_sequence()
4619 nd->nd_flag |= ND_HASSEQUENCE; in nfsrvd_sequence()
4620 if (nd->nd_repstat == 0) { in nfsrvd_sequence()
4622 NFSBCOPY(nd->nd_sessionid, tl, NFSX_V4SESSIONID); in nfsrvd_sequence()
4625 *tl++ = txdr_unsigned(nd->nd_slotid); in nfsrvd_sequence()
4631 NFSEXITCODE2(error, nd); in nfsrvd_sequence()
4639 nfsrvd_reclaimcomplete(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_reclaimcomplete() argument
4658 nd->nd_repstat = nfsrv_checkreclaimcomplete(nd, onefs); in nfsrvd_reclaimcomplete()
4660 NFSEXITCODE2(error, nd); in nfsrvd_reclaimcomplete()
4668 nfsrvd_destroyclientid(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_destroyclientid() argument
4676 if ((nd->nd_repstat = nfsd_checkrootexp(nd)) != 0) in nfsrvd_destroyclientid()
4681 nd->nd_repstat = nfsrv_destroyclient(nd, clientid, p); in nfsrvd_destroyclientid()
4683 NFSEXITCODE2(error, nd); in nfsrvd_destroyclientid()
4691 nfsrvd_bindconnsess(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_bindconnsess() argument
4698 if ((nd->nd_repstat = nfsd_checkrootexp(nd)) != 0) in nfsrvd_bindconnsess()
4706 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_bindconnsess()
4710 nd->nd_repstat = nfsrv_bindconnsess(nd, sessid, &foreaft); in nfsrvd_bindconnsess()
4711 if (nd->nd_repstat == 0) { in nfsrvd_bindconnsess()
4720 NFSEXITCODE2(error, nd); in nfsrvd_bindconnsess()
4728 nfsrvd_destroysession(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_destroysession() argument
4734 if ((nd->nd_repstat = nfsd_checkrootexp(nd)) != 0) in nfsrvd_destroysession()
4738 nd->nd_repstat = nfsrv_destroysession(nd, sessid); in nfsrvd_destroysession()
4740 NFSEXITCODE2(error, nd); in nfsrvd_destroysession()
4748 nfsrvd_freestateid(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_freestateid() argument
4766 if ((nd->nd_flag & ND_CURSTATEID) != 0) { in nfsrvd_freestateid()
4767 stateid = nd->nd_curstateid; in nfsrvd_freestateid()
4770 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_freestateid()
4775 nd->nd_repstat = nfsrv_freestateid(nd, &stateid, p); in nfsrvd_freestateid()
4778 if (nd->nd_repstat == 0 && (nd->nd_flag & ND_CURSTATEID) != 0 && in nfsrvd_freestateid()
4779 stateid.other[0] == nd->nd_curstateid.other[0] && in nfsrvd_freestateid()
4780 stateid.other[1] == nd->nd_curstateid.other[1] && in nfsrvd_freestateid()
4781 stateid.other[2] == nd->nd_curstateid.other[2]) in nfsrvd_freestateid()
4782 nd->nd_flag &= ~ND_CURSTATEID; in nfsrvd_freestateid()
4784 NFSEXITCODE2(error, nd); in nfsrvd_freestateid()
4792 nfsrvd_layoutget(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_layoutget() argument
4820 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_layoutget()
4830 if ((nd->nd_flag & ND_CURSTATEID) != 0) { in nfsrvd_layoutget()
4831 stateid = nd->nd_curstateid; in nfsrvd_layoutget()
4834 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_layoutget()
4846 nd->nd_repstat = NFSERR_UNKNLAYOUTTYPE; in nfsrvd_layoutget()
4848 nd->nd_repstat = nfsrv_layoutget(nd, vp, exp, layouttype, in nfsrvd_layoutget()
4850 &retonclose, &layoutlen, layp, nd->nd_cred, p); in nfsrvd_layoutget()
4851 NFSD_DEBUG(4, "nfsrv_layoutget stat=%u layoutlen=%d\n", nd->nd_repstat, in nfsrvd_layoutget()
4853 if (nd->nd_repstat == 0) { in nfsrvd_layoutget()
4855 if ((nd->nd_flag & ND_NFSV41) != 0) { in nfsrvd_layoutget()
4856 nd->nd_curstateid = stateid; in nfsrvd_layoutget()
4857 nd->nd_flag |= ND_CURSTATEID; in nfsrvd_layoutget()
4870 nfsm_strtom(nd, layp, layoutlen); in nfsrvd_layoutget()
4871 } else if (nd->nd_repstat == NFSERR_LAYOUTTRYLATER) { in nfsrvd_layoutget()
4878 NFSEXITCODE2(error, nd); in nfsrvd_layoutget()
4886 nfsrvd_layoutcommit(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_layoutcommit() argument
4913 if ((nd->nd_flag & ND_CURSTATEID) != 0) { in nfsrvd_layoutcommit()
4914 stateid = nd->nd_curstateid; in nfsrvd_layoutcommit()
4917 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_layoutcommit()
4939 error = nfsrv_mtostr(nd, layp, maxcnt); in nfsrvd_layoutcommit()
4943 nd->nd_repstat = nfsrv_layoutcommit(nd, vp, layouttype, hasnewoff, in nfsrvd_layoutcommit()
4945 maxcnt, layp, &hasnewsize, &newsize, nd->nd_cred, p); in nfsrvd_layoutcommit()
4946 NFSD_DEBUG(4, "nfsrv_layoutcommit stat=%u\n", nd->nd_repstat); in nfsrvd_layoutcommit()
4947 if (nd->nd_repstat == 0) { in nfsrvd_layoutcommit()
4960 NFSEXITCODE2(error, nd); in nfsrvd_layoutcommit()
4968 nfsrvd_layoutreturn(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_layoutreturn() argument
5000 if ((nd->nd_flag & ND_CURSTATEID) != 0) { in nfsrvd_layoutreturn()
5001 stateid = nd->nd_curstateid; in nfsrvd_layoutreturn()
5004 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_layoutreturn()
5018 error = nfsrv_mtostr(nd, (char *)layp, maxcnt); in nfsrvd_layoutreturn()
5024 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_layoutreturn()
5030 nd->nd_repstat = nfsrv_layoutreturn(nd, vp, layouttype, iomode, in nfsrvd_layoutreturn()
5032 nd->nd_cred, p); in nfsrvd_layoutreturn()
5033 NFSD_DEBUG(4, "nfsrv_layoutreturn stat=%u fnd=%d\n", nd->nd_repstat, in nfsrvd_layoutreturn()
5035 if (nd->nd_repstat == 0) { in nfsrvd_layoutreturn()
5048 NFSEXITCODE2(error, nd); in nfsrvd_layoutreturn()
5056 nfsrvd_layouterror(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_layouterror() argument
5082 if ((nd->nd_flag & ND_CURSTATEID) != 0) { in nfsrvd_layouterror()
5083 stateid = nd->nd_curstateid; in nfsrvd_layouterror()
5086 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_layouterror()
5116 NFSEXITCODE2(error, nd); in nfsrvd_layouterror()
5124 nfsrvd_layoutstats(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_layoutstats() argument
5150 error = nfsm_advance(nd, NFSM_RNDUP(cnt), -1); in nfsrvd_layoutstats()
5160 if ((nd->nd_flag & ND_CURSTATEID) != 0) { in nfsrvd_layoutstats()
5161 stateid = nd->nd_curstateid; in nfsrvd_layoutstats()
5164 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_layoutstats()
5174 NFSEXITCODE2(error, nd); in nfsrvd_layoutstats()
5182 nfsrvd_ioadvise(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_ioadvise() argument
5197 error = nfsrv_getattrbits(nd, &hints, NULL, NULL); in nfsrvd_ioadvise()
5206 if ((nd->nd_flag & ND_CURSTATEID) != 0) { in nfsrvd_ioadvise()
5207 stateid = nd->nd_curstateid; in nfsrvd_ioadvise()
5210 nd->nd_repstat = NFSERR_BADSTATEID; in nfsrvd_ioadvise()
5216 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_ioadvise()
5223 nd->nd_repstat = NFSERR_ISDIR; in nfsrvd_ioadvise()
5225 nd->nd_repstat = NFSERR_WRONGTYPE; in nfsrvd_ioadvise()
5259 nfsrv_putattrbit(nd, &hints); in nfsrvd_ioadvise()
5260 NFSEXITCODE2(error, nd); in nfsrvd_ioadvise()
5264 NFSEXITCODE2(error, nd); in nfsrvd_ioadvise()
5272 nfsrvd_getdevinfo(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_getdevinfo() argument
5289 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_getdevinfo()
5306 nd->nd_repstat = NFSERR_NOENT; in nfsrvd_getdevinfo()
5311 nd->nd_repstat = nfsrv_getdevinfo(devid, layouttype, &maxcnt, in nfsrvd_getdevinfo()
5313 NFSD_DEBUG(4, "nfsrv_getdevinfo stat=%u\n", nd->nd_repstat); in nfsrvd_getdevinfo()
5314 if (nd->nd_repstat == 0) { in nfsrvd_getdevinfo()
5317 nfsm_strtom(nd, devaddr, devaddrlen); in nfsrvd_getdevinfo()
5327 } else if (nd->nd_repstat == NFSERR_TOOSMALL) { in nfsrvd_getdevinfo()
5332 NFSEXITCODE2(error, nd); in nfsrvd_getdevinfo()
5340 nfsrvd_teststateid(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_teststateid() argument
5351 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_teststateid()
5366 ret = nfsrv_teststateid(nd, tstateidp, p); in nfsrvd_teststateid()
5373 NFSEXITCODE2(error, nd); in nfsrvd_teststateid()
5381 nfsrvd_allocate(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_allocate() argument
5401 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_allocate()
5410 stp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_allocate()
5414 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_allocate()
5415 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_allocate()
5416 clientid.qval = nd->nd_clientid.qval; in nfsrvd_allocate()
5417 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_allocate()
5420 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_allocate()
5422 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_allocate()
5423 nd->nd_clientid.qval = clientid.qval; in nfsrvd_allocate()
5429 if ((nd->nd_flag & ND_DSSERVER) != 0) in nfsrvd_allocate()
5430 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_allocate()
5450 if (nd->nd_repstat == 0 && (len <= 0 || off < 0 || lop->lo_end > in nfsrvd_allocate()
5452 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_allocate()
5454 if (nd->nd_repstat == 0 && vp->v_type != VREG) in nfsrvd_allocate()
5455 nd->nd_repstat = NFSERR_WRONGTYPE; in nfsrvd_allocate()
5458 forat_ret = nfsvno_getattr(vp, &forat, nd, curthread, 1, &attrbits); in nfsrvd_allocate()
5459 if (nd->nd_repstat == 0) in nfsrvd_allocate()
5460 nd->nd_repstat = forat_ret; in nfsrvd_allocate()
5461 if (nd->nd_repstat == 0 && (forat.na_uid != nd->nd_cred->cr_uid || in nfsrvd_allocate()
5463 nd->nd_repstat = nfsvno_accchk(vp, VWRITE, nd->nd_cred, exp, in nfsrvd_allocate()
5466 if (nd->nd_repstat == 0 && gotproxystateid == 0) in nfsrvd_allocate()
5467 nd->nd_repstat = nfsrv_lockctrl(vp, &stp, &lop, NULL, clientid, in nfsrvd_allocate()
5468 &stateid, exp, nd, curthread); in nfsrvd_allocate()
5471 (intmax_t)off, (intmax_t)len, nd->nd_repstat); in nfsrvd_allocate()
5472 if (nd->nd_repstat == 0) in nfsrvd_allocate()
5473 nd->nd_repstat = nfsvno_allocate(vp, off, len, nd->nd_cred, in nfsrvd_allocate()
5476 nd->nd_repstat); in nfsrvd_allocate()
5478 NFSEXITCODE2(0, nd); in nfsrvd_allocate()
5482 NFSEXITCODE2(error, nd); in nfsrvd_allocate()
5490 nfsrvd_deallocate(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_deallocate() argument
5509 stp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_deallocate()
5513 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { in nfsrvd_deallocate()
5514 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_deallocate()
5515 clientid.qval = nd->nd_clientid.qval; in nfsrvd_deallocate()
5516 else if (nd->nd_clientid.qval != clientid.qval) in nfsrvd_deallocate()
5519 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsrvd_deallocate()
5521 nd->nd_flag |= ND_IMPLIEDCLID; in nfsrvd_deallocate()
5522 nd->nd_clientid.qval = clientid.qval; in nfsrvd_deallocate()
5528 if ((nd->nd_flag & ND_DSSERVER) != 0) in nfsrvd_deallocate()
5529 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_deallocate()
5555 if (nd->nd_repstat == 0) { in nfsrvd_deallocate()
5557 nd->nd_repstat = NFSERR_FBIG; in nfsrvd_deallocate()
5559 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_deallocate()
5562 if (nd->nd_repstat == 0 && vp->v_type != VREG) in nfsrvd_deallocate()
5563 nd->nd_repstat = NFSERR_WRONGTYPE; in nfsrvd_deallocate()
5566 forat_ret = nfsvno_getattr(vp, &forat, nd, curthread, 1, &attrbits); in nfsrvd_deallocate()
5567 if (nd->nd_repstat == 0) in nfsrvd_deallocate()
5568 nd->nd_repstat = forat_ret; in nfsrvd_deallocate()
5569 if (nd->nd_repstat == 0 && (forat.na_uid != nd->nd_cred->cr_uid || in nfsrvd_deallocate()
5571 nd->nd_repstat = nfsvno_accchk(vp, VWRITE, nd->nd_cred, exp, in nfsrvd_deallocate()
5574 if (nd->nd_repstat == 0 && gotproxystateid == 0) in nfsrvd_deallocate()
5575 nd->nd_repstat = nfsrv_lockctrl(vp, &stp, &lop, NULL, clientid, in nfsrvd_deallocate()
5576 &stateid, exp, nd, curthread); in nfsrvd_deallocate()
5578 if (nd->nd_repstat == 0) in nfsrvd_deallocate()
5579 nd->nd_repstat = nfsvno_deallocate(vp, off, len, nd->nd_cred, in nfsrvd_deallocate()
5582 NFSD_DEBUG(4, "eo deallocate=%d\n", nd->nd_repstat); in nfsrvd_deallocate()
5583 NFSEXITCODE2(0, nd); in nfsrvd_deallocate()
5587 NFSEXITCODE2(error, nd); in nfsrvd_deallocate()
5595 nfsrvd_copy_file_range(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_copy_file_range() argument
5618 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_copy_file_range()
5623 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_copy_file_range()
5632 instp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_copy_file_range()
5636 if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) in nfsrvd_copy_file_range()
5637 clientid.qval = nd->nd_clientid.qval; in nfsrvd_copy_file_range()
5643 outstp->ls_uid = nd->nd_cred->cr_uid; in nfsrvd_copy_file_range()
5669 if ((nd->nd_flag & ND_DSSERVER) != 0 || cnt != 0) in nfsrvd_copy_file_range()
5670 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_copy_file_range()
5671 if (nd->nd_repstat == 0 && (inoff > OFF_MAX || outoff > OFF_MAX || in nfsrvd_copy_file_range()
5675 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_copy_file_range()
5677 if (nd->nd_repstat == 0 && vp->v_type != VREG) in nfsrvd_copy_file_range()
5678 nd->nd_repstat = NFSERR_WRONGTYPE; in nfsrvd_copy_file_range()
5683 ret = nfsvno_getattr(vp, &at, nd, curthread, 1, &attrbits); in nfsrvd_copy_file_range()
5684 if (nd->nd_repstat == 0) in nfsrvd_copy_file_range()
5685 nd->nd_repstat = ret; in nfsrvd_copy_file_range()
5686 if (nd->nd_repstat == 0 && (at.na_uid != nd->nd_cred->cr_uid || in nfsrvd_copy_file_range()
5688 nd->nd_repstat = nfsvno_accchk(vp, VREAD, nd->nd_cred, exp, in nfsrvd_copy_file_range()
5691 if (nd->nd_repstat == 0) in nfsrvd_copy_file_range()
5692 nd->nd_repstat = nfsrv_lockctrl(vp, &instp, &inlop, NULL, in nfsrvd_copy_file_range()
5693 clientid, &stateid, exp, nd, curthread); in nfsrvd_copy_file_range()
5695 if (nd->nd_repstat != 0) in nfsrvd_copy_file_range()
5702 nd->nd_repstat = NFSERR_WRONGTYPE; in nfsrvd_copy_file_range()
5705 ret = nfsvno_getattr(tovp, &at, nd, curthread, 1, &attrbits); in nfsrvd_copy_file_range()
5706 if (nd->nd_repstat == 0) in nfsrvd_copy_file_range()
5707 nd->nd_repstat = ret; in nfsrvd_copy_file_range()
5708 if (nd->nd_repstat == 0 && (at.na_uid != nd->nd_cred->cr_uid || in nfsrvd_copy_file_range()
5710 nd->nd_repstat = nfsvno_accchk(tovp, VWRITE, nd->nd_cred, toexp, in nfsrvd_copy_file_range()
5713 if (nd->nd_repstat == 0) in nfsrvd_copy_file_range()
5714 nd->nd_repstat = nfsrv_lockctrl(tovp, &outstp, &outlop, NULL, in nfsrvd_copy_file_range()
5715 clientid, &stateid, toexp, nd, curthread); in nfsrvd_copy_file_range()
5719 if (nd->nd_repstat == 0) { in nfsrvd_copy_file_range()
5746 ret = nfsvno_getattr(vp, &at, nd, curthread, 1, NULL); in nfsrvd_copy_file_range()
5769 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_copy_file_range()
5773 if (ret != 0 && nd->nd_repstat == 0) in nfsrvd_copy_file_range()
5774 nd->nd_repstat = ret; in nfsrvd_copy_file_range()
5775 } else if (nd->nd_repstat == 0) in nfsrvd_copy_file_range()
5776 nd->nd_repstat = error; in nfsrvd_copy_file_range()
5788 if (nd->nd_repstat == 0) { in nfsrvd_copy_file_range()
5789 nd->nd_repstat = vn_copy_file_range(vp, &inoff, tovp, &outoff, in nfsrvd_copy_file_range()
5790 &xfer, COPY_FILE_RANGE_TIMEO1SEC, nd->nd_cred, nd->nd_cred, in nfsrvd_copy_file_range()
5792 if (nd->nd_repstat == 0) in nfsrvd_copy_file_range()
5802 if (nd->nd_repstat == 0) { in nfsrvd_copy_file_range()
5816 NFSEXITCODE2(error, nd); in nfsrvd_copy_file_range()
5821 NFSEXITCODE2(error, nd); in nfsrvd_copy_file_range()
5829 nfsrvd_seek(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_seek() argument
5850 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_seek()
5851 if (nd->nd_repstat == 0 && vp->v_type == VDIR) in nfsrvd_seek()
5852 nd->nd_repstat = NFSERR_ISDIR; in nfsrvd_seek()
5853 if (nd->nd_repstat == 0 && vp->v_type != VREG) in nfsrvd_seek()
5854 nd->nd_repstat = NFSERR_WRONGTYPE; in nfsrvd_seek()
5855 if (nd->nd_repstat == 0 && off < 0) in nfsrvd_seek()
5856 nd->nd_repstat = NFSERR_NXIO; in nfsrvd_seek()
5857 if (nd->nd_repstat == 0) { in nfsrvd_seek()
5861 nd->nd_repstat = nfsvno_getattr(vp, &at, nd, curthread, 1, in nfsrvd_seek()
5864 if (nd->nd_repstat == 0 && (at.na_uid != nd->nd_cred->cr_uid || in nfsrvd_seek()
5866 nd->nd_repstat = nfsvno_accchk(vp, VREAD, nd->nd_cred, exp, in nfsrvd_seek()
5869 if (nd->nd_repstat != 0) in nfsrvd_seek()
5873 nd->nd_repstat = nfsvno_seek(nd, vp, cmd, &off, content, &eof, in nfsrvd_seek()
5874 nd->nd_cred, curthread); in nfsrvd_seek()
5875 if (nd->nd_repstat == 0 && eof && content == NFSV4CONTENT_DATA && in nfsrvd_seek()
5877 nd->nd_repstat = NFSERR_NXIO; in nfsrvd_seek()
5878 if (nd->nd_repstat == 0) { in nfsrvd_seek()
5886 NFSEXITCODE2(error, nd); in nfsrvd_seek()
5890 NFSEXITCODE2(error, nd); in nfsrvd_seek()
5898 nfsrvd_getxattr(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_getxattr() argument
5912 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_getxattr()
5916 nd->nd_repstat = NFSERR_NOXATTR; in nfsrvd_getxattr()
5920 nd->nd_repstat = nfsrv_mtostr(nd, name, len); in nfsrvd_getxattr()
5921 if (nd->nd_repstat == 0) in nfsrvd_getxattr()
5922 nd->nd_repstat = nfsvno_getxattr(vp, name, in nfsrvd_getxattr()
5923 nd->nd_maxresp, nd->nd_cred, nd->nd_flag, in nfsrvd_getxattr()
5924 nd->nd_maxextsiz, p, &mp, &mpend, &len); in nfsrvd_getxattr()
5925 if (nd->nd_repstat == ENOATTR) in nfsrvd_getxattr()
5926 nd->nd_repstat = NFSERR_NOXATTR; in nfsrvd_getxattr()
5927 else if (nd->nd_repstat == EOPNOTSUPP) in nfsrvd_getxattr()
5928 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_getxattr()
5929 if (nd->nd_repstat == 0) { in nfsrvd_getxattr()
5933 nd->nd_mb->m_next = mp; in nfsrvd_getxattr()
5934 nd->nd_mb = mpend; in nfsrvd_getxattr()
5936 nd->nd_flag |= ND_EXTPG; in nfsrvd_getxattr()
5937 nd->nd_bextpg = mpend->m_epg_npgs - 1; in nfsrvd_getxattr()
5938 nd->nd_bpos = (char *)(void *) in nfsrvd_getxattr()
5939 PHYS_TO_DMAP(mpend->m_epg_pa[nd->nd_bextpg]); in nfsrvd_getxattr()
5940 off = (nd->nd_bextpg == 0) ? in nfsrvd_getxattr()
5942 nd->nd_bpos += off + mpend->m_epg_last_len; in nfsrvd_getxattr()
5943 nd->nd_bextpgsiz = PAGE_SIZE - in nfsrvd_getxattr()
5946 nd->nd_bpos = mtod(mpend, char *) + in nfsrvd_getxattr()
5953 if (nd->nd_repstat == 0) in nfsrvd_getxattr()
5954 nd->nd_repstat = error; in nfsrvd_getxattr()
5956 NFSEXITCODE2(0, nd); in nfsrvd_getxattr()
5964 nfsrvd_setxattr(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_setxattr() argument
5981 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_setxattr()
5985 nd->nd_repstat = NFSERR_NOXATTR; in nfsrvd_setxattr()
5989 error = nfsrv_mtostr(nd, name, len); in nfsrvd_setxattr()
5995 nd->nd_repstat = NFSERR_XATTR2BIG; in nfsrvd_setxattr()
6001 &siz, nd->nd_cred, p); in nfsrvd_setxattr()
6003 nd->nd_repstat = NFSERR_EXIST; in nfsrvd_setxattr()
6008 &siz, nd->nd_cred, p); in nfsrvd_setxattr()
6010 nd->nd_repstat = NFSERR_NOXATTR; in nfsrvd_setxattr()
6015 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_setxattr()
6017 if (nd->nd_repstat != 0) in nfsrvd_setxattr()
6023 nd->nd_repstat = nfsvno_getattr(vp, &ova, nd, p, 1, &attrbits); in nfsrvd_setxattr()
6024 if (nd->nd_repstat == 0) { in nfsrvd_setxattr()
6025 nd->nd_repstat = nfsvno_setxattr(vp, name, len, nd->nd_md, in nfsrvd_setxattr()
6026 nd->nd_dpos, nd->nd_cred, p); in nfsrvd_setxattr()
6027 if (nd->nd_repstat == ENXIO) in nfsrvd_setxattr()
6028 nd->nd_repstat = NFSERR_XATTR2BIG; in nfsrvd_setxattr()
6030 if (nd->nd_repstat == 0 && len > 0) in nfsrvd_setxattr()
6031 nd->nd_repstat = nfsm_advance(nd, NFSM_RNDUP(len), -1); in nfsrvd_setxattr()
6032 if (nd->nd_repstat == 0) in nfsrvd_setxattr()
6033 nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, &attrbits); in nfsrvd_setxattr()
6034 if (nd->nd_repstat == 0) { in nfsrvd_setxattr()
6043 if (nd->nd_repstat == 0) in nfsrvd_setxattr()
6044 nd->nd_repstat = error; in nfsrvd_setxattr()
6046 NFSEXITCODE2(0, nd); in nfsrvd_setxattr()
6054 nfsrvd_rmxattr(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_rmxattr() argument
6069 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_rmxattr()
6073 nd->nd_repstat = NFSERR_NOXATTR; in nfsrvd_rmxattr()
6077 error = nfsrv_mtostr(nd, name, len); in nfsrvd_rmxattr()
6081 if ((nd->nd_flag & ND_IMPLIEDCLID) == 0) { in nfsrvd_rmxattr()
6092 nd->nd_repstat = nfsvno_getattr(vp, &ova, nd, p, 1, &attrbits); in nfsrvd_rmxattr()
6093 if (nd->nd_repstat == 0) { in nfsrvd_rmxattr()
6094 nd->nd_repstat = nfsvno_rmxattr(nd, vp, name, nd->nd_cred, p); in nfsrvd_rmxattr()
6095 if (nd->nd_repstat == ENOATTR) in nfsrvd_rmxattr()
6096 nd->nd_repstat = NFSERR_NOXATTR; in nfsrvd_rmxattr()
6098 if (nd->nd_repstat == 0) in nfsrvd_rmxattr()
6099 nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, &attrbits); in nfsrvd_rmxattr()
6100 if (nd->nd_repstat == 0) { in nfsrvd_rmxattr()
6109 if (nd->nd_repstat == 0) in nfsrvd_rmxattr()
6110 nd->nd_repstat = error; in nfsrvd_rmxattr()
6112 NFSEXITCODE2(0, nd); in nfsrvd_rmxattr()
6120 nfsrvd_listxattr(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_listxattr() argument
6140 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_listxattr()
6143 if (len > nd->nd_maxresp - NFS_MAXXDR) in nfsrvd_listxattr()
6144 len = nd->nd_maxresp - NFS_MAXXDR; in nfsrvd_listxattr()
6146 nd->nd_repstat = nfsvno_listxattr(vp, cookie, nd->nd_cred, p, &buf, in nfsrvd_listxattr()
6148 if (nd->nd_repstat == EOPNOTSUPP) in nfsrvd_listxattr()
6149 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_listxattr()
6150 if (nd->nd_repstat == 0) { in nfsrvd_listxattr()
6153 nd->nd_repstat = NFSERR_BADXDR; in nfsrvd_listxattr()
6156 if (nd->nd_repstat == 0 && len2 < retlen) in nfsrvd_listxattr()
6157 nd->nd_repstat = NFSERR_TOOSMALL; in nfsrvd_listxattr()
6158 if (nd->nd_repstat == 0) { in nfsrvd_listxattr()
6177 nd->nd_repstat = NFSERR_INVAL; in nfsrvd_listxattr()
6192 retlen += nfsm_strtom(nd, &buf[pos + 1], i); in nfsrvd_listxattr()
6214 nd->nd_repstat = NFSERR_TOOSMALL; in nfsrvd_listxattr()
6219 if (nd->nd_repstat == 0) in nfsrvd_listxattr()
6220 nd->nd_repstat = error; in nfsrvd_listxattr()
6222 NFSEXITCODE2(0, nd); in nfsrvd_listxattr()
6230 nfsrvd_notsupp(struct nfsrv_descript *nd, __unused int isdgram, in nfsrvd_notsupp() argument
6234 nd->nd_repstat = NFSERR_NOTSUPP; in nfsrvd_notsupp()
6235 NFSEXITCODE2(0, nd); in nfsrvd_notsupp()