Lines Matching +full:trim +full:- +full:data +full:- +full:valid
1 /*-
2 * SPDX-License-Identifier: BSD-3-Clause
28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
40 * copy data between mbuf chains and uio lists.
119 * The first entry is the default error return and the rest are the valid
1273 * Trim tlen bytes off the end of the mbuf list and then ensure
1281 * mbufs are all expected to be non-empty.
1288 int i, lastlen, pgno, plen, tlen, trim; in nfsrv_adj() local
1299 tlen += m->m_len; in nfsrv_adj()
1300 if (m->m_next == NULL) in nfsrv_adj()
1302 m = m->m_next; in nfsrv_adj()
1306 if (len >= m->m_len) { in nfsrv_adj()
1307 /* Need to trim away the last mbuf(s). */ in nfsrv_adj()
1308 i = tlen - len; in nfsrv_adj()
1311 if (m->m_len >= i) in nfsrv_adj()
1313 i -= m->m_len; in nfsrv_adj()
1314 m = m->m_next; in nfsrv_adj()
1318 lastlen = m->m_len - len; in nfsrv_adj()
1326 if ((m->m_flags & M_EXTPG) != 0) { in nfsrv_adj()
1327 pgno = m->m_epg_npgs - 1; in nfsrv_adj()
1328 off = (pgno == 0) ? m->m_epg_1st_off : 0; in nfsrv_adj()
1330 if (m->m_len > lastlen) { in nfsrv_adj()
1331 /* Trim this mbuf. */ in nfsrv_adj()
1332 trim = m->m_len - lastlen; in nfsrv_adj()
1333 while (trim >= plen) { in nfsrv_adj()
1337 pg = PHYS_TO_VM_PAGE(m->m_epg_pa[pgno]); in nfsrv_adj()
1340 trim -= plen; in nfsrv_adj()
1341 m->m_epg_npgs--; in nfsrv_adj()
1342 pgno--; in nfsrv_adj()
1343 off = (pgno == 0) ? m->m_epg_1st_off : 0; in nfsrv_adj()
1346 plen -= trim; in nfsrv_adj()
1347 m->m_epg_last_len = plen; in nfsrv_adj()
1348 m->m_len = lastlen; in nfsrv_adj()
1350 cp = (char *)(void *)PHYS_TO_DMAP(m->m_epg_pa[pgno]); in nfsrv_adj()
1351 cp += off + plen - nul; in nfsrv_adj()
1353 m->m_len = lastlen; in nfsrv_adj()
1354 cp = mtod(m, char *) + m->m_len - nul; in nfsrv_adj()
1362 m2 = m->m_next; in nfsrv_adj()
1363 m->m_next = NULL; in nfsrv_adj()
1385 txdr_hyper(before_nvap->na_size, tl); in nfsrv_wcc()
1387 txdr_nfsv3time(&(before_nvap->na_mtime), tl); in nfsrv_wcc()
1389 txdr_nfsv3time(&(before_nvap->na_ctime), tl); in nfsrv_wcc()
1422 if (nd->nd_flag & ND_NFSV3) in nfsrv_fillattr()
1431 fp->fa_nlink = txdr_unsigned(nvap->na_nlink); in nfsrv_fillattr()
1432 fp->fa_uid = txdr_unsigned(nvap->na_uid); in nfsrv_fillattr()
1433 fp->fa_gid = txdr_unsigned(nvap->na_gid); in nfsrv_fillattr()
1434 if (nd->nd_flag & ND_NFSV3) { in nfsrv_fillattr()
1435 fp->fa_type = vtonfsv34_type(nvap->na_type); in nfsrv_fillattr()
1436 fp->fa_mode = vtonfsv34_mode(nvap->na_mode); in nfsrv_fillattr()
1437 txdr_hyper(nvap->na_size, (uint32_t*)&fp->fa3_size); in nfsrv_fillattr()
1438 txdr_hyper(nvap->na_bytes, (uint32_t*)&fp->fa3_used); in nfsrv_fillattr()
1439 fp->fa3_rdev.specdata1 = txdr_unsigned(NFSMAJOR(nvap->na_rdev)); in nfsrv_fillattr()
1440 fp->fa3_rdev.specdata2 = txdr_unsigned(NFSMINOR(nvap->na_rdev)); in nfsrv_fillattr()
1441 fp->fa3_fsid.nfsuquad[0] = 0; in nfsrv_fillattr()
1442 fp->fa3_fsid.nfsuquad[1] = txdr_unsigned(nvap->na_fsid); in nfsrv_fillattr()
1443 txdr_hyper(nvap->na_fileid, (uint32_t*)&fp->fa3_fileid); in nfsrv_fillattr()
1444 txdr_nfsv3time(&nvap->na_atime, &fp->fa3_atime); in nfsrv_fillattr()
1445 txdr_nfsv3time(&nvap->na_mtime, &fp->fa3_mtime); in nfsrv_fillattr()
1446 txdr_nfsv3time(&nvap->na_ctime, &fp->fa3_ctime); in nfsrv_fillattr()
1448 fp->fa_type = vtonfsv2_type(nvap->na_type); in nfsrv_fillattr()
1449 fp->fa_mode = vtonfsv2_mode(nvap->na_type, nvap->na_mode); in nfsrv_fillattr()
1450 fp->fa2_size = txdr_unsigned(nvap->na_size); in nfsrv_fillattr()
1451 fp->fa2_blocksize = txdr_unsigned(nvap->na_blocksize); in nfsrv_fillattr()
1452 if (nvap->na_type == VFIFO) in nfsrv_fillattr()
1453 fp->fa2_rdev = 0xffffffff; in nfsrv_fillattr()
1455 fp->fa2_rdev = txdr_unsigned(nvap->na_rdev); in nfsrv_fillattr()
1456 fp->fa2_blocks = txdr_unsigned(nvap->na_bytes / NFS_FABLKSIZE); in nfsrv_fillattr()
1457 fp->fa2_fsid = txdr_unsigned(nvap->na_fsid); in nfsrv_fillattr()
1458 fp->fa2_fileid = txdr_unsigned(nvap->na_fileid); in nfsrv_fillattr()
1459 txdr_nfsv2time(&nvap->na_atime, &fp->fa2_atime); in nfsrv_fillattr()
1460 txdr_nfsv2time(&nvap->na_mtime, &fp->fa2_mtime); in nfsrv_fillattr()
1461 txdr_nfsv2time(&nvap->na_ctime, &fp->fa2_ctime); in nfsrv_fillattr()
1479 if (nd->nd_flag & (ND_NFSV3 | ND_NFSV4)) { in nfsrv_mtofh()
1482 if (len == 0 && nfs_pubfhset && (nd->nd_flag & ND_NFSV3) && in nfsrv_mtofh()
1483 nd->nd_procnum == NFSPROC_LOOKUP) { in nfsrv_mtofh()
1484 nd->nd_flag |= ND_PUBLOOKUP; in nfsrv_mtofh()
1490 if (len == NFSX_V4PNFSFH && (nd->nd_flag & ND_NFSV41) != 0) { in nfsrv_mtofh()
1493 nd->nd_flag |= ND_DSSERVER; in nfsrv_mtofh()
1500 if (nd->nd_flag & ND_NFSV4) { in nfsrv_mtofh()
1502 error = nfsm_advance(nd, NFSM_RNDUP(len), -1); in nfsrv_mtofh()
1505 nd->nd_repstat = NFSERR_BADHANDLE; in nfsrv_mtofh()
1526 if ((nd->nd_flag & ND_NFSV2) && nfs_pubfhset && in nfsrv_mtofh()
1527 nd->nd_procnum == NFSPROC_LOOKUP && in nfsrv_mtofh()
1529 nd->nd_flag |= ND_PUBLOOKUP; in nfsrv_mtofh()
1532 NFSBCOPY(tl, (caddr_t)fhp->nfsrvfh_data, copylen); in nfsrv_mtofh()
1534 fhp->nfsrvfh_len = namedlen; in nfsrv_mtofh()
1536 fhp->nfsrvfh_len = copylen; in nfsrv_mtofh()
1546 * should be cleared. NFSPROC_NOOP is used to return errors when a valid
1555 if (!nd->nd_repstat) in nfsd_errmap()
1557 if ((nd->nd_repstat & NFSERR_AUTHERR) != 0) in nfsd_errmap()
1559 if (nd->nd_flag & (ND_NFSV3 | ND_NFSV4)) { in nfsd_errmap()
1560 if (nd->nd_procnum == NFSPROC_NOOP) in nfsd_errmap()
1561 return (txdr_unsigned(nd->nd_repstat & 0xffff)); in nfsd_errmap()
1562 if (nd->nd_flag & ND_NFSV3) in nfsd_errmap()
1563 errp = defaulterrp = nfsrv_v3errmap[nd->nd_procnum]; in nfsd_errmap()
1564 else if (nd->nd_repstat == EBADRPC) in nfsd_errmap()
1566 else if (nd->nd_repstat == NFSERR_MINORVERMISMATCH || in nfsd_errmap()
1567 nd->nd_repstat == NFSERR_OPILLEGAL) in nfsd_errmap()
1568 return (txdr_unsigned(nd->nd_repstat)); in nfsd_errmap()
1569 else if (nd->nd_repstat == NFSERR_REPLYFROMCACHE) in nfsd_errmap()
1571 else if ((nd->nd_flag & ND_NFSV41) != 0) { in nfsd_errmap()
1572 if (nd->nd_repstat == EOPNOTSUPP) in nfsd_errmap()
1573 nd->nd_repstat = NFSERR_NOTSUPP; in nfsd_errmap()
1574 nd->nd_repstat = nfsrv_isannfserr(nd->nd_repstat); in nfsd_errmap()
1575 return (txdr_unsigned(nd->nd_repstat)); in nfsd_errmap()
1577 errp = defaulterrp = nfsrv_v4errmap[nd->nd_procnum]; in nfsd_errmap()
1579 if (*errp == nd->nd_repstat) in nfsd_errmap()
1580 return (txdr_unsigned(nd->nd_repstat)); in nfsd_errmap()
1583 if (nd->nd_repstat <= NFSERR_REMOTE) in nfsd_errmap()
1584 return (txdr_unsigned(nfsrv_v2errmap[nd->nd_repstat - 1])); in nfsd_errmap()
1589 * Check to see if the error is a valid NFS one. If not, replace it with
1601 return (nfsrv_v2errmap[errval - 1]); in nfsrv_isannfserr()
1621 nvap->na_uid == NFSD_VNET(nfsrv_defaultuid) && in nfsrv_checkuidgid()
1624 nvap->na_gid == NFSD_VNET(nfsrv_defaultgid) && in nfsrv_checkuidgid()
1629 if (nd->nd_cred->cr_uid == 0) in nfsrv_checkuidgid()
1631 if ((NFSVNO_ISSETUID(nvap) && nvap->na_uid != nd->nd_cred->cr_uid) || in nfsrv_checkuidgid()
1633 !groupmember(nvap->na_gid, nd->nd_cred))) in nfsrv_checkuidgid()
1661 if ((nd->nd_flag & ND_NFSV4) == 0) in nfsrv_fixattr()
1665 tuid = nd->nd_cred->cr_uid; in nfsrv_fixattr()
1668 nvap->na_uid != nd->nd_cred->cr_uid) { in nfsrv_fixattr()
1669 if (nd->nd_cred->cr_uid == 0) { in nfsrv_fixattr()
1670 nva.na_uid = nvap->na_uid; in nfsrv_fixattr()
1679 nva.na_atime = nvap->na_atime; in nfsrv_fixattr()
1685 nva.na_mtime = nvap->na_mtime; in nfsrv_fixattr()
1691 if (groupmember(nvap->na_gid, nd->nd_cred)) { in nfsrv_fixattr()
1692 nd->nd_cred->cr_uid = 0; in nfsrv_fixattr()
1693 nva.na_gid = nvap->na_gid; in nfsrv_fixattr()
1701 error = nfsvno_setattr(vp, &nva, nd->nd_cred, p, exp); in nfsrv_fixattr()
1707 NFSVNO_ISSETSIZE(nvap) && nvap->na_size != (u_quad_t)0) { in nfsrv_fixattr()
1713 if (aclp->acl_cnt > 0) { in nfsrv_fixattr()
1714 error = nfsrv_setacl(vp, aclp, nd->nd_cred, p); in nfsrv_fixattr()
1722 nd->nd_cred->cr_uid = tuid; in nfsrv_fixattr()
1729 * Translate an ASCII hex digit to it's binary value. Return -1 if the
1738 return (c - '0'); in nfsrv_hexdigit()
1740 return (c - 'a' + ((char)10)); in nfsrv_hexdigit()
1742 return (c - 'A' + ((char)10)); in nfsrv_hexdigit()
1743 /* Not valid ! */ in nfsrv_hexdigit()
1846 *tl = txdr_unsigned(refp->nfr_srvcnt); in nfsrv_putreferralattr()
1848 cp = refp->nfr_srvlist; in nfsrv_putreferralattr()
1849 for (i = 0; i < refp->nfr_srvcnt; i++) { in nfsrv_putreferralattr()
1855 len = cp2 - cp; in nfsrv_putreferralattr()
1863 len = cp2 - cp; in nfsrv_putreferralattr()
1873 txdr_hyper(refp->nfr_dfileno, tl); in nfsrv_putreferralattr()
1907 if ((nd->nd_flag & ND_NFSV4) && (nd->nd_procnum == NFSV4OP_LOOKUPP || in nfsrv_parsename()
1908 nd->nd_procnum == NFSV4OP_SECINFONONAME)) { in nfsrv_parsename()
1921 nd->nd_repstat = NFSERR_NAMETOL; in nfsrv_parsename()
1925 nd->nd_repstat = NFSERR_INVAL; in nfsrv_parsename()
1933 fromcp = nd->nd_dpos; in nfsrv_parsename()
1934 md = nd->nd_md; in nfsrv_parsename()
1935 rem = mtod(md, caddr_t) + md->m_len - fromcp; in nfsrv_parsename()
1938 md = md->m_next; in nfsrv_parsename()
1944 rem = md->m_len; in nfsrv_parsename()
1947 nd->nd_repstat = EACCES; in nfsrv_parsename()
1956 if (nd->nd_flag & ND_PUBLOOKUP) { in nfsrv_parsename()
1962 * pubtype == 1 -> native path in nfsrv_parsename()
1963 * pubtype == 2 -> canonical path in nfsrv_parsename()
1984 nd->nd_repstat = EACCES; in nfsrv_parsename()
1992 * percent == 1 -> indicates "get first hex digit" in nfsrv_parsename()
1993 * percent == 2 -> indicates "get second hex digit" in nfsrv_parsename()
1998 nd->nd_repstat = EACCES; in nfsrv_parsename()
2017 if ((len - i) < 3) { in nfsrv_parsename()
2018 nd->nd_repstat = EACCES; in nfsrv_parsename()
2034 if (nd->nd_flag & ND_NFSV4) in nfsrv_parsename()
2035 nd->nd_repstat = NFSERR_BADNAME; in nfsrv_parsename()
2037 nd->nd_repstat = EACCES; in nfsrv_parsename()
2046 rem--; in nfsrv_parsename()
2048 nd->nd_md = md; in nfsrv_parsename()
2049 nd->nd_dpos = fromcp; in nfsrv_parsename()
2050 i = NFSM_RNDUP(len) - len; in nfsrv_parsename()
2053 nd->nd_dpos += i; in nfsrv_parsename()
2063 * also check for non-utf8 strings. in nfsrv_parsename()
2065 if (nd->nd_flag & ND_NFSV4) { in nfsrv_parsename()
2069 nd->nd_repstat = NFSERR_BADNAME; in nfsrv_parsename()
2075 nd->nd_repstat = NFSERR_INVAL; in nfsrv_parsename()
2138 if ((nd->nd_flag & ND_NFSV41) != 0) in nfsd_checkrootexp()
2140 if ((nd->nd_flag & (ND_GSS | ND_EXAUTHSYS)) == ND_EXAUTHSYS) in nfsd_checkrootexp()
2142 if ((nd->nd_flag & (ND_GSSINTEGRITY | ND_EXGSSINTEGRITY)) == in nfsd_checkrootexp()
2145 if ((nd->nd_flag & (ND_GSSPRIVACY | ND_EXGSSPRIVACY)) == in nfsd_checkrootexp()
2148 if ((nd->nd_flag & (ND_GSS | ND_GSSINTEGRITY | ND_GSSPRIVACY | in nfsd_checkrootexp()
2153 if ((nd->nd_flag & ND_EXTLS) == 0) in nfsd_checkrootexp()
2155 if ((nd->nd_flag & (ND_TLSCERTUSER | ND_EXTLSCERTUSER)) == in nfsd_checkrootexp()
2158 if ((nd->nd_flag & (ND_TLSCERT | ND_EXTLSCERT | ND_EXTLSCERTUSER)) == in nfsd_checkrootexp()
2161 if ((nd->nd_flag & (ND_TLS | ND_EXTLSCERTUSER | ND_EXTLSCERT)) == in nfsd_checkrootexp()
2166 if ((nd->nd_flag & ND_TLS) == 0) in nfsd_checkrootexp()
2182 int error = 0, taglen = -1; in nfsd_getminorvers()
2202 nd->nd_flag |= ND_NFSV41; in nfsd_getminorvers()
2204 nd->nd_flag |= (ND_NFSV41 | ND_NFSV42); in nfsd_getminorvers()
2209 taglen = -1; in nfsd_getminorvers()