]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: the S3's local v2 auth engine becomes a fallback conditionally.
authorRadoslaw Zarzynski <rzarzynski@mirantis.com>
Sat, 18 Mar 2017 15:16:02 +0000 (16:16 +0100)
committerRadoslaw Zarzynski <rzarzynski@mirantis.com>
Fri, 24 Mar 2017 21:45:28 +0000 (22:45 +0100)
Signed-off-by: Radoslaw Zarzynski <rzarzynski@mirantis.com>
src/rgw/rgw_auth.h
src/rgw/rgw_auth_s3.h

index fb72c5c5351cb078630b4afa1b0b48f699929f05..b7346f65f5b1e609cb2ee28d3f2814282562d741 100644 (file)
@@ -305,6 +305,10 @@ public:
 
   Engine::result_t authenticate(const req_state* s) const override final;
 
+  bool is_empty() const {
+    return auth_stack.empty();
+  }
+
 private:
   /* Using the reference wrapper here to explicitly point out we are not
    * interested in storing nulls while preserving the dynamic polymorphism. */
index 4e0fa6fb0ae5c5f317892c14b06c6e8bbe93708c..cbc0bee69af0c1fea710c9fd44e59ff7fb534009 100644 (file)
@@ -105,10 +105,18 @@ public:
       external_engines(cct, store, &extractor),
       local_engine(cct, store, extractor,
                    static_cast<rgw::auth::LocalApplier::Factory*>(this)) {
-    add_engine(Control::SUFFICIENT, external_engines);
+
+    Control local_engine_mode;
+    if (! external_engines.is_empty()) {
+      add_engine(Control::SUFFICIENT, external_engines);
+
+      local_engine_mode = Control::FALLBACK;
+    } else {
+      local_engine_mode = Control::SUFFICIENT;
+    }
 
     if (cct->_conf->rgw_s3_auth_use_rados) {
-      add_engine(Control::FALLBACK, local_engine);
+      add_engine(local_engine_mode, local_engine);
     }
   }