diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2020-09-06 00:17:45 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2020-09-06 00:17:45 +0100 |
commit | 1cd8302a4ba6e4553738a1547de37af12a6aa35f (patch) | |
tree | 7d8af97c33993f72a2e1b697d9c2abc40aa97b9d /netfs/fuse/fuseMappersImpl.cpp | |
parent | Support mapper rejection signalled by 0 st_mode (diff) | |
download | netfs-1cd8302a4ba6e4553738a1547de37af12a6aa35f.tar.bz2 netfs-1cd8302a4ba6e4553738a1547de37af12a6aa35f.tar.xz netfs-1cd8302a4ba6e4553738a1547de37af12a6aa35f.zip |
Add the HideUnknown mapper
This mapper hides inodes for which the user and/or group cannot be mapped to local entries
Diffstat (limited to 'netfs/fuse/fuseMappersImpl.cpp')
-rw-r--r-- | netfs/fuse/fuseMappersImpl.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/netfs/fuse/fuseMappersImpl.cpp b/netfs/fuse/fuseMappersImpl.cpp new file mode 100644 index 0000000..9a99eca --- /dev/null +++ b/netfs/fuse/fuseMappersImpl.cpp @@ -0,0 +1,36 @@ +#include "fuseMappersImpl.h" +#include <entCache.h> + +namespace NetFS::Client { + HideUnknownMapperImpl::HideUnknownMapperImpl() : + HideUnknownMapperImpl(std::make_shared<EntCache<User>>(), std::make_shared<EntCache<Group>>()) + { + } + + HideUnknownMapperImpl::HideUnknownMapperImpl(EntryResolverPtr<User> u, EntryResolverPtr<Group> g) : + users(std::move(u)), groups(std::move(g)) + { + } + + Mapping::FileSystem + HideUnknownMapperImpl::mapTransport(const std::string & un, const std::string & gn) + { + auto u = users->getEntry(un); + auto g = groups->getEntry(gn); + if (!u || !g) { + return {0, 0, 0xFFFFFFF}; + } + return {static_cast<int>(u->id), static_cast<int>(g->id), 0}; + } + + Mapping::Transport + HideUnknownMapperImpl::mapFileSystem(int uid, int gid) + { + auto u = users->getEntry(uid); + auto g = groups->getEntry(gid); + if (!u || !g) { + throw NetFS::SystemError(EPERM); + } + return {u->name, g->name, 0}; + } +} |