diff --git a/src/fuse_readdir_cor.cpp b/src/fuse_readdir_cor.cpp index 4e82fcda..421871ee 100644 --- a/src/fuse_readdir_cor.cpp +++ b/src/fuse_readdir_cor.cpp @@ -120,7 +120,9 @@ namespace l concurrent_readdir(ThreadPool &tp_, const Branches::CPtr &branches_, const char *dirname_, - fuse_dirents_t *buf_) + fuse_dirents_t *buf_, + uid_t const uid_, + gid_t const gid_) { HashSet names; std::mutex names_mutex; @@ -130,9 +132,12 @@ namespace l for(auto const &branch : *branches_) { - auto func = [&]() + auto func = [&,dirname_,buf_,uid_,gid_]() { - std::string basepath = fs::path::make(branch.path,dirname_); + std::string basepath; + ugid::Set const ugid(uid_,gid_); + + basepath = fs::path::make(branch.path,dirname_); return l::readdir(basepath,names,names_mutex,buf_,dirents_mutex); }; @@ -169,13 +174,15 @@ namespace l readdir(ThreadPool &tp_, const Branches::CPtr &branches_, const char *dirname_, - fuse_dirents_t *buf_) + fuse_dirents_t *buf_, + uid_t const uid_, + gid_t const gid_) { std::vector rvs; fuse_dirents_reset(buf_); - rvs = l::concurrent_readdir(tp_,branches_,dirname_,buf_); + rvs = l::concurrent_readdir(tp_,branches_,dirname_,buf_,uid_,gid_); return l::calc_rv(rvs); } @@ -188,7 +195,11 @@ FUSE::ReadDirCOR::operator()(fuse_file_info_t const *ffi_, Config::Read cfg; DirInfo *di = reinterpret_cast(ffi_->fh); const fuse_context *fc = fuse_get_context(); - const ugid::Set ugid(fc->uid,fc->gid); - return l::readdir(_tp,cfg->branches,di->fusepath.c_str(),buf_); + return l::readdir(_tp, + cfg->branches, + di->fusepath.c_str(), + buf_, + fc->uid, + fc->gid); } diff --git a/src/fuse_readdir_cosr.cpp b/src/fuse_readdir_cosr.cpp index 6edbf7b0..801f3865 100644 --- a/src/fuse_readdir_cosr.cpp +++ b/src/fuse_readdir_cosr.cpp @@ -65,15 +65,20 @@ namespace l std::vector> opendir(ThreadPool &tp_, const Branches::CPtr &branches_, - char const *dirname_) + char const *dirname_, + uid_t const uid_, + gid_t const gid_) { std::vector> futures; for(auto const &branch : *branches_) { - auto func = [&branch,dirname_]() + auto func = [&branch,dirname_,uid_,gid_]() { - std::string basepath = fs::path::make(branch.path,dirname_); + std::string basepath; + ugid::Set const ugid(uid_,gid_); + + basepath = fs::path::make(branch.path,dirname_); return fs::opendir(basepath); }; @@ -146,14 +151,16 @@ namespace l readdir(ThreadPool &tp_, const Branches::CPtr &branches_, const char *dirname_, - fuse_dirents_t *buf_) + fuse_dirents_t *buf_, + uid_t const uid_, + gid_t const gid_) { int rv; std::vector> dh_futures; fuse_dirents_reset(buf_); - dh_futures = l::opendir(tp_,branches_,dirname_); + dh_futures = l::opendir(tp_,branches_,dirname_,uid_,gid_); rv = l::readdir(dh_futures,dirname_,buf_); return rv; @@ -167,7 +174,11 @@ FUSE::ReadDirCOSR::operator()(fuse_file_info_t const *ffi_, Config::Read cfg; DirInfo *di = reinterpret_cast(ffi_->fh); const fuse_context *fc = fuse_get_context(); - const ugid::Set ugid(fc->uid,fc->gid); - return l::readdir(_tp,cfg->branches,di->fusepath.c_str(),buf_); + return l::readdir(_tp, + cfg->branches, + di->fusepath.c_str(), + buf_, + fc->uid, + fc->gid); } diff --git a/src/fuse_readdir_seq.cpp b/src/fuse_readdir_seq.cpp index 67d2f43e..f1811c28 100644 --- a/src/fuse_readdir_seq.cpp +++ b/src/fuse_readdir_seq.cpp @@ -119,5 +119,7 @@ FUSE::ReadDirSeq::operator()(fuse_file_info_t const *ffi_, const fuse_context *fc = fuse_get_context(); const ugid::Set ugid(fc->uid,fc->gid); - return l::readdir(cfg->branches,di->fusepath.c_str(),buf_); + return l::readdir(cfg->branches, + di->fusepath.c_str(), + buf_); }