]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
uclient: Add cap dropping to setattr.
authorGreg Farnum <gregf@hq.newdream.net>
Wed, 23 Sep 2009 19:03:50 +0000 (12:03 -0700)
committerGreg Farnum <gregf@hq.newdream.net>
Fri, 25 Sep 2009 22:55:34 +0000 (15:55 -0700)
src/client/Client.cc

index cf09afafb3cc1602f3c8e353e4c5dff5502bd7c8..f08d8041f9f7131281223ef79d838a29c2629f58 100644 (file)
@@ -3342,20 +3342,41 @@ int Client::_setattr(Inode *in, struct stat_precise *attr, int mask, int uid, in
   in->make_path(path);
   req->set_filepath(path);
 
-  if (mask & CEPH_SETATTR_MODE)
+  if (mask & CEPH_SETATTR_MODE) {
     req->head.args.setattr.mode = attr->st_mode;
-  if (mask & CEPH_SETATTR_UID)
+    req->inode_drop |= CEPH_CAP_AUTH_SHARED;
+    req->inode = in;
+  }
+  if (mask & CEPH_SETATTR_UID) {
     req->head.args.setattr.uid = attr->st_uid;
-  if (mask & CEPH_SETATTR_GID)
+    req->inode_drop |= CEPH_CAP_AUTH_SHARED;
+    req->inode = in;
+  }
+  if (mask & CEPH_SETATTR_GID) {
     req->head.args.setattr.gid = attr->st_gid;
-  if (mask & CEPH_SETATTR_MTIME)
+    req->inode_drop |= CEPH_CAP_AUTH_SHARED;
+    req->inode = in;
+  }
+  if (mask & CEPH_SETATTR_MTIME) {
     req->head.args.setattr.mtime =
       utime_t(attr->st_mtime_sec, attr->st_mtime_micro);
-  if (mask & CEPH_SETATTR_ATIME)
+    req->inode_drop |= CEPH_CAP_AUTH_SHARED | CEPH_CAP_FILE_RD |
+      CEPH_CAP_FILE_WR;
+    req->inode = in;
+  }
+  if (mask & CEPH_SETATTR_ATIME) {
     req->head.args.setattr.atime =
       utime_t(attr->st_atime_sec, attr->st_atime_micro);
-  if (mask & CEPH_SETATTR_SIZE)
+    req->inode_drop |= CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_RD |
+      CEPH_CAP_FILE_WR;
+    req->inode = in;
+  }
+  if (mask & CEPH_SETATTR_SIZE) {
     req->head.args.setattr.size = attr->st_size;
+    req->inode_drop |= CEPH_CAP_AUTH_SHARED | CEPH_CAP_FILE_RD |
+      CEPH_CAP_FILE_WR;
+    req->inode = in;
+  }
   req->head.args.setattr.mask = mask;
 
   int res = make_request(req, uid, gid);