From: MinSheng Lin Date: Fri, 25 Jan 2019 03:20:17 +0000 (+0000) Subject: rgw_file: use correct secret key to check auth X-Git-Tag: v13.2.6~113^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=af617fcba13917f53e0883297e9aaba3a0138357;p=ceph.git rgw_file: use correct secret key to check auth Currently, the authorize function in rgw_file only use the secret key of first key pair to compare, add a function which get secret key by user's access key and check the result is match with user's secret key. Fixes: https://tracker.ceph.com/issues/37855 Signed-off-by: MinSheng Lin (cherry picked from commit e92755c60325475342afcafcd5293a20e3e5216a) --- diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h index cf00f29704b8..820085233758 100644 --- a/src/rgw/rgw_common.h +++ b/src/rgw/rgw_common.h @@ -656,11 +656,15 @@ struct RGWUserInfo type(TYPE_NONE) { } - RGWAccessKey* get_key0() { + RGWAccessKey* get_key(const string& access_key) { if (access_keys.empty()) return nullptr; + + auto k = access_keys.find(access_key); + if (k == access_keys.end()) + return nullptr; else - return &(access_keys.begin()->second); + return &(k->second); } void encode(bufferlist& bl) const { diff --git a/src/rgw/rgw_file.h b/src/rgw/rgw_file.h index 3bdcf03d0ceb..63b5b9e24277 100644 --- a/src/rgw/rgw_file.h +++ b/src/rgw/rgw_file.h @@ -920,9 +920,8 @@ namespace rgw { int authorize(RGWRados* store) { int ret = rgw_get_user_info_by_access_key(store, key.id, user); if (ret == 0) { - RGWAccessKey* key0 = user.get_key0(); - if (!key0 || - (key0->key != key.key)) + RGWAccessKey* k = user.get_key(key.id); + if (!k || (k->key != key.key)) return -EINVAL; if (user.suspended) return -ERR_USER_SUSPENDED;