Lines Matching refs:req

480 static struct fuse* get_fuse(fuse_req_t req) {  in get_fuse()  argument
481 return reinterpret_cast<struct fuse*>(fuse_req_userdata(req)); in get_fuse()
546 const std::string& path, const std::string& name, fuse_req_t req, int* error_code, in validate_node_path() argument
548 struct fuse* fuse = get_fuse(req); in validate_node_path()
549 const struct fuse_ctx* ctx = fuse_req_ctx(req); in validate_node_path()
588 fuse->mp->FileLookup(path, req->ctx.uid, req->ctx.pid); in validate_node_path()
607 static node* make_node_entry(fuse_req_t req, node* parent, const string& name, in make_node_entry() argument
610 struct fuse* fuse = get_fuse(req); in make_node_entry()
611 const struct fuse_ctx* ctx = fuse_req_ctx(req); in make_node_entry()
617 validate_node_path(path, name, req, error_code, e, op); in make_node_entry()
670 TRACE_NODE(node, req); in make_node_entry()
888 static bool is_user_accessible_path(fuse_req_t req, const struct fuse* fuse, const string& path) { in is_user_accessible_path() argument
898 !fuse->mp->ShouldAllowLookup(req->ctx.uid, userId)) { in is_user_accessible_path()
905 static node* do_lookup(fuse_req_t req, fuse_ino_t parent, const char* name, in do_lookup() argument
908 struct fuse* fuse = get_fuse(req); in do_lookup()
919 !is_app_accessible_path(fuse, parent_path, req->ctx.uid)) { in do_lookup()
924 TRACE_NODE(parent_node, req); in do_lookup()
928 if (validate_access && !is_user_accessible_path(req, fuse, child_path)) { in do_lookup()
933 auto node = make_node_entry(req, parent_node, name, parent_path, child_path, e, error_code, op); in do_lookup()
951 static void pf_lookup(fuse_req_t req, fuse_ino_t parent, const char* name) { in pf_lookup() argument
957 if (do_lookup(req, parent, name, &e, &error_code, FuseOp::lookup, true, &backing_fd)) { in pf_lookup()
958 fuse_reply_entry(req, &e); in pf_lookup()
961 fuse_reply_err(req, error_code); in pf_lookup()
967 static void pf_lookup_postfilter(fuse_req_t req, fuse_ino_t parent, uint32_t error_in, in pf_lookup_postfilter() argument
970 struct fuse* fuse = get_fuse(req); in pf_lookup_postfilter()
975 fuse_reply_err(req, ENOENT); in pf_lookup_postfilter()
979 TRACE_NODE(parent_node, req); in pf_lookup_postfilter()
982 !fuse->mp->isUidAllowedAccessToDataOrObbPath(req->ctx.uid, path)) { in pf_lookup_postfilter()
983 fuse_reply_err(req, ENOENT); in pf_lookup_postfilter()
992 fuse_reply_buf(req, (const char*)&buf, sizeof(buf)); in pf_lookup_postfilter()
995 static void do_forget(fuse_req_t req, struct fuse* fuse, fuse_ino_t ino, uint64_t nlookup) { in do_forget() argument
997 TRACE_NODE(node, req); in do_forget()
1006 static void pf_forget(fuse_req_t req, fuse_ino_t ino, uint64_t nlookup) { in pf_forget() argument
1010 struct fuse* fuse = get_fuse(req); in pf_forget()
1012 do_forget(req, fuse, ino, nlookup); in pf_forget()
1013 fuse_reply_none(req); in pf_forget()
1016 static void pf_forget_multi(fuse_req_t req, in pf_forget_multi() argument
1020 struct fuse* fuse = get_fuse(req); in pf_forget_multi()
1023 do_forget(req, fuse, forgets[i].ino, forgets[i].nlookup); in pf_forget_multi()
1025 fuse_reply_none(req); in pf_forget_multi()
1028 static void pf_fallocate(fuse_req_t req, fuse_ino_t ino, int mode, off_t offset, off_t length, in pf_fallocate() argument
1031 struct fuse* fuse = get_fuse(req); in pf_fallocate()
1035 fuse_reply_err(req, err ? errno : 0); in pf_fallocate()
1038 static void pf_getattr(fuse_req_t req, in pf_getattr() argument
1042 struct fuse* fuse = get_fuse(req); in pf_getattr()
1045 fuse_reply_err(req, ENOENT); in pf_getattr()
1049 if (!is_app_accessible_path(fuse, path, req->ctx.uid)) { in pf_getattr()
1050 fuse_reply_err(req, ENOENT); in pf_getattr()
1053 TRACE_NODE(node, req); in pf_getattr()
1058 fuse_reply_err(req, errno); in pf_getattr()
1060 fuse_reply_attr(req, &s, in pf_getattr()
1065 static void pf_setattr(fuse_req_t req, in pf_setattr() argument
1071 struct fuse* fuse = get_fuse(req); in pf_setattr()
1074 fuse_reply_err(req, ENOENT); in pf_setattr()
1078 if (!is_app_accessible_path(fuse, path, req->ctx.uid)) { in pf_setattr()
1079 fuse_reply_err(req, ENOENT); in pf_setattr()
1089 const struct fuse_ctx* ctx = fuse_req_ctx(req); in pf_setattr()
1095 fuse_reply_err(req, EFAULT); in pf_setattr()
1100 fuse_reply_err(req, EACCES); in pf_setattr()
1105 TRACE_NODE(node, req); in pf_setattr()
1119 fuse_reply_err(req, errno); in pf_setattr()
1149 TRACE_NODE(node, req); in pf_setattr()
1158 fuse_reply_err(req, errno); in pf_setattr()
1164 fuse_reply_attr(req, attr, fuse->ShouldNotCache(path) ? 0 : std::numeric_limits<double>::max()); in pf_setattr()
1167 static void pf_canonical_path(fuse_req_t req, fuse_ino_t ino) in pf_canonical_path() argument
1169 struct fuse* fuse = get_fuse(req); in pf_canonical_path()
1173 if (node && is_app_accessible_path(fuse, path, req->ctx.uid)) { in pf_canonical_path()
1175 fuse_reply_canonical_path(req, path.c_str()); in pf_canonical_path()
1178 fuse_reply_err(req, ENOENT); in pf_canonical_path()
1181 static void pf_mknod(fuse_req_t req, in pf_mknod() argument
1187 struct fuse* fuse = get_fuse(req); in pf_mknod()
1190 fuse_reply_err(req, ENOENT); in pf_mknod()
1194 if (!is_app_accessible_path(fuse, parent_path, req->ctx.uid)) { in pf_mknod()
1195 fuse_reply_err(req, ENOENT); in pf_mknod()
1199 TRACE_NODE(parent_node, req); in pf_mknod()
1205 fuse_reply_err(req, errno); in pf_mknod()
1211 if (make_node_entry(req, parent_node, name, parent_path, child_path, &e, &error_code, in pf_mknod()
1213 fuse_reply_entry(req, &e); in pf_mknod()
1216 fuse_reply_err(req, error_code); in pf_mknod()
1220 static void pf_mkdir(fuse_req_t req, in pf_mkdir() argument
1225 struct fuse* fuse = get_fuse(req); in pf_mkdir()
1228 fuse_reply_err(req, ENOENT); in pf_mkdir()
1231 const struct fuse_ctx* ctx = fuse_req_ctx(req); in pf_mkdir()
1234 fuse_reply_err(req, ENOENT); in pf_mkdir()
1238 TRACE_NODE(parent_node, req); in pf_mkdir()
1244 fuse_reply_err(req, status); in pf_mkdir()
1250 fuse_reply_err(req, errno); in pf_mkdir()
1256 if (make_node_entry(req, parent_node, name, parent_path, child_path, &e, &error_code, in pf_mkdir()
1258 fuse_reply_entry(req, &e); in pf_mkdir()
1261 fuse_reply_err(req, error_code); in pf_mkdir()
1265 static void pf_unlink(fuse_req_t req, fuse_ino_t parent, const char* name) { in pf_unlink() argument
1267 struct fuse* fuse = get_fuse(req); in pf_unlink()
1270 fuse_reply_err(req, ENOENT); in pf_unlink()
1273 const struct fuse_ctx* ctx = fuse_req_ctx(req); in pf_unlink()
1276 fuse_reply_err(req, ENOENT); in pf_unlink()
1280 TRACE_NODE(parent_node, req); in pf_unlink()
1286 fuse_reply_err(req, status); in pf_unlink()
1292 fuse_reply_err(req, 0); in pf_unlink()
1295 static void pf_rmdir(fuse_req_t req, fuse_ino_t parent, const char* name) { in pf_rmdir() argument
1297 struct fuse* fuse = get_fuse(req); in pf_rmdir()
1300 fuse_reply_err(req, ENOENT); in pf_rmdir()
1304 if (!is_app_accessible_path(fuse, parent_path, req->ctx.uid)) { in pf_rmdir()
1305 fuse_reply_err(req, ENOENT); in pf_rmdir()
1312 fuse_reply_err(req, ENOENT); in pf_rmdir()
1316 TRACE_NODE(parent_node, req); in pf_rmdir()
1320 int status = fuse->mp->IsDeletingDirAllowed(child_path, req->ctx.uid); in pf_rmdir()
1322 fuse_reply_err(req, status); in pf_rmdir()
1327 fuse_reply_err(req, errno); in pf_rmdir()
1332 TRACE_NODE(child_node, req); in pf_rmdir()
1337 fuse_reply_err(req, 0); in pf_rmdir()
1346 static int do_rename(fuse_req_t req, fuse_ino_t parent, const char* name, fuse_ino_t new_parent, in do_rename() argument
1349 struct fuse* fuse = get_fuse(req); in do_rename()
1357 const struct fuse_ctx* ctx = fuse_req_ctx(req); in do_rename()
1392 TRACE_NODE(old_parent_node, req); in do_rename()
1393 TRACE_NODE(new_parent_node, req); in do_rename()
1404 const int res = fuse->mp->Rename(old_child_path, new_child_path, req->ctx.uid); in do_rename()
1419 static void pf_rename(fuse_req_t req, fuse_ino_t parent, const char* name, fuse_ino_t new_parent, in pf_rename() argument
1421 int res = do_rename(req, parent, name, new_parent, new_name, flags); in pf_rename()
1422 fuse_reply_err(req, res); in pf_rename()
1496 static bool do_passthrough_enable(fuse_req_t req, struct fuse_file_info* fi, unsigned int fd) { in do_passthrough_enable() argument
1497 int passthrough_fh = fuse_passthrough_enable(req, fd); in do_passthrough_enable()
1546 static void pf_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info* fi) { in pf_open() argument
1548 struct fuse* fuse = get_fuse(req); in pf_open()
1551 fuse_reply_err(req, ENOENT); in pf_open()
1554 const struct fuse_ctx* ctx = fuse_req_ctx(req); in pf_open()
1558 fuse_reply_err(req, ENOENT); in pf_open()
1565 TRACE_NODE(node, req) << "write with transforms"; in pf_open()
1567 TRACE_NODE(node, req) << (open_info.for_write ? "write" : "read"); in pf_open()
1578 fuse_reply_err(req, EFAULT); in pf_open()
1583 fuse_reply_err(req, result->status); in pf_open()
1591 TRACE_NODE(node, req) << "opened in Java"; in pf_open()
1595 fuse_reply_err(req, errno); in pf_open()
1612 if (h->passthrough && !do_passthrough_enable(req, fi, fd)) { in pf_open()
1615 fuse_reply_err(req, EFAULT); in pf_open()
1619 fuse_reply_open(req, fi); in pf_open()
1622 static void do_read(fuse_req_t req, size_t size, off_t off, struct fuse_file_info* fi, in do_read() argument
1634 fuse_reply_data(req, &buf, (enum fuse_buf_copy_flags)FUSE_BUF_NO_SPLICE); in do_read()
1636 fuse_reply_data(req, &buf, (enum fuse_buf_copy_flags)0); in do_read()
1664 static void do_read_with_redaction(fuse_req_t req, size_t size, off_t off, fuse_file_info* fi, in do_read_with_redaction() argument
1673 do_read(req, size, off, fi, direct_io); in do_read_with_redaction()
1692 create_mem_fuse_buf(range.size, &(bufvec.buf[i]), get_fuse(req)); in do_read_with_redaction()
1698 fuse_reply_data(req, &bufvec, static_cast<fuse_buf_copy_flags>(0)); in do_read_with_redaction()
1701 static void pf_read(fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, in pf_read() argument
1709 struct fuse* fuse = get_fuse(req); in pf_read()
1715 node->GetTransformsReason(), req->ctx.uid, h->uid, in pf_read()
1717 fuse_reply_err(req, EFAULT); in pf_read()
1726 do_read_with_redaction(req, size, off, fi, direct_io); in pf_read()
1728 do_read(req, size, off, fi, direct_io); in pf_read()
1740 static void pf_write_buf(fuse_req_t req, in pf_write_buf() argument
1749 struct fuse* fuse = get_fuse(req); in pf_write_buf()
1758 fuse_reply_err(req, -size); in pf_write_buf()
1763 fuse_reply_write(req, size); in pf_write_buf()
1768 static void pf_copy_file_range(fuse_req_t req, fuse_ino_t ino_in,
1790 fuse_reply_err(req, -size);
1793 fuse_reply_write(req, size);
1807 static void pf_flush(fuse_req_t req, in pf_flush() argument
1811 struct fuse* fuse = get_fuse(req); in pf_flush()
1812 TRACE_NODE(nullptr, req) << "noop"; in pf_flush()
1813 fuse_reply_err(req, 0); in pf_flush()
1816 static void pf_release(fuse_req_t req, in pf_release() argument
1820 struct fuse* fuse = get_fuse(req); in pf_release()
1824 TRACE_NODE(node, req); in pf_release()
1831 fuse_reply_err(req, 0); in pf_release()
1841 static void pf_fsync(fuse_req_t req, in pf_fsync() argument
1849 fuse_reply_err(req, err); in pf_fsync()
1852 static void pf_fsyncdir(fuse_req_t req, in pf_fsyncdir() argument
1859 fuse_reply_err(req, err); in pf_fsyncdir()
1862 static void pf_opendir(fuse_req_t req, in pf_opendir() argument
1866 struct fuse* fuse = get_fuse(req); in pf_opendir()
1869 fuse_reply_err(req, ENOENT); in pf_opendir()
1872 const struct fuse_ctx* ctx = fuse_req_ctx(req); in pf_opendir()
1875 fuse_reply_err(req, ENOENT); in pf_opendir()
1879 TRACE_NODE(node, req); in pf_opendir()
1883 fuse_reply_err(req, status); in pf_opendir()
1889 fuse_reply_err(req, errno); in pf_opendir()
1897 fuse_reply_open(req, fi); in pf_opendir()
1902 static void do_readdir_common(fuse_req_t req, in do_readdir_common() argument
1908 struct fuse* fuse = get_fuse(req); in do_readdir_common()
1920 fuse_reply_err(req, ENOENT); in do_readdir_common()
1924 if (!is_app_accessible_path(fuse, path, req->ctx.uid)) { in do_readdir_common()
1925 fuse_reply_err(req, ENOENT); in do_readdir_common()
1929 TRACE_NODE(node, req); in do_readdir_common()
1933 if (!is_user_accessible_path(req, fuse, path)) { in do_readdir_common()
1934 fuse_reply_buf(req, buf, used); in do_readdir_common()
1943 h->de = fuse->mp->GetDirectoryEntries(req->ctx.uid, path, h->d); in do_readdir_common()
1957 fuse_reply_err(req, h->de[0]->d_type); in do_readdir_common()
1968 if (do_lookup(req, ino, de->d_name.c_str(), &e, &error_code, FuseOp::readdir, false)) { in do_readdir_common()
1969 entry_size = fuse_add_direntry_plus(req, buf + used, len - used, de->d_name.c_str(), in do_readdir_common()
1977 fuse_reply_err(req, error_code); in do_readdir_common()
1986 entry_size = fuse_add_direntry(req, buf + used, len - used, de->d_name.c_str(), &e.attr, in do_readdir_common()
1997 do_forget(req, fuse, e.ino, 1); in do_readdir_common()
2003 fuse_reply_buf(req, buf, used); in do_readdir_common()
2006 static void pf_readdir(fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, in pf_readdir() argument
2009 do_readdir_common(req, ino, size, off, fi, false); in pf_readdir()
2016 static void pf_readdir_postfilter(fuse_req_t req, fuse_ino_t ino, uint32_t error_in, off_t off_in, in pf_readdir_postfilter() argument
2019 struct fuse* fuse = get_fuse(req); in pf_readdir_postfilter()
2029 fuse_reply_err(req, ENOENT); in pf_readdir_postfilter()
2033 TRACE_NODE(node, req); in pf_readdir_postfilter()
2052 ((stats.st_mode & 0001) || ((stats.st_mode & 0010) && req->ctx.gid == stats.st_gid) || in pf_readdir_postfilter()
2053 ((stats.st_mode & 0100) && req->ctx.uid == stats.st_uid) || in pf_readdir_postfilter()
2054 fuse->mp->isUidAllowedAccessToDataOrObbPath(req->ctx.uid, child_path) || in pf_readdir_postfilter()
2064 fuse_reply_buf(req, buf, sizeof(*fro) + used); in pf_readdir_postfilter()
2067 static void pf_readdirplus(fuse_req_t req, in pf_readdirplus() argument
2073 do_readdir_common(req, ino, size, off, fi, true); in pf_readdirplus()
2076 static void pf_releasedir(fuse_req_t req, in pf_releasedir() argument
2080 struct fuse* fuse = get_fuse(req); in pf_releasedir()
2085 TRACE_NODE(node, req); in pf_releasedir()
2090 fuse_reply_err(req, 0); in pf_releasedir()
2093 static void pf_statfs(fuse_req_t req, fuse_ino_t ino) { in pf_statfs() argument
2096 struct fuse* fuse = get_fuse(req); in pf_statfs()
2099 fuse_reply_err(req, errno); in pf_statfs()
2101 fuse_reply_statfs(req, &st); in pf_statfs()
2126 static void pf_access(fuse_req_t req, fuse_ino_t ino, int mask) { in pf_access() argument
2128 struct fuse* fuse = get_fuse(req); in pf_access()
2132 fuse_reply_err(req, ENOENT); in pf_access()
2136 if (path != PRIMARY_VOLUME_PREFIX && !is_app_accessible_path(fuse, path, req->ctx.uid)) { in pf_access()
2137 fuse_reply_err(req, ENOENT); in pf_access()
2140 TRACE_NODE(node, req); in pf_access()
2145 fuse_reply_err(req, res ? errno : 0); in pf_access()
2151 fuse_reply_err(req, ENOENT); in pf_access()
2164 fuse_reply_err(req, res ? errno : 0); in pf_access()
2167 status = fuse->mp->IsOpendirAllowed(path, req->ctx.uid, for_write); in pf_access()
2171 fuse_reply_err(req, EACCES); in pf_access()
2176 path, path, req->ctx.uid, req->ctx.pid, node->GetTransformsReason(), for_write, in pf_access()
2185 fuse_reply_err(req, status); in pf_access()
2188 static void pf_create(fuse_req_t req, in pf_create() argument
2194 struct fuse* fuse = get_fuse(req); in pf_create()
2197 fuse_reply_err(req, ENOENT); in pf_create()
2201 if (!is_app_accessible_path(fuse, parent_path, req->ctx.uid)) { in pf_create()
2202 fuse_reply_err(req, ENOENT); in pf_create()
2206 TRACE_NODE(parent_node, req); in pf_create()
2212 int mp_return_code = fuse->mp->InsertFile(child_path.c_str(), req->ctx.uid); in pf_create()
2214 fuse_reply_err(req, mp_return_code); in pf_create()
2224 fuse->mp->DeleteFile(child_path.c_str(), req->ctx.uid); in pf_create()
2225 fuse_reply_err(req, error_code); in pf_create()
2231 node* node = make_node_entry(req, parent_node, name, parent_path, child_path, &e, &error_code, in pf_create()
2233 TRACE_NODE(node, req); in pf_create()
2236 fuse_reply_err(req, error_code); in pf_create()
2249 fuse, child_path, fd, req->ctx.uid, 0 /* transforms_uid */, node, new RedactionInfo(), in pf_create()
2256 if (h->passthrough && !do_passthrough_enable(req, fi, fd)) { in pf_create()
2258 fuse_reply_err(req, EFAULT); in pf_create()
2262 fuse_reply_create(req, &e, fi); in pf_create()