]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: conditionally allow non-unique email addresses 28716/head
authorMatt Benjamin <mbenjamin@redhat.com>
Thu, 30 May 2019 15:15:23 +0000 (11:15 -0400)
committerNathan Cutler <ncutler@suse.com>
Mon, 24 Jun 2019 13:38:24 +0000 (15:38 +0200)
Conditionally allow non-unique email address values for builtin
RGW users.

Fixes: http://tracker.ceph.com/issues/40089
Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
(cherry picked from commit 974791522007cca6d8fb30e83677f0ddd7c4e71d)

Conflicts:
    src/rgw/rgw_user.cc
- changed '_conf.get_val<bool>' to '_conf->get_val<bool>'

src/common/options.cc
src/rgw/rgw_user.cc

index 8710b57672e60581c7ee7aa28b7402bdb8270b4c..8bbf94dcdf91b6f6dc19ae9e8568a3885aaaef8f 100644 (file)
@@ -6036,6 +6036,14 @@ std::vector<Option> get_rgw_options() {
         "server static websites if s3website hostnames are configured, and unrelated to "
         "this configurable."),
 
+     Option("rgw_user_unique_email", Option::TYPE_BOOL, Option::LEVEL_BASIC)
+    .set_default(true)
+    .set_description("Require local RGW users to have unique email addresses")
+    .set_long_description(
+        "Enforce builtin user accounts to have unique email addresses.  This "
+       "setting is historical.  In future, non-enforcement of email address "
+        "uniqueness is likely to become the default."),
+
     Option("rgw_log_http_headers", Option::TYPE_STR, Option::LEVEL_BASIC)
     .set_default("")
     .set_description("List of HTTP headers to log")
index 7be5ca4e445dda980094fc228df9d06682d63811..ca0be3582308018910328e2c8bb2132e0c826b05 100644 (file)
@@ -1761,9 +1761,11 @@ int RGWUser::init(RGWUserAdminOpState& op_state)
     found = (rgw_get_user_info_by_uid(store, user_id, user_info, &op_state.objv) >= 0);
     op_state.found_by_uid = found;
   }
-  if (!user_email.empty() && !found) {
-    found = (rgw_get_user_info_by_email(store, user_email, user_info, &op_state.objv) >= 0);
-    op_state.found_by_email = found;
+  if (store->ctx()->_conf->get_val<bool>("rgw_user_unique_email")) {
+    if (!user_email.empty() && !found) {
+      found = (rgw_get_user_info_by_email(store, user_email, user_info, &op_state.objv) >= 0);
+      op_state.found_by_email = found;
+    }
   }
   if (!swift_user.empty() && !found) {
     found = (rgw_get_user_info_by_swift(store, swift_user, user_info, &op_state.objv) >= 0);