]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: x-amz-date change breaks certain cases of aws sig v4. 48313/head
authorMarcus Watts <mwatts@redhat.com>
Wed, 10 Aug 2022 19:56:19 +0000 (15:56 -0400)
committerKonstantin Shalygin <k0ste@k0ste.ru>
Fri, 30 Sep 2022 10:46:24 +0000 (17:46 +0700)
Once upon a time, x-amz-date strings were in rfc 2616 format, and most
s3 clients are written to make this style of timestamp.  The current protocol
standard specifies iso 8601 timestamps (yyyymmddThhmmssZ), and client
libraries are changing to use this new format.

This change does two things: firstly, if the date parse fails, it logs
the actual offending timestamp for later analysis.  Secondly, if rfc
2616 fails, it tries iso 8601.  The new timestamp is tried secondarily,
because that lgoic also emits a (less useful) error message, which should
not be spamnificated for valid rfc 2616 timestamps.

Fixes: https://tracker.ceph.com/issues/57094
Signed-off-by: Marcus Watts <mwatts@redhat.com>
(cherry picked from commit 70ba760f42766fe1075fc3f999e0393a2091b6e0)

src/rgw/rgw_auth_s3.cc

index 6fa6e651e50cad95847e26e94cfeddf95ddfb5c6..d8dc60f7e984304b6bdcf83af6727dfc03ee20b1 100644 (file)
@@ -217,8 +217,9 @@ bool rgw_create_s3_canonical_header(const DoutPrefixProvider *dpp,
 
     if (header_time) {
       struct tm t;
-      if (!parse_rfc2616(req_date, &t)) {
-        ldpp_dout(dpp, 0) << "NOTICE: failed to parse date for auth header" << dendl;
+      uint32_t ns = 0;
+      if (!parse_rfc2616(req_date, &t) && !parse_iso8601(req_date, &t, &ns, false)) {
+        ldpp_dout(dpp, 0) << "NOTICE: failed to parse date <" << req_date << "> for auth header" << dendl;
         return false;
       }
       if (t.tm_year < 70) {