From: Jashan Kamboj Date: Wed, 15 Jul 2015 13:43:19 +0000 (+0530) Subject: add unlink, rmdir check_access X-Git-Tag: v10.0.0~123^2~74 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3b42d576957336a0eafe40e4d4da46d65179d30d;p=ceph.git add unlink, rmdir check_access Signed-off-by: Jashan Kamboj --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 6d7f242648a2..fce3760ca207 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -5212,6 +5212,8 @@ void Server::handle_client_unlink(MDRequestRef& mdr) return; } + CInode *diri = dn->get_dir()->get_inode(); + CDentry::linkage_t *dnl = dn->get_linkage(client, mdr); assert(!dnl->is_null()); @@ -5260,8 +5262,8 @@ void Server::handle_client_unlink(MDRequestRef& mdr) for (int i=0; i<(int)trace.size()-1; i++) rdlocks.insert(&trace[i]->lock); xlocks.insert(&dn->lock); - wrlocks.insert(&dn->get_dir()->inode->filelock); - wrlocks.insert(&dn->get_dir()->inode->nestlock); + wrlocks.insert(&diri->filelock); + wrlocks.insert(&diri->nestlock); xlocks.insert(&in->linklock); if (straydn) { wrlocks.insert(&straydn->get_dir()->inode->filelock); @@ -5275,6 +5277,9 @@ void Server::handle_client_unlink(MDRequestRef& mdr) if (!mds->locker->acquire_locks(mdr, rdlocks, wrlocks, xlocks)) return; + if (!check_access(mdr, diri, MAY_WRITE)) + return; + if (in->is_dir() && _dir_is_nonempty(mdr, in)) { respond_to_request(mdr, -ENOTEMPTY);