diff options
Diffstat (limited to 'netfs/daemon/daemonVolume.cpp')
-rw-r--r-- | netfs/daemon/daemonVolume.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/netfs/daemon/daemonVolume.cpp b/netfs/daemon/daemonVolume.cpp index bdd899b..6a3c7fe 100644 --- a/netfs/daemon/daemonVolume.cpp +++ b/netfs/daemon/daemonVolume.cpp @@ -113,12 +113,15 @@ VolumeServer::link(const NetFS::ReqEnv re, std::string path1, std::string path2, } void -VolumeServer::rename(const NetFS::ReqEnv re, std::string from, std::string to, const Ice::Current &) +VolumeServer::rename(const NetFS::ReqEnv re, std::string from, std::string to, const Ice::optional<Ice::Int> flags, const Ice::Current &) { ModeCheck mc(re, root, userLookup, groupLookup); errno = 0; - std::filesystem::path f(resolvePath(std::move(from))); std::filesystem::path t(resolvePath(std::move(to))); + if (flags && *flags == RENAME_NOREPLACE && ::access(t.c_str(), F_OK) == 0) { + throw NetFS::SystemError(EEXIST); + } + std::filesystem::path f(resolvePath(std::move(from))); mc.AssertWriteParent(f); mc.AssertWriteParent(t); if (::rename(f.c_str(), t.c_str()) != 0) { |