]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/keystone: EC2Engine uses reject() for ERR_SIGNATURE_NO_MATCH 53680/head
authorCasey Bodley <cbodley@redhat.com>
Tue, 26 Sep 2023 16:16:52 +0000 (12:16 -0400)
committerCasey Bodley <cbodley@redhat.com>
Tue, 26 Sep 2023 16:16:54 +0000 (12:16 -0400)
ERR_SIGNATURE_NO_MATCH means that we found the given access key in
keystone, so we should use reject() instead of deny() to prevent
other engines like LocalEngine from looking up the access key again

this change causes us to return the SignatureDoesNotMatch error expected
by s3test case test_list_buckets_bad_auth()

Fixes: https://tracker.ceph.com/issues/62989
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_auth_keystone.cc

index 123d94e6e550b76d873d1633ea1c42d62b03313f..1d810ca6856f0c911bd6b1ca5de2e093fce14265 100644 (file)
@@ -673,6 +673,12 @@ rgw::auth::Engine::result_t EC2Engine::authenticate(
   auto [t, secret_key, failure_reason] =
     get_access_token(dpp, access_key_id, string_to_sign, signature, signature_factory);
   if (! t) {
+    if (failure_reason == -ERR_SIGNATURE_NO_MATCH) {
+      // we looked up a secret but it didn't generate the same signature as
+      // the client. since we found this access key in keystone, we should
+      // reject the request instead of trying other engines
+      return result_t::reject(failure_reason);
+    }
     return result_t::deny(failure_reason);
   }