From eff9c2c3055fdf900b7ad690b23eb53cd086608b Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 15 Feb 2016 20:10:51 +0000 Subject: Enforce O_EXCL on create --- netfs/daemon/daemonVolume.cpp | 2 +- netfs/unittests/testCore.cpp | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/netfs/daemon/daemonVolume.cpp b/netfs/daemon/daemonVolume.cpp index 2d67272..e4c65bd 100644 --- a/netfs/daemon/daemonVolume.cpp +++ b/netfs/daemon/daemonVolume.cpp @@ -262,7 +262,7 @@ VolumeServer::create(const NetFS::ReqEnv & re, const std::string & path, Ice::In errno = 0; boost::filesystem::path p(resolvePath(path)); mc.AssertWriteParent(p); - int fd = ::open(p.c_str(), O_CREAT | flags, mode); + int fd = ::open(p.c_str(), O_CREAT | O_EXCL | flags, mode); if (fd == -1) { throw NetFS::SystemError(errno); } diff --git a/netfs/unittests/testCore.cpp b/netfs/unittests/testCore.cpp index 9610111..e933027 100644 --- a/netfs/unittests/testCore.cpp +++ b/netfs/unittests/testCore.cpp @@ -122,14 +122,12 @@ BOOST_AUTO_TEST_CASE( testSandboxing ) BOOST_REQUIRE(!boost::filesystem::exists(binDir / "outside")); BOOST_REQUIRE_EQUAL(fuse->create("/../sub/../outside", 0666, &fi), -EPERM); BOOST_REQUIRE(!boost::filesystem::exists(binDir / "outside")); - int fd = fuse->create("/inside", 0666, &fi); - BOOST_REQUIRE(fd >= 0); - fuse->release("/inside", &fi); - BOOST_REQUIRE(boost::filesystem::exists(binDir / testExport / "inside")); - int fd2 = fuse->create("inside", 0666, &fi); - BOOST_REQUIRE(fd2 >= 0); - fuse->release("inside", &fi); + BOOST_REQUIRE_EQUAL(fuse->create("/inside", 0666, &fi), 0); + BOOST_REQUIRE_EQUAL(fuse->release("/inside", &fi), 0); BOOST_REQUIRE(boost::filesystem::exists(binDir / testExport / "inside")); + BOOST_REQUIRE_EQUAL(fuse->create("inside2", 0666, &fi), 0); + BOOST_REQUIRE_EQUAL(fuse->release("inside2", &fi), 0); + BOOST_REQUIRE(boost::filesystem::exists(binDir / testExport / "inside2")); } int -- cgit v1.2.3