diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2020-09-20 20:01:05 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2020-09-20 20:01:05 +0100 |
commit | 015916c14997b355d63a7189380fe89ae9bbe3bd (patch) | |
tree | 2e0ef24a0ba08887bd95e6bca855496c1cba6338 /netfs/fuse | |
parent | Move not template functions out of impl.h (diff) | |
download | netfs-015916c14997b355d63a7189380fe89ae9bbe3bd.tar.bz2 netfs-015916c14997b355d63a7189380fe89ae9bbe3bd.tar.xz netfs-015916c14997b355d63a7189380fe89ae9bbe3bd.zip |
Support for configuring new mappers in fuse client
Diffstat (limited to 'netfs/fuse')
-rw-r--r-- | netfs/fuse/fuseApp.cpp | 16 | ||||
-rw-r--r-- | netfs/fuse/fuseConfig.ice | 3 | ||||
-rw-r--r-- | netfs/fuse/fuseMappers.ice | 12 | ||||
-rw-r--r-- | netfs/fuse/fuseMappersImpl.cpp | 18 | ||||
-rw-r--r-- | netfs/fuse/fuseMappersImpl.h | 3 |
5 files changed, 41 insertions, 11 deletions
diff --git a/netfs/fuse/fuseApp.cpp b/netfs/fuse/fuseApp.cpp index ff1585a..04602aa 100644 --- a/netfs/fuse/fuseApp.cpp +++ b/netfs/fuse/fuseApp.cpp @@ -79,11 +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>(); + if (!fcr->Mapper) { + fcr->Mapper = std::make_shared<Mapping::DefaultMapper>(); } BOOST_ASSERT(fcr); - converter.mapper = fcr->mapper; + converter.mapper = fcr->Mapper; return this; } @@ -118,10 +118,18 @@ NetFS::FuseApp::configureFromUri(const std::string & uriString) } }; set("async", r->Async); - setWith("mapper", r->mapper, [](auto && m) -> NetFS::Mapping::MapperPtr { + 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; diff --git a/netfs/fuse/fuseConfig.ice b/netfs/fuse/fuseConfig.ice index 2d2bf9f..ea489ac 100644 --- a/netfs/fuse/fuseConfig.ice +++ b/netfs/fuse/fuseConfig.ice @@ -22,7 +22,8 @@ module NetFS { ["slicer:name:async"] bool Async = false; - Mapping::Mapper mapper; + ["slicer:name:mapper"] + Mapping::Mapper Mapper; }; ["slicer:key:name","slicer:value:resource","slicer:item:resource"] diff --git a/netfs/fuse/fuseMappers.ice b/netfs/fuse/fuseMappers.ice index 582aa16..0eb5ea5 100644 --- a/netfs/fuse/fuseMappers.ice +++ b/netfs/fuse/fuseMappers.ice @@ -3,16 +3,20 @@ ["slicer:include:fuseMappersImpl.h"] module NetFS { module Client { - ["slicer:implementation:NetFS.Client.HideUnknownMapperImpl"] + ["slicer:implementation:NetFS.Client.HideUnknownMapperImpl","slicer:typename:hide"] local class HideUnknownMapper extends Mapping::Mapper { }; - ["slicer:implementation:NetFS.Client.MaskUnknownMapperImpl"] + ["slicer:implementation:NetFS.Client.MaskUnknownMapperImpl","slicer:typename:mask"] local class MaskUnknownMapper extends Mapping::Mapper { + ["slicer:name:unknownuser"] string UnknownUser = "nobody"; + ["slicer:name:unknowngroup"] string UnknownGroup = "nogroup"; - int MaskUser = 0700; - int MaskGroup = 0070; + ["slicer:name:usermask","slicer:conversion:std.string:NetFS.Client.from_octal:NetFS.Client.to_octal:nodeclare"] + int UserMask = 0700; + ["slicer:name:groupmask","slicer:conversion:std.string:NetFS.Client.from_octal:NetFS.Client.to_octal:nodeclare"] + int GroupMask = 0070; }; }; }; diff --git a/netfs/fuse/fuseMappersImpl.cpp b/netfs/fuse/fuseMappersImpl.cpp index 5bde752..c7fef9e 100644 --- a/netfs/fuse/fuseMappersImpl.cpp +++ b/netfs/fuse/fuseMappersImpl.cpp @@ -42,8 +42,8 @@ namespace NetFS::Client { } return e; }; - auto u = apply(users, un, UnknownUser, MaskUser); - auto g = apply(groups, gn, UnknownGroup, MaskGroup); + auto u = apply(users, un, UnknownUser, UserMask); + auto g = apply(groups, gn, UnknownGroup, GroupMask); return {static_cast<int>(u->id), static_cast<int>(g->id), mask}; } @@ -57,4 +57,18 @@ namespace NetFS::Client { } return {u->name, g->name, 0}; } + + Ice::Int + from_octal(const std::string & in) + { + return std::stoi(in, nullptr, 8); + } + + std::string + to_octal(const Ice::Int & in) + { + std::stringstream s; + s << std::oct << in; + return s.str(); + } } diff --git a/netfs/fuse/fuseMappersImpl.h b/netfs/fuse/fuseMappersImpl.h index 2bcf579..fd9e2aa 100644 --- a/netfs/fuse/fuseMappersImpl.h +++ b/netfs/fuse/fuseMappersImpl.h @@ -9,6 +9,9 @@ namespace NetFS { namespace Client { + std::string to_octal(const Ice::Int &); + Ice::Int from_octal(const std::string &); + class DLL_PUBLIC HideUnknownMapperImpl : public HideUnknownMapper, Mapping::BaseMapper { public: using BaseMapper::BaseMapper; |