diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
commit | 19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch) | |
tree | 42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/rgw/rgw_admin_user.cc | |
parent | Initial commit. (diff) | |
download | ceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.tar.xz ceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.zip |
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/rgw/rgw_admin_user.cc')
-rw-r--r-- | src/rgw/rgw_admin_user.cc | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/rgw/rgw_admin_user.cc b/src/rgw/rgw_admin_user.cc new file mode 100644 index 000000000..cccc068c2 --- /dev/null +++ b/src/rgw/rgw_admin_user.cc @@ -0,0 +1,91 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab ft=cpp + +#include "include/rgw/librgw_admin_user.h" +#include "rgw_admin_user.h" +#include "rgw_user.h" +#include "common/errno.h" + +#define dout_context g_ceph_context +#define dout_subsys ceph_subsys_rgw + +using namespace rgw; + +namespace rgw { + + extern RGWLibAdmin rgw_lib_admin; + +} + +extern "C" { + + int rgw_admin_create_user(librgw_admin_user_t librgw_admin_user, const char *uid, + const char *display_name, const char *access_key, const char* secret_key, + const char *email, const char *caps, + const char *access, bool admin, bool system) + { + RGWUserAdminOpState user_op; + rgw_user user_id; + user_id.from_str(uid); + user_op.set_user_id(user_id); + user_op.set_display_name(display_name); + user_op.user_email = email; + user_op.user_email_specified=true; + user_op.set_access_key(access_key); + user_op.set_secret_key(secret_key); + user_op.set_caps(caps); + if (access) { + uint32_t perm_mask = rgw_str_to_perm(access); + user_op.set_perm(perm_mask); + } + user_op.set_admin(admin); + user_op.set_system(system); + + RGWUser user; + int ret = 0; + ret = user.init(rgw_lib_admin.get_store(), user_op); + if (ret < 0) { + cerr << "user.init failed: " << cpp_strerror(-ret) << std::endl; + return -ret; + } + + std::string err_msg; + ret = user.add(user_op, &err_msg); + if (ret < 0) { + cerr << "could not create user: " << err_msg << std::endl; + if (ret == -ERR_INVALID_TENANT_NAME) + ret = -EINVAL; + + return -ret; + } + + return 0; + } + + int rgw_admin_user_info(librgw_admin_user_t librgw_admin_user, const char *uid, rgw_user_info* user_info) + { + RGWUserAdminOpState user_op; + rgw_user user_id; + user_id.from_str(uid); + user_op.set_user_id(user_id); + + RGWUser user; + int ret = 0; + ret = user.init(rgw_lib_admin.get_store(), user_op); + if (ret < 0) { + cerr << "user.init failed: " << cpp_strerror(-ret) << std::endl; + return -ret; + } + + std::string err_msg; + RGWUserInfo info; + ret = user.info(info, &err_msg); + if (ret < 0) { + cerr << "could not fetch user info: " << err_msg << std::endl; + return -ret; + } + + return 0; + } + +} |