]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: require RestoreObject Days >= 1 67685/head
authorMatthew N. Heler <matthew.heler@hotmail.com>
Fri, 6 Mar 2026 01:11:19 +0000 (19:11 -0600)
committerMatthew N. Heler <matthew.heler@hotmail.com>
Fri, 17 Apr 2026 19:27:21 +0000 (14:27 -0500)
AWS S3 requires Days to be a positive non-zero integer. Parse Days as
a signed integer and validate in get_params() before any restore state
is modified, returning InvalidArgument for values less than 1.

Signed-off-by: Matthew N. Heler <matthew.heler@hotmail.com>
src/rgw/rgw_rest_s3.cc

index a90346b6886ad56e602f4bfd3a0308ce781e4333..92821498f8b704bf398df844e776275f2a4aa9cb 100644 (file)
@@ -3624,7 +3624,7 @@ int RGWPostObj_ObjStore_S3::get_encrypt_filter(
 }
 
 struct RestoreObjectRequest {
-  std::optional<uint64_t> days;
+  std::optional<int64_t> days;
 
   void decode_xml(XMLObj *obj) {
     RGWXMLDecoder::decode_xml("Days", days, obj);
@@ -3673,6 +3673,10 @@ int RGWRestoreObj_ObjStore_S3::get_params(optional_yield y)
   }
 
   if (request.days) {
+    if (request.days.value() < 1) {
+      s->err.message = "Days must be a positive integer";
+      return -EINVAL;
+    }
     expiry_days = request.days.value();
     ldpp_dout(this, 10) << "expiry_days=" << expiry_days << dendl;
   } else {