From c2cbb93c25d738fadf589bc99e83761bcebdedd5 Mon Sep 17 00:00:00 2001 From: Antonio SJ Musumeci Date: Thu, 29 Jan 2015 00:24:57 -0500 Subject: [PATCH] elevate privileges when calling clonepath. closes #41 --- src/create.cpp | 5 ++++- src/link.cpp | 6 +++++- src/mkdir.cpp | 5 ++++- src/mknod.cpp | 5 ++++- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/create.cpp b/src/create.cpp index 978fa55b..77dead4c 100644 --- a/src/create.cpp +++ b/src/create.cpp @@ -70,7 +70,10 @@ _create(const fs::SearchFunc searchFunc, return -errno; if(createpath[0].base != existingpath[0].base) - fs::clonepath(existingpath[0].base,createpath[0].base,dirname); + { + const mergerfs::ugid::SetResetGuard ugid(0,0); + fs::clonepath(existingpath[0].base,createpath[0].base,dirname); + } path = fs::make_path(createpath[0].base,fusepath); diff --git a/src/link.cpp b/src/link.cpp index 13c0f893..bc85de29 100644 --- a/src/link.cpp +++ b/src/link.cpp @@ -73,7 +73,11 @@ _link(const fs::SearchFunc searchFunc, fs::find::ffwp(srcmounts,todir,topaths); if(topaths.size() > 0) { - fs::clonepath(topaths[0].base,i->base,todir); + { + const mergerfs::ugid::SetResetGuard ugid(0,0); + fs::clonepath(topaths[0].base,i->base,todir); + } + lrv = ::link(pathfrom.c_str(),pathto.c_str()); } } diff --git a/src/mkdir.cpp b/src/mkdir.cpp index a6b7dd13..9ee2b36a 100644 --- a/src/mkdir.cpp +++ b/src/mkdir.cpp @@ -64,7 +64,10 @@ _mkdir(const fs::SearchFunc searchFunc, rv = createPathFunc(srcmounts,dirname,createpath); if(createpath[0].base != existingpath[0].base) - fs::clonepath(existingpath[0].base,createpath[0].base,dirname); + { + const mergerfs::ugid::SetResetGuard ugid(0,0); + fs::clonepath(existingpath[0].base,createpath[0].base,dirname); + } path = fs::make_path(createpath[0].base,fusepath); diff --git a/src/mknod.cpp b/src/mknod.cpp index 19f1f997..a5a4b005 100644 --- a/src/mknod.cpp +++ b/src/mknod.cpp @@ -66,7 +66,10 @@ _mknod(const fs::SearchFunc searchFunc, createPathFunc(srcmounts,dirname,createpath); if(existingpath[0].base != createpath[0].base) - fs::clonepath(existingpath[0].base,createpath[0].base,dirname); + { + const mergerfs::ugid::SetResetGuard ugid(0,0); + fs::clonepath(existingpath[0].base,createpath[0].base,dirname); + } path = fs::make_path(createpath[0].base,fusepath);