]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/rgw/rgw_lc_s3.h
update sources to v12.2.1
[ceph.git] / ceph / src / rgw / rgw_lc_s3.h
index 53c5f7e8ba59eeaefc83d17f336a1f35c2a863c3..7ff1bf71ba5a69994db4df35b85c41aa048ff46f 100644 (file)
@@ -26,6 +26,25 @@ public:
   string& to_str() { return data; }
 };
 
+class LCFilter_S3 : public LCFilter, public XMLObj
+{
+ public:
+  ~LCFilter_S3() override {}
+  string& to_str() { return data; }
+  void to_xml(ostream& out){
+    out << "<Filter>";
+      if (!prefix.empty())
+        out << "<Prefix>" << prefix << "</Prefix>";
+    out << "</Filter>";
+  }
+  void dump_xml(Formatter *f) const {
+    f->open_object_section("Filter");
+    if (!prefix.empty())
+      encode_xml("Prefix", prefix, f);
+    f->close_section(); // Filter
+  }
+};
+
 class LCStatus_S3 : public XMLObj
 {
 public:
@@ -42,6 +61,14 @@ public:
   string& to_str() { return data; }
 };
 
+class LCDate_S3 : public XMLObj
+{
+public:
+  LCDate_S3() {}
+  ~LCDate_S3() override {}
+  string& to_str() { return data; }
+};
+
 class LCDeleteMarker_S3 : public XMLObj
 {
 public:
@@ -56,26 +83,33 @@ private:
   bool dm_expiration;
 public:
   LCExpiration_S3(): dm_expiration(false) {}
-  LCExpiration_S3(string _days, bool _dm_expiration) {
+  LCExpiration_S3(string _days, string _date, bool _dm_expiration) {
     days = _days;
+    date = _date;
     dm_expiration = _dm_expiration;
   }
   ~LCExpiration_S3() override {}
 
   bool xml_end(const char *el) override;
   void to_xml(ostream& out) {
+    out << "<Expiration>";
     if (dm_expiration) {
-      out << "<Expiration>" << "<ExpiredObjectDeleteMarker>" << "true" << "</ExpiredObjectDeleteMarker>" << "</Expiration>";
+      out << "<ExpiredObjectDeleteMarker>" << "true" << "</ExpiredObjectDeleteMarker>";
+    } else if (!days.empty()){
+      out << "<Days>" << days << "</Days>";
     } else {
-      out << "<Expiration>" << "<Days>" << days << "</Days>"<< "</Expiration>";
+      out << "<Date>" << date << "</Date>";
     }
+    out << "</Expiration>";
   }
   void dump_xml(Formatter *f) const {
     f->open_object_section("Expiration");
     if (dm_expiration) {
       encode_xml("ExpiredObjectDeleteMarker", "true", f);
-    } else {
+    } else if (!days.empty()) {
       encode_xml("Days", days, f);
+    } else {
+      encode_xml("Date", date, f);
     }
     f->close_section(); // Expiration
   }
@@ -135,10 +169,16 @@ public:
   void dump_xml(Formatter *f) const {
     f->open_object_section("Rule");
     encode_xml("ID", id, f);
-    encode_xml("Prefix", prefix, f);
+    // In case of an empty filter and an empty Prefix, we defer to Prefix.
+    if (!filter.empty()) {
+      const LCFilter_S3& lc_filter = static_cast<const LCFilter_S3&>(filter);
+      lc_filter.dump_xml(f);
+    } else {
+      encode_xml("Prefix", prefix, f);
+    }
     encode_xml("Status", status, f);
     if (!expiration.empty() || dm_expiration) {
-      LCExpiration_S3 expir(expiration.get_days_str(), dm_expiration);
+      LCExpiration_S3 expir(expiration.get_days_str(), expiration.get_date(), dm_expiration);
       expir.dump_xml(f);
     }
     if (!noncur_expiration.empty()) {
@@ -149,6 +189,7 @@ public:
       const LCMPExpiration_S3& mp_expir = static_cast<const LCMPExpiration_S3&>(mp_expiration);
       mp_expir.dump_xml(f);
     }
+
     f->close_section(); // Rule
   }
 };