summaryrefslogtreecommitdiff
path: root/netfs/daemon/daemonVolume.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'netfs/daemon/daemonVolume.cpp')
-rw-r--r--netfs/daemon/daemonVolume.cpp7
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) {