summaryrefslogtreecommitdiff
path: root/netfs/fuse/fuseApp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'netfs/fuse/fuseApp.cpp')
-rw-r--r--netfs/fuse/fuseApp.cpp36
1 files changed, 28 insertions, 8 deletions
diff --git a/netfs/fuse/fuseApp.cpp b/netfs/fuse/fuseApp.cpp
index 41f86ef..b6d59b1 100644
--- a/netfs/fuse/fuseApp.cpp
+++ b/netfs/fuse/fuseApp.cpp
@@ -2,11 +2,13 @@
#include "cache.impl.h"
#include "fuseDirs.h"
#include "fuseFiles.h"
+#include "fuseMappersImpl.h"
#include "lockHelpers.h"
#include <Glacier2/Router.h>
#include <boost/lexical_cast.hpp>
#include <compileTimeFormatter.h>
#include <cstring>
+#include <defaultMapper.h>
#include <entCache.h>
#include <safeMapFind.h>
#include <slicer/slicer.h>
@@ -17,10 +19,7 @@ namespace AdHoc {
template class CallCacheable<struct stat, std::string>;
}
-NetFS::FuseApp::FuseApp(Ice::StringSeq && a) :
- iceArgs(std::move(a)), sessionOpened(false), openHandleId(0), converter(userLookup, groupLookup)
-{
-}
+NetFS::FuseApp::FuseApp(Ice::StringSeq && a) : iceArgs(std::move(a)), sessionOpened(false), openHandleId(0) { }
NetFS::FuseApp::~FuseApp()
{
@@ -80,7 +79,11 @@ NetFS::FuseApp::init(struct fuse_conn_info *, struct fuse_config *)
fcr = configureFromFile(arg.substr(0, colon), arg.substr(colon + 1));
}
}
+ if (!fcr->Mapper) {
+ fcr->Mapper = std::make_shared<Mapping::DefaultMapper>();
+ }
BOOST_ASSERT(fcr);
+ converter.mapper = fcr->Mapper;
return this;
}
@@ -109,7 +112,26 @@ NetFS::FuseApp::configureFromUri(const std::string & uriString)
setting = boost::lexical_cast<std::remove_reference_t<decltype(setting)>>(p->second);
}
};
+ auto setWith = [&uri](const auto & param, auto & setting, auto && f) {
+ if (auto p = uri.query.find(param); p != uri.query.end()) {
+ setting = f(p->second);
+ }
+ };
set("async", r->Async);
+ setWith("mapper", r->Mapper, [&set, &setWith](auto && m) -> NetFS::Mapping::MapperPtr {
+ if (m == "hide") {
+ return std::make_shared<NetFS::Client::HideUnknownMapperImpl>();
+ }
+ else if (m == "mask") {
+ auto mi = std::make_shared<NetFS::Client::MaskUnknownMapperImpl>();
+ set("mapper.unknownuser", mi->UnknownUser);
+ set("mapper.unknowngroup", mi->UnknownGroup);
+ setWith("mapper.usermask", mi->UserMask, Client::from_octal);
+ setWith("mapper.groupmask", mi->GroupMask, Client::from_octal);
+ return mi;
+ }
+ return {};
+ });
return r;
}
@@ -274,8 +296,6 @@ NetFS::ReqEnv
NetFS::FuseApp::reqEnv()
{
struct fuse_context * c = fuse_get_context();
- NetFS::ReqEnv re;
- userLookup.getName(c->uid, &re.user);
- groupLookup.getName(c->gid, &re.grp);
- return re;
+ const auto t = converter.mapper->mapFileSystem(c->uid, c->gid);
+ return {t.username, t.groupname};
}