summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda.sadeh@dreamhost.com>2011-12-06 11:31:34 -0800
committerYehuda Sadeh <yehuda.sadeh@dreamhost.com>2011-12-06 11:31:34 -0800
commit54329272e07c1fed7c06493a1ac160553822407c (patch)
tree91b9e5a80e38d5cacffb69446b138867382c3628
parent28d97ac6ac5d8380f605ae973f296ffbb8142145 (diff)
downloadceph-54329272e07c1fed7c06493a1ac160553822407c.tar.gz
rgw: get most to compile, ready to start working on I/O path
-rw-r--r--src/rgw/libradosgw.cc46
-rw-r--r--src/rgw/libradosgw.hpp27
-rw-r--r--src/rgw/rgw_common.cc2
-rw-r--r--src/rgw/rgw_common.h2
-rw-r--r--src/rgw/rgw_log.cc2
-rw-r--r--src/rgw/rgw_main.cc4
-rw-r--r--src/rgw/rgw_op.cc58
-rw-r--r--src/rgw/rgw_rest.cc14
-rw-r--r--src/rgw/rgw_rest.h4
-rw-r--r--src/rgw/rgw_rest_s3.cc24
-rw-r--r--src/rgw/rgw_swift.cc6
-rw-r--r--src/rgw/rgw_swift_auth.cc28
-rw-r--r--src/rgw/rgw_swift_auth.h2
-rw-r--r--src/rgw/rgw_user.cc58
14 files changed, 119 insertions, 158 deletions
diff --git a/src/rgw/libradosgw.cc b/src/rgw/libradosgw.cc
index e6bfbac0bf6..b4fe8152aa9 100644
--- a/src/rgw/libradosgw.cc
+++ b/src/rgw/libradosgw.cc
@@ -56,21 +56,13 @@ namespace libradosgw {
{
StoreImpl *store;
- AccountImpl(StoreImpl *s) : store(s) {
- if (store)
- store->get();
- }
-
- ~AccountImpl() {
- if (store)
- store->put();
- }
-
+ AccountImpl(StoreImpl *s);
+ ~AccountImpl();
int store_info(Account *account);
- void encode(bufferlist& bl) const {
+ void encode(Account *account, bufferlist& bl) const {
__u32 ver = USER_INFO_VER;
User& user = account->user;
@@ -105,7 +97,7 @@ namespace libradosgw {
::encode(account->suspended, bl);
::encode(account->swift_keys, bl);
}
- void decode(bufferlist::iterator& bl) {
+ void decode(Account *account, bufferlist::iterator& bl) {
__u32 ver;
::decode(ver, bl);
@@ -146,7 +138,6 @@ namespace libradosgw {
}
}
};
- WRITE_CLASS_ENCODER(AccountImpl)
class StoreImpl : public RefCountedObject {
RGWRados *access;
@@ -182,11 +173,11 @@ namespace libradosgw {
int put_complete_obj(string& uid, rgw_bucket& bucket, string& oid, const char *data, size_t size);
int get_complete_obj(void *ctx, rgw_bucket& bucket, string& key, bufferlist& bl);
- int account_by_name(string& name, Account& account) {}
+ int account_by_uid(string& name, Account& account) {}
int account_by_email(string& email, Account& account) {}
int account_by_access_key(string& access_key, Account& account) {}
int account_by_subuser(string& subuser, Account& account) {}
- int user_by_name(string& name, User& user) {}
+ int user_by_uid(string& name, User& user) {}
int user_by_email(string& email, User& user) {}
int user_by_access_key(string& access_key, User& user) {}
int user_by_subuser(string& subuser, User& user) {}
@@ -259,7 +250,7 @@ namespace libradosgw {
::decode(uid, iter);
if (!iter.end()) {
impl = new AccountImpl(this);
- impl->decode(iter);
+ impl->decode(&account, iter);
account.impl = impl;
}
} catch (buffer::error& err) {
@@ -281,8 +272,8 @@ namespace libradosgw {
impl->put();
}
- int Store::account_by_name(string& name, Account& account) {
- return impl->account_by_name(name, account);
+ int Store::account_by_uid(string& name, Account& account) {
+ return impl->account_by_uid(name, account);
}
int Store::account_by_email(string& email, Account& account) {
@@ -297,8 +288,8 @@ namespace libradosgw {
return impl->account_by_subuser(access_key, account);
}
- int Store::user_by_name(string& name, User& user) {
- return impl->user_by_name(name, user);
+ int Store::user_by_uid(string& name, User& user) {
+ return impl->user_by_uid(name, user);
}
int Store::user_by_email(string& email, User& user) {
@@ -313,11 +304,20 @@ namespace libradosgw {
return impl->user_by_subuser(access_key, user);
}
+ AccountImpl::AccountImpl(StoreImpl *s) : store(s) {
+ if (store)
+ store->get();
+ }
+
+ AccountImpl::~AccountImpl() {
+ if (store)
+ store->put();
+ }
int AccountImpl::store_info(Account *account)
{
bufferlist bl;
- encode(bl);
+ encode(account, bl);
string md5;
int ret;
map<string,bufferlist> attrs;
@@ -352,7 +352,7 @@ namespace libradosgw {
bufferlist uid_bl;
::encode(user.uid, uid_bl);
- encode(uid_bl);
+ encode(account, uid_bl);
ret = store->put_complete_obj(user.uid, ui_uid_bucket, user.uid, uid_bl.c_str(), uid_bl.length());
if (ret < 0)
@@ -385,6 +385,8 @@ namespace libradosgw {
return ret;
}
+ User User::Anonymous(true);
+
int Account::store_info() {
return impl->store_info(this);
}
diff --git a/src/rgw/libradosgw.hpp b/src/rgw/libradosgw.hpp
index b85332718b7..86b8c0b5a7c 100644
--- a/src/rgw/libradosgw.hpp
+++ b/src/rgw/libradosgw.hpp
@@ -32,7 +32,7 @@ namespace libradosgw {
ObjRef(RefCountedObject *o = NULL) : obj(o) {}
ObjRef(ObjRef<T>& src) {
- obj = src;
+ obj = src.obj;
if (obj)
obj->get();
}
@@ -120,7 +120,17 @@ namespace libradosgw {
string email;
uint64_t auid;
+ User(bool anon = false) {
+ group = 0;
+ if (anon) {
+ group |= GROUP_ANONYMOUS;
+ }
+ }
+
bool is_anonymous() { return (group & GROUP_ANONYMOUS) != 0; }
+ bool is_authenticated() { return !is_anonymous(); }
+
+ static User Anonymous;
};
struct ACLs {
@@ -245,7 +255,6 @@ namespace libradosgw {
protected:
ObjRef<AccountImpl> impl;
- User user;
std::map<string, AccessKey> access_keys;
std::map<string, AccessKey> swift_keys;
std::map<string, SubUser> subusers;
@@ -256,6 +265,8 @@ namespace libradosgw {
Account();
~Account();
+ User user;
+
AccountIterator buckets_begin();
const AccountIterator& buckets_end();
@@ -263,9 +274,13 @@ namespace libradosgw {
int get_bucket(string& name, Bucket& bucket);
int create_bucket(string& name, ACLs *acls = NULL);
+ bool is_suspended() { return suspended; }
+
std::map<string, AccessKey>& get_access_keys() { return access_keys; }
- std::map<string, AccessKey> get_swift_keys() { return swift_keys; }
- std::map<string, SubUser> get_subusers() { return subusers; }
+ std::map<string, AccessKey>& get_swift_keys() { return swift_keys; }
+ std::map<string, SubUser>& get_subusers() { return subusers; }
+
+ int store_info();
};
@@ -278,12 +293,12 @@ namespace libradosgw {
int init(CephContext *cct);
void shutdown();
- int account_by_name(string& name, Account& account);
+ int account_by_uid(string& uid, Account& account);
int account_by_email(string& email, Account& account);
int account_by_access_key(string& access_key, Account& account);
int account_by_subuser(string& subuser, Account& account);
- int user_by_name(string& name, User& user);
+ int user_by_uid(string& uid, User& user);
int user_by_email(string& email, User& user);
int user_by_access_key(string& access_key, User& user);
int user_by_subuser(string& subuser, User& user);
diff --git a/src/rgw/rgw_common.cc b/src/rgw/rgw_common.cc
index e5745e32c8f..d4bcdd8021d 100644
--- a/src/rgw/rgw_common.cc
+++ b/src/rgw/rgw_common.cc
@@ -345,7 +345,7 @@ bool verify_permission(RGWAccessControlPolicy *policy, const string& uid, int us
bool verify_permission(struct req_state *s, int perm)
{
- return verify_permission(s->acl, s->user.uid, s->perm_mask, perm);
+ return verify_permission(s->acl, s->account.user.uid, s->perm_mask, perm);
}
static char hex_to_num(char c)
diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h
index f8bb081c3b3..53f14f78e02 100644
--- a/src/rgw/rgw_common.h
+++ b/src/rgw/rgw_common.h
@@ -456,7 +456,7 @@ struct req_state {
map<string, string> x_meta_map;
bool has_bad_meta;
- libradosgw::User user;
+ libradosgw::Account account;
RGWAccessControlPolicy *acl;
string canned_acl;
diff --git a/src/rgw/rgw_log.cc b/src/rgw/rgw_log.cc
index 738d08cf69b..4a3ac5f88e2 100644
--- a/src/rgw/rgw_log.cc
+++ b/src/rgw/rgw_log.cc
@@ -119,7 +119,7 @@ int rgw_log_op(struct req_state *s)
set_param_str(s, "REQUEST_URI", entry.uri);
set_param_str(s, "REQUEST_METHOD", entry.op);
- entry.user = s->user.user_id;
+ entry.user = s->account.user.uid;
if (s->acl)
entry.object_owner = s->acl->get_owner().get_id();
entry.bucket_owner = s->bucket_owner;
diff --git a/src/rgw/rgw_main.cc b/src/rgw/rgw_main.cc
index 998053a0066..19d6d957037 100644
--- a/src/rgw/rgw_main.cc
+++ b/src/rgw/rgw_main.cc
@@ -208,8 +208,8 @@ void RGWProcess::handle_request(FCGX_Request *fcgx)
abort_early(s, ret);
goto done;
}
- if (s->user.suspended) {
- dout(10) << "user is suspended, uid=" << s->user.user_id << dendl;
+ if (s->account.is_suspended()) {
+ dout(10) << "user is suspended, uid=" << s->account.user.uid << dendl;
abort_early(s, -ERR_USER_SUSPENDED);
goto done;
}
diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc
index 976bf6930eb..5e192b981a6 100644
--- a/src/rgw/rgw_op.cc
+++ b/src/rgw/rgw_op.cc
@@ -226,7 +226,7 @@ static int read_acls(struct req_state *s, RGWBucketInfo& bucket_info, RGWAccessC
if (ret < 0)
return ret;
- if (!verify_permission(&bucket_policy, s->user.user_id, s->perm_mask, RGW_PERM_READ))
+ if (!verify_permission(&bucket_policy, s->account.user.uid, s->perm_mask, RGW_PERM_READ))
ret = -EACCES;
else
ret = -ENOENT;
@@ -373,11 +373,11 @@ void RGWListBuckets::execute()
if (ret < 0)
goto done;
- ret = rgw_read_user_buckets(s->user.user_id, buckets, !!(s->prot_flags & RGW_REST_SWIFT));
+ ret = rgw_read_user_buckets(s->account.user.uid, buckets, !!(s->prot_flags & RGW_REST_SWIFT));
if (ret < 0) {
/* hmm.. something wrong here.. the user was authenticated, so it
should exist, just try to recreate */
- dout(10) << "WARNING: failed on rgw_get_user_buckets uid=" << s->user.user_id << dendl;
+ dout(10) << "WARNING: failed on rgw_get_user_buckets uid=" << s->account.user.uid << dendl;
/*
@@ -402,11 +402,11 @@ void RGWStatAccount::execute()
{
RGWUserBuckets buckets;
- ret = rgw_read_user_buckets(s->user.user_id, buckets, true);
+ ret = rgw_read_user_buckets(s->account.user.uid, buckets, true);
if (ret < 0) {
/* hmm.. something wrong here.. the user was authenticated, so it
should exist, just try to recreate */
- dout(10) << "WARNING: failed on rgw_get_user_buckets uid=" << s->user.user_id << dendl;
+ dout(10) << "WARNING: failed on rgw_get_user_buckets uid=" << s->account.user.uid << dendl;
/*
@@ -505,7 +505,7 @@ done:
int RGWCreateBucket::verify_permission()
{
- if (!rgw_user_is_authenticated(s->user))
+ if (!s->account.user.is_authenticated())
return -EACCES;
return 0;
@@ -521,16 +521,16 @@ void RGWCreateBucket::execute()
rgw_obj obj(rgw_root_bucket, s->bucket_name_str);
- s->bucket_owner = s->user.user_id;
+ s->bucket_owner = s->account.user.uid;
int r = get_policy_from_attr(s->obj_ctx, &old_policy, obj);
if (r >= 0) {
- if (old_policy.get_owner().get_id().compare(s->user.user_id) != 0) {
+ if (old_policy.get_owner().get_id().compare(s->account.user.uid) != 0) {
ret = -EEXIST;
goto done;
}
}
- pol_ret = policy.create_canned(s->user.user_id, s->user.display_name, s->canned_acl);
+ pol_ret = policy.create_canned(s->account.user.uid, s->account.user.display_name, s->canned_acl);
if (!pol_ret) {
ret = -EINVAL;
goto done;
@@ -540,8 +540,8 @@ void RGWCreateBucket::execute()
attrs[RGW_ATTR_ACL] = aclbl;
s->bucket.name = s->bucket_name_str;
- ret = rgwstore->create_bucket(s->user.user_id, s->bucket, attrs, false,
- true, s->user.auid);
+ ret = rgwstore->create_bucket(s->account.user.uid, s->bucket, attrs, false,
+ true, s->account.user.auid);
/* continue if EEXIST and create_bucket will fail below. this way we can recover
* from a partial create by retrying it. */
dout(0) << "rgw_create_bucket returned ret=" << ret << " bucket=" << s->bucket << dendl;
@@ -551,9 +551,9 @@ void RGWCreateBucket::execute()
existed = (ret == -EEXIST);
- ret = rgw_add_bucket(s->user.user_id, s->bucket);
+ ret = rgw_add_bucket(s->account.user.uid, s->bucket);
if (ret && !existed && ret != -EEXIST) /* if it exists (or previously existed), don't remove it! */
- rgw_unlink_bucket(s->user.user_id, s->bucket);
+ rgw_unlink_bucket(s->account.user.uid, s->bucket);
if (ret == -EEXIST)
ret = -ERR_BUCKET_EXISTS;
@@ -578,7 +578,7 @@ void RGWDeleteBucket::execute()
ret = rgwstore->delete_bucket(s->bucket);
if (ret == 0) {
- ret = rgw_unlink_bucket(s->user.user_id, s->bucket);
+ ret = rgw_unlink_bucket(s->account.user.uid, s->bucket);
if (ret < 0) {
dout(0) << "WARNING: failed to remove bucket: ret=" << ret << dendl;
}
@@ -667,7 +667,7 @@ void RGWPutObj::execute()
RGWAccessControlPolicy policy;
- ret = policy.create_canned(s->user.user_id, s->user.display_name, s->canned_acl);
+ ret = policy.create_canned(s->account.user.uid, s->account.user.display_name, s->canned_acl);
if (!ret) {
ret = -EINVAL;
goto done;
@@ -976,7 +976,7 @@ int RGWCopyObj::verify_permission()
if (ret < 0)
return ret;
- if (!::verify_permission(&src_policy, s->user.user_id, s->perm_mask, RGW_PERM_READ))
+ if (!::verify_permission(&src_policy, s->account.user.uid, s->perm_mask, RGW_PERM_READ))
return -EACCES;
RGWAccessControlPolicy dest_bucket_policy;
@@ -986,13 +986,13 @@ int RGWCopyObj::verify_permission()
if (ret < 0)
return ret;
- if (!::verify_permission(&dest_bucket_policy, s->user.user_id, s->perm_mask, RGW_PERM_WRITE))
+ if (!::verify_permission(&dest_bucket_policy, s->account.user.uid, s->perm_mask, RGW_PERM_WRITE))
return -EACCES;
/* build a polict for the target object */
RGWAccessControlPolicy dest_policy;
- ret = dest_policy.create_canned(s->user.user_id, s->user.display_name, s->canned_acl);
+ ret = dest_policy.create_canned(s->account.user.uid, s->account.user.display_name, s->canned_acl);
if (!ret)
return -EINVAL;
@@ -1075,7 +1075,7 @@ void RGWGetACLs::execute()
send_response();
}
-static int rebuild_policy(ACLOwner *owner, RGWAccessControlPolicy& src, RGWAccessControlPolicy& dest)
+static int rebuild_policy(libradosgw::Store& store, ACLOwner *owner, RGWAccessControlPolicy& src, RGWAccessControlPolicy& dest)
{
if (!owner)
return -EINVAL;
@@ -1085,8 +1085,8 @@ static int rebuild_policy(ACLOwner *owner, RGWAccessControlPolicy& src, RGWAcces
return -EPERM;
}
- RGWUserInfo owner_info;
- if (rgw_get_user_info_by_uid(owner->get_id(), owner_info) < 0) {
+ libradosgw::User owner_info;
+ if (store.user_by_uid(owner->get_id(), owner_info) < 0) {
dout(10) << "owner info does not exist" << dendl;
return -EINVAL;
}
@@ -1107,24 +1107,24 @@ static int rebuild_policy(ACLOwner *owner, RGWAccessControlPolicy& src, RGWAcces
ACLGrant new_grant;
bool grant_ok = false;
string uid;
- RGWUserInfo grant_user;
+ libradosgw::User grant_user;
switch (type.get_type()) {
case ACL_TYPE_EMAIL_USER:
{
string email = src_grant->get_id();
dout(10) << "grant user email=" << email << dendl;
- if (rgw_get_user_info_by_email(email, grant_user) < 0) {
+ if (store.user_by_email(email, grant_user) < 0) {
dout(10) << "grant user email not found or other error" << dendl;
return -ERR_UNRESOLVABLE_EMAIL;
}
- uid = grant_user.user_id;
+ uid = grant_user.uid;
}
case ACL_TYPE_CANON_USER:
{
if (type.get_type() == ACL_TYPE_CANON_USER)
uid = src_grant->get_id();
- if (grant_user.user_id.empty() && rgw_get_user_info_by_uid(uid, grant_user) < 0) {
+ if (grant_user.uid.empty() && store.user_by_uid(uid, grant_user) < 0) {
dout(10) << "grant user does not exist:" << uid << dendl;
return -EINVAL;
} else {
@@ -1194,8 +1194,8 @@ void RGWPutACLs::execute()
ret = -ENOMEM;
goto done;
}
- owner.set_id(s->user.user_id);
- owner.set_name(s->user.display_name);
+ owner.set_id(s->account.user.uid);
+ owner.set_name(s->account.user.display_name);
} else {
owner = s->acl->get_owner();
}
@@ -1239,7 +1239,7 @@ void RGWPutACLs::execute()
*_dout << dendl;
}
- ret = rebuild_policy(&owner, *policy, new_policy);
+ ret = rebuild_policy(s->store, &owner, *policy, new_policy);
if (ret < 0)
goto done;
@@ -1283,7 +1283,7 @@ void RGWInitMultipart::execute()
if (!s->object)
goto done;
- ret = policy.create_canned(s->user.user_id, s->user.display_name, s->canned_acl);
+ ret = policy.create_canned(s->account.user.uid, s->account.user.display_name, s->canned_acl);
if (!ret) {
ret = -EINVAL;
goto done;
diff --git a/src/rgw/rgw_rest.cc b/src/rgw/rgw_rest.cc
index 99b1db56e16..55f5f10075e 100644
--- a/src/rgw/rgw_rest.cc
+++ b/src/rgw/rgw_rest.cc
@@ -500,7 +500,7 @@ static int init_entities_from_header(struct req_state *s)
next_tok(req, ver, '/');
dout(10) << "ver=" << ver << dendl;
- s->os_auth_token = s->env->get("HTTP_X_AUTH_TOKEN");
+ s->swift_auth_token = s->env->get("HTTP_X_AUTH_TOKEN");
next_tok(req, first, '/');
dout(10) << "ver=" << ver << " first=" << first << " req=" << req << dendl;
@@ -884,15 +884,15 @@ RGWOp *RGWHandler_REST::get_op()
RGWRESTMgr::RGWRESTMgr()
{
- m_os_handler = new RGWHandler_REST_SWIFT;
- m_os_auth_handler = new RGWHandler_SWIFT_Auth;
+ m_swift_handler = new RGWHandler_REST_SWIFT;
+ m_swift_auth_handler = new RGWHandler_SWIFT_Auth;
m_s3_handler = new RGWHandler_REST_S3;
}
RGWRESTMgr::~RGWRESTMgr()
{
- delete m_os_handler;
- delete m_os_auth_handler;
+ delete m_swift_handler;
+ delete m_swift_auth_handler;
delete m_s3_handler;
}
@@ -904,9 +904,9 @@ RGWHandler *RGWRESTMgr::get_handler(struct req_state *s, FCGX_Request *fcgx,
*init_error = RGWHandler_REST::preprocess(s, fcgx);
if (s->prot_flags & RGW_REST_SWIFT)
- handler = m_os_handler;
+ handler = m_swift_handler;
else if (s->prot_flags & RGW_REST_SWIFT_AUTH)
- handler = m_os_auth_handler;
+ handler = m_swift_auth_handler;
else
handler = m_s3_handler;
diff --git a/src/rgw/rgw_rest.h b/src/rgw/rgw_rest.h
index 602aa7e082a..a0c753eadfb 100644
--- a/src/rgw/rgw_rest.h
+++ b/src/rgw/rgw_rest.h
@@ -164,8 +164,8 @@ class RGWHandler_SWIFT_Auth;
class RGWHandler_REST_S3;
class RGWRESTMgr {
- RGWHandler_REST_SWIFT *m_os_handler;
- RGWHandler_SWIFT_Auth *m_os_auth_handler;
+ RGWHandler_REST_SWIFT *m_swift_handler;
+ RGWHandler_SWIFT_Auth *m_swift_auth_handler;
RGWHandler_REST_S3 *m_s3_handler;
public:
diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc
index de7b3ac2762..f164436835f 100644
--- a/src/rgw/rgw_rest_s3.cc
+++ b/src/rgw/rgw_rest_s3.cc
@@ -98,7 +98,7 @@ void RGWListBuckets_REST_S3::send_response()
dump_start(s);
list_all_buckets_start(s);
- dump_owner(s, s->user.uid, s->user.display_name);
+ dump_owner(s, s->account.user.uid, s->account.user.display_name);
map<string, RGWBucketEnt>& m = buckets.get_buckets();
map<string, RGWBucketEnt>::iterator iter;
@@ -433,8 +433,8 @@ void RGWListBucketMultiparts_REST_S3::send_response()
s->formatter->open_array_section("Upload");
s->formatter->dump_format("Key", mp.get_key().c_str());
s->formatter->dump_format("UploadId", mp.get_upload_id().c_str());
- dump_owner(s, s->user.uid, s->user.display_name, "Initiator");
- dump_owner(s, s->user.uid, s->user.display_name);
+ dump_owner(s, s->account.user.uid, s->account.user.display_name, "Initiator");
+ dump_owner(s, s->account.user.uid, s->account.user.display_name);
s->formatter->dump_format("StorageClass", "STANDARD");
dump_time(s, "Initiated", &iter->obj.mtime);
s->formatter->close_section();
@@ -684,7 +684,7 @@ int RGWHandler_REST_S3::authorize()
qsr = true;
} else {
/* anonymous access */
- rgw_get_anon_user(s->user);
+ s->account.user = libradosgw::User::Anonymous;
s->perm_mask = RGW_PERM_FULL_CONTROL;
return 0;
}
@@ -701,7 +701,7 @@ int RGWHandler_REST_S3::authorize()
}
/* first get the user info */
- if (rgw_get_user_info_by_access_key(auth_id, s->user) < 0) {
+ if (s->store.account_by_access_key(auth_id, s->account) < 0) {
dout(5) << "error reading user info, uid=" << auth_id << " can't authenticate" << dendl;
return -EPERM;
}
@@ -723,22 +723,24 @@ int RGWHandler_REST_S3::authorize()
return -ERR_REQUEST_TIME_SKEWED;
}
- map<string, RGWAccessKey>::iterator iter = s->user.access_keys.find(auth_id);
- if (iter == s->user.access_keys.end()) {
+ const map<string, libradosgw::AccessKey>& access_keys = s->account.get_access_keys();
+ map<string, libradosgw::AccessKey>::const_iterator iter = access_keys.find(auth_id);
+ if (iter == access_keys.end()) {
dout(0) << "ERROR: access key not encoded in user info" << dendl;
return -EPERM;
}
- RGWAccessKey& k = iter->second;
+ const libradosgw::AccessKey& k = iter->second;
const char *key = k.key.c_str();
int key_len = k.key.size();
if (!k.subuser.empty()) {
- map<string, RGWSubUser>::iterator uiter = s->user.subusers.find(k.subuser);
- if (uiter == s->user.subusers.end()) {
+ const map<string, libradosgw::SubUser>& subusers = s->account.get_subusers();
+ map<string, libradosgw::SubUser>::const_iterator uiter = subusers.find(k.subuser);
+ if (uiter == subusers.end()) {
dout(0) << "ERROR: could not find subuser: " << k.subuser << dendl;
return -EPERM;
}
- RGWSubUser& subuser = uiter->second;
+ const libradosgw::SubUser& subuser = uiter->second;
s->perm_mask = subuser.perm_mask;
} else
s->perm_mask = RGW_PERM_FULL_CONTROL;
diff --git a/src/rgw/rgw_swift.cc b/src/rgw/rgw_swift.cc
index 4f0b183b24c..d6b25609d3e 100644
--- a/src/rgw/rgw_swift.cc
+++ b/src/rgw/rgw_swift.cc
@@ -87,7 +87,7 @@ bool rgw_verify_swift_token(req_state *s)
return false;
if (strncmp(s->swift_auth_token, "AUTH_rgwtk", 10) == 0) {
- int ret = rgw_swift_verify_signed_token(s->swift_auth_token, s->user);
+ int ret = rgw_swift_verify_signed_token(s->swift_auth_token, s->account);
if (ret < 0)
return false;
@@ -116,12 +116,12 @@ bool rgw_verify_swift_token(req_state *s)
dout(10) << "swift user=" << s->swift_user << dendl;
- if (s->store.user_by_subuser(swift_user, s->user) < 0) {
+ if (s->store.account_by_subuser(swift_user, s->account) < 0) {
dout(0) << "couldn't map swift user" << dendl;
return false;
}
- dout(10) << "user_id=" << s->user.uid << dendl;
+ dout(10) << "user_id=" << s->account.user.uid << dendl;
return true;
}
diff --git a/src/rgw/rgw_swift_auth.cc b/src/rgw/rgw_swift_auth.cc
index a4880995e23..a2b53515ab1 100644
--- a/src/rgw/rgw_swift_auth.cc
+++ b/src/rgw/rgw_swift_auth.cc
@@ -14,7 +14,7 @@ using namespace ceph::crypto;
static RGW_SWIFT_Auth_Get rgw_swift_auth_get;
-static int build_token(string& swift_user, string& key, uint64_t nonce, utime_t& expiration, bufferlist& bl)
+static int build_token(const string& swift_user, const string& key, uint64_t nonce, utime_t& expiration, bufferlist& bl)
{
::encode(swift_user, bl);
::encode(nonce, bl);
@@ -56,7 +56,7 @@ static int encode_token(string& swift_user, string& key, bufferlist& bl)
return ret;
}
-int rgw_swift_verify_signed_token(libradosgw::Store& store, const char *token, libradosgw::User& user)
+int rgw_swift_verify_signed_token(libradosgw::Store& store, const char *token, libradosgw::Account& account)
{
if (strncmp(token, "AUTH_rgwtk", 10) != 0)
return -EINVAL;
@@ -96,19 +96,17 @@ int rgw_swift_verify_signed_token(libradosgw::Store& store, const char *token, l
return -EPERM;
}
- libradosgw::Account account;
-
if ((ret = store.account_by_subuser(swift_user, account)) < 0)
return ret;
dout(10) << "swift_user=" << swift_user << dendl;
- map<string, RGWAccessKey>& swift_keys = account.get_swift_keys();
+ const map<string, libradosgw::AccessKey>& swift_keys = account.get_swift_keys();
- map<string, RGWAccessKey>::iterator siter = swift_keys.find(swift_user);
- if (siter == account.swift_keys.end())
+ map<string, libradosgw::AccessKey>::const_iterator siter = swift_keys.find(swift_user);
+ if (siter == swift_keys.end())
return -EPERM;
- RGWAccessKey& swift_key = siter->second;
+ const libradosgw::AccessKey& swift_key = siter->second;
bufferlist tok;
ret = build_token(swift_user, swift_key.key, nonce, expiration, tok);
@@ -140,10 +138,11 @@ void RGW_SWIFT_Auth_Get::execute()
const char *user = s->env->get("HTTP_X_AUTH_USER");
string user_str;
- RGWUserInfo info;
+ libradosgw::Account account;
bufferlist bl;
- RGWAccessKey *swift_key;
- map<string, RGWAccessKey>::iterator siter;
+ libradosgw::AccessKey *swift_key;
+ map<string, libradosgw::AccessKey> *swift_keys;
+ map<string, libradosgw::AccessKey>::iterator siter;
string swift_url = g_conf->rgw_swift_url;
string swift_prefix = g_conf->rgw_swift_url_prefix;
@@ -185,11 +184,12 @@ void RGW_SWIFT_Auth_Get::execute()
user_str = user;
- if ((ret = rgw_get_user_info_by_swift(user_str, info)) < 0)
+ if ((ret = s->store.account_by_subuser(user_str, account)) < 0)
goto done;
- siter = info.swift_keys.find(user_str);
- if (siter == info.swift_keys.end()) {
+ swift_keys = &account.get_swift_keys();
+ siter = swift_keys->find(user_str);
+ if (siter == swift_keys->end()) {
ret = -EPERM;
goto done;
}
diff --git a/src/rgw/rgw_swift_auth.h b/src/rgw/rgw_swift_auth.h
index 589717a5a61..c1929f7f687 100644
--- a/src/rgw/rgw_swift_auth.h
+++ b/src/rgw/rgw_swift_auth.h
@@ -6,7 +6,7 @@
#define RGW_SWIFT_TOKEN_EXPIRATION (15 * 60)
-extern int rgw_swift_verify_signed_token(const char *token, libradosgw::User& user);
+extern int rgw_swift_verify_signed_token(const char *token, libradosgw::Account& account);
class RGW_SWIFT_Auth_Get : public RGWOp {
public:
diff --git a/src/rgw/rgw_user.cc b/src/rgw/rgw_user.cc
index 5e7cf79eee2..88dd0b8e0f3 100644
--- a/src/rgw/rgw_user.cc
+++ b/src/rgw/rgw_user.cc
@@ -14,64 +14,6 @@
using namespace std;
-int rgw_get_user_info_from_index(string& key, rgw_bucket& bucket, RGWUserInfo& info)
-{
- bufferlist bl;
- RGWUID uid;
-
- int ret = rgw_get_obj(rgwstore, NULL, bucket, key, bl);
- if (ret < 0)
- return ret;
-
- bufferlist::iterator iter = bl.begin();
- try {
- ::decode(uid, iter);
- if (!iter.end())
- info.decode(iter);
- } catch (buffer::error& err) {
- dout(0) << "ERROR: failed to decode user info, caught buffer::error" << dendl;
- return -EIO;
- }
-
- return 0;
-}
-
-/**
- * Given an email, finds the user info associated with it.
- * returns: 0 on success, -ERR# on failure (including nonexistence)
- */
-int rgw_get_user_info_by_uid(string& uid, RGWUserInfo& info)
-{
- return rgw_get_user_info_from_index(uid, ui_uid_bucket, info);
-}
-
-/**
- * Given an email, finds the user info associated with it.
- * returns: 0 on success, -ERR# on failure (including nonexistence)
- */
-int rgw_get_user_info_by_email(string& email, RGWUserInfo& info)
-{
- return rgw_get_user_info_from_index(email, ui_email_bucket, info);
-}
-
-/**
- * Given an swift username, finds the user_info associated with it.
- * returns: 0 on success, -ERR# on failure (including nonexistence)
- */
-extern int rgw_get_user_info_by_swift(string& swift_name, RGWUserInfo& info)
-{
- return rgw_get_user_info_from_index(swift_name, ui_swift_bucket, info);
-}
-
-/**
- * Given an access key, finds the user info associated with it.
- * returns: 0 on success, -ERR# on failure (including nonexistence)
- */
-extern int rgw_get_user_info_by_access_key(string& access_key, RGWUserInfo& info)
-{
- return rgw_get_user_info_from_index(access_key, ui_key_bucket, info);
-}
-
static void get_buckets_obj(string& user_id, string& buckets_obj_id)
{
buckets_obj_id = user_id;