]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgwlc: temporary logic to compensate for rgw::sal::Bucket::get_owner() always nullptr
authorMatt Benjamin <mbenjamin@redhat.com>
Thu, 23 Dec 2021 21:51:52 +0000 (16:51 -0500)
committerMatt Benjamin <mbenjamin@redhat.com>
Tue, 4 Jan 2022 20:30:40 +0000 (15:30 -0500)
(Acked by Daniel.)  Now with less use-after-free.

Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
src/rgw/rgw_lc.cc
src/rgw/rgw_sal.h

index 9af8422d6f290cf08428447fbd1c8e0638d1f49f..ea1609bdb9d4f14d28068c9732202f4f07acb974 100644 (file)
@@ -596,6 +596,17 @@ static int remove_expired_obj(
     return ret;
   }
 
+  // XXXX currently, rgw::sal::Bucket.owner is always null here
+  std::unique_ptr<rgw::sal::User> user;
+  if (! bucket->get_owner()) {
+    auto& bucket_info = bucket->get_info();
+    user = store->get_user(bucket_info.owner);
+    // forgive me, lord
+    if (user) {
+      bucket->set_owner(user.get());
+    }
+  }
+
   obj = bucket->get_object(obj_key);
   std::unique_ptr<rgw::sal::Object::DeleteOp> del_op
     = obj->get_delete_op(&oc.rctx);
index 6fd4c9c0f0bb697336a2baf9d2e6775de5c9c0a5..f138dea6a3137a174b5517c21fc407d717eed1f5 100644 (file)
@@ -638,6 +638,12 @@ class Bucket {
     virtual RGWAccessControlPolicy& get_acl(void) = 0;
     /** Set the ACL for this bucket */
     virtual int set_acl(const DoutPrefixProvider* dpp, RGWAccessControlPolicy& acl, optional_yield y) = 0;
+
+    // XXXX hack
+    void set_owner(rgw::sal::User* _owner) {
+      owner = _owner;
+    }
+
     /** Load this bucket from the backing store.  Requires the key to be set, fills other fields */
     virtual int load_bucket(const DoutPrefixProvider* dpp, optional_yield y) = 0;
     /** Read the bucket stats from the backing Store, synchronous */