diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib/nfs/FileReader.cxx | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/lib/nfs/FileReader.cxx b/src/lib/nfs/FileReader.cxx index d2be46f8e..4837e1f0e 100644 --- a/src/lib/nfs/FileReader.cxx +++ b/src/lib/nfs/FileReader.cxx @@ -20,6 +20,7 @@ #include "config.h" #include "FileReader.hxx" #include "Glue.hxx" +#include "Base.hxx" #include "Connection.hxx" #include "Domain.hxx" #include "event/Call.hxx" @@ -100,14 +101,23 @@ NfsFileReader::Open(const char *uri, Error &error) server = std::string(uri, slash); uri = slash; - slash = strrchr(uri + 1, '/'); - if (slash == nullptr || slash[1] == 0) { - error.Set(nfs_domain, "Malformed nfs:// URI"); - return false; - } - export_name = std::string(uri, slash); - path = slash; + const char *new_path = nfs_check_base(server.c_str(), uri); + if (new_path != nullptr) { + export_name = std::string(uri, new_path); + if (*new_path == 0) + new_path = "/"; + path = new_path; + } else { + slash = strrchr(uri + 1, '/'); + if (slash == nullptr || slash[1] == 0) { + error.Set(nfs_domain, "Malformed nfs:// URI"); + return false; + } + + export_name = std::string(uri, slash); + path = slash; + } state = State::DEFER; DeferredMonitor::Schedule(); |