]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: permit logging of list-bucket (and any other no-bucket op) 39933/head
authorMatt Benjamin <mbenjamin@redhat.com>
Tue, 9 Mar 2021 02:57:57 +0000 (21:57 -0500)
committerMatt Benjamin <mbenjamin@redhat.com>
Thu, 26 Aug 2021 14:39:01 +0000 (10:39 -0400)
This limitation is from inception (2011), but just recently reported by
a site using ops-log for system audit.

Fixes: https://tracker.ceph.com/issues/49313
Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
src/rgw/rgw_log.cc

index 9c9e70b1cf626bf40a797513fbdc750f2f45f966..6226f279403083e0a98717375ae1a72b4c06d9d5 100644 (file)
@@ -367,32 +367,33 @@ int rgw_log_op(rgw::sal::Store* store, RGWREST* const rest, struct req_state *s,
     return 0;
 
   if (s->bucket_name.empty()) {
-    ldpp_dout(s, 5) << "nothing to log for operation" << dendl;
-    return -EINVAL;
-  }
-  if (s->err.ret == -ERR_NO_SUCH_BUCKET || rgw::sal::Bucket::empty(s->bucket.get())) {
-    if (!s->cct->_conf->rgw_log_nonexistent_bucket) {
-      ldpp_dout(s, 5) << "bucket " << s->bucket_name << " doesn't exist, not logging" << dendl;
-      return 0;
-    }
-    bucket_id = "";
+    /* this case is needed for, e.g., list_buckets */
   } else {
-    bucket_id = s->bucket->get_bucket_id();
-  }
-  entry.bucket = rgw_make_bucket_entry_name(s->bucket_tenant, s->bucket_name);
+    if (s->err.ret == -ERR_NO_SUCH_BUCKET ||
+       rgw::sal::Bucket::empty(s->bucket.get())) {
+      if (!s->cct->_conf->rgw_log_nonexistent_bucket) {
+       ldout(s->cct, 5) << "bucket " << s->bucket_name << " doesn't exist, not logging" << dendl;
+       return 0;
+      }
+      bucket_id = "";
+    } else {
+      bucket_id = s->bucket->get_bucket_id();
+    }
+    entry.bucket = rgw_make_bucket_entry_name(s->bucket_tenant, s->bucket_name);
 
-  if (check_utf8(entry.bucket.c_str(), entry.bucket.size()) != 0) {
-    ldpp_dout(s, 5) << "not logging op on bucket with non-utf8 name" << dendl;
-    return 0;
-  }
+    if (check_utf8(entry.bucket.c_str(), entry.bucket.size()) != 0) {
+      ldpp_dout(s, 5) << "not logging op on bucket with non-utf8 name" << dendl;
+      return 0;
+    }
 
-  if (!rgw::sal::Object::empty(s->object.get())) {
-    entry.obj = s->object->get_key();
-  } else {
-    entry.obj = rgw_obj_key("-");
-  }
+    if (!rgw::sal::Object::empty(s->object.get())) {
+      entry.obj = s->object->get_key();
+    } else {
+      entry.obj = rgw_obj_key("-");
+    }
 
-  entry.obj_size = s->obj_size;
+    entry.obj_size = s->obj_size;
+  } /* !bucket empty */
 
   if (s->cct->_conf->rgw_remote_addr_param.length())
     set_param_str(s, s->cct->_conf->rgw_remote_addr_param.c_str(),