]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
add unlink, rmdir check_access
authorJashan Kamboj <jashank42@gmail.com>
Wed, 15 Jul 2015 13:43:19 +0000 (19:13 +0530)
committerSage Weil <sage@redhat.com>
Thu, 1 Oct 2015 13:39:31 +0000 (09:39 -0400)
Signed-off-by: Jashan Kamboj <jashank42@gmail.com>
src/mds/Server.cc

index 6d7f242648a2a772c826eabf7e9a1c8b73cef82b..fce3760ca207e5860fb703838ffb78b9b5e99827 100644 (file)
@@ -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);