bool LCExpiration_S3::xml_end(const char * el) {
LCDays_S3 *lc_days = static_cast<LCDays_S3 *>(find_first("Days"));
LCDeleteMarker_S3 *lc_dm = static_cast<LCDeleteMarker_S3 *>(find_first("ExpiredObjectDeleteMarker"));
+ LCDate_S3 *lc_date = static_cast<LCDate_S3 *>(find_first("Date"));
- if ((!lc_days && !lc_dm) || (lc_days && lc_dm)) {
+ if ((!lc_days && !lc_dm && !lc_date) || (lc_days && lc_dm)
+ || (lc_days && lc_date) || (lc_dm && lc_date)) {
return false;
}
if (lc_days) {
if (!dm_expiration) {
return false;
}
+ } else {
+ date = lc_date->get_data();
+ //We need return xml error according to S3
+ if (boost::none == ceph::from_iso_8601(date)) {
+ return false;
+ }
}
return true;
}
return false;
} else {
if (lc_expiration) {
- if (!lc_expiration->empty()) {
+ if (lc_expiration->has_days()) {
expiration.set_days(lc_expiration->get_days_str());
+ } else if (lc_expiration->has_date()) {
+ expiration.set_date(lc_expiration->get_date());
} else {
dm_expiration = lc_expiration->get_dm_expiration();
}
out << "<Prefix>" << prefix << "</Prefix>";
out << "<Status>" << status << "</Status>";
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.to_xml(out);
}
if (!noncur_expiration.empty()) {
if (ret < 0)
return ret;
}
- if (!dest.validate()) {
+ if (!dest.valid()) {
ret = -ERR_INVALID_REQUEST;
}
return ret;
obj = new LCExpiration_S3();
} else if (strcmp(el, "Days") == 0) {
obj = new LCDays_S3();
+ } else if (strcmp(el, "Date") == 0) {
+ obj = new LCDate_S3();
} else if (strcmp(el, "ExpiredObjectDeleteMarker") == 0) {
obj = new LCDeleteMarker_S3();
} else if (strcmp(el, "NoncurrentVersionExpiration") == 0) {