Skip to content

Commit 05e207f

Browse files
committed
radosgw-admin: create user without credentials via cli
Add option `generate-key` to create user without credentials. Signed-off-by: Jiffin Tony Thottan <[email protected]>
1 parent 4ee8e59 commit 05e207f

File tree

5 files changed

+41
-6
lines changed

5 files changed

+41
-6
lines changed

doc/man/8/radosgw-admin.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,13 @@ Options
548548

549549
Generate random secret key.
550550

551+
.. option:: --generate-key
552+
553+
create user with or without credentials.
554+
If this option set to false, then user cannot set --gen-access-key/--gen-secret/--secret-key/--access-key.
555+
If this option set to true, then user cannot set --secret-key/--access-key and bypass options for --gen-secret/--gen-access-key.
556+
Default is true.
557+
551558
.. option:: --key-type=<type>
552559

553560
Key type, options are: swift, s3.

doc/radosgw/admin.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ include:
262262
- ``--secret-key=<key>`` manually specifies a S3 secret key or a Swift secret key.
263263
- ``--gen-access-key`` automatically generates a random S3 access key.
264264
- ``--gen-secret`` automatically generates a random S3 secret key or a random Swift secret key.
265+
- ``--generate-key`` create user with or without credentials. If sets to false, then user cannot set ``gen-secret/gen-access-key/access-key/secret-key``
265266

266267
Adding S3 keys
267268
~~~~~~~~~~~~~~

src/bash_completion/radosgw-admin

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ _radosgw_admin()
1919

2020
if [[ ${cur} == -* ]] ; then
2121
COMPREPLY=( $(compgen -W "--uid --subuser --access-key --os-user --email --auth_uid --secret --os-secret --gen-access-key --gen-secret \
22-
--access --display-name --bucket --object --date --conf --name --id --version -s -w" -- ${cur}) )
22+
--access --display-name --bucket --object --date --conf --name --id --version -s -w --generate-key" -- ${cur}) )
2323
return 0
2424
fi
2525

src/rgw/rgw_admin.cc

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,7 @@ void usage()
360360
cout << " --secret/--secret-key=<key> specify secret key\n";
361361
cout << " --gen-access-key generate random access key (for S3)\n";
362362
cout << " --gen-secret generate random secret key\n";
363+
cout << " --generate-key create user with or without credentials\n";
363364
cout << " --key-type=<type> key type, options are: swift, s3\n";
364365
cout << " --key-active=<bool> activate or deactivate a key\n";
365366
cout << " --temp-url-key[-2]=<key> temp url key\n";
@@ -3428,6 +3429,13 @@ int main(int argc, const char **argv)
34283429
OPT opt_cmd = OPT::NO_CMD;
34293430
int gen_access_key = 0;
34303431
int gen_secret_key = 0;
3432+
enum generate_key_enum {
3433+
OPTION_SET_FALSE = 0,
3434+
OPTION_SET_TRUE = 1,
3435+
OPTION_NOT_SET = 2,
3436+
};
3437+
3438+
generate_key_enum generate_key = OPTION_NOT_SET;
34313439
bool set_perm = false;
34323440
bool set_temp_url_key = false;
34333441
map<int, string> temp_url_keys;
@@ -3708,6 +3716,17 @@ int main(int argc, const char **argv)
37083716
cerr << "bad key type: " << key_type_str << std::endl;
37093717
exit(1);
37103718
}
3719+
} else if (ceph_argparse_witharg(args, i, &val, "--generate-key", (char*)NULL)) {
3720+
key_type_str = val;
3721+
if (key_type_str.compare("true") == 0) {
3722+
generate_key = OPTION_SET_TRUE;
3723+
} else if(key_type_str.compare("false") == 0) {
3724+
generate_key = OPTION_SET_FALSE;
3725+
} else {
3726+
cerr << "wrong value for --generate-key: " << key_type_str << " please specify either true or false" << std::endl;
3727+
exit(1);
3728+
}
3729+
// do nothing
37113730
} else if (ceph_argparse_binary_flag(args, i, &key_active, NULL, "--key-active", (char*)NULL)) {
37123731
key_active_specified = true;
37133732
} else if (ceph_argparse_witharg(args, i, &val, "--job-id", (char*)NULL)) {
@@ -4470,14 +4489,21 @@ int main(int argc, const char **argv)
44704489
}
44714490

44724491
/* check key parameter conflict */
4473-
if ((!access_key.empty()) && gen_access_key) {
4474-
cerr << "ERROR: key parameter conflict, --access-key & --gen-access-key" << std::endl;
4492+
if ((!access_key.empty()) && (gen_access_key || generate_key == OPTION_SET_TRUE)) {
4493+
cerr << "ERROR: key parameter conflict, --access-key & --gen-access-key/generate-key" << std::endl;
44754494
return EINVAL;
44764495
}
4477-
if ((!secret_key.empty()) && gen_secret_key) {
4478-
cerr << "ERROR: key parameter conflict, --secret & --gen-secret" << std::endl;
4496+
if ((!secret_key.empty()) && (gen_secret_key || generate_key == OPTION_SET_TRUE)) {
4497+
cerr << "ERROR: key parameter conflict, --secret & --gen-secret/generate-key" << std::endl;
44794498
return EINVAL;
44804499
}
4500+
if (generate_key == OPTION_SET_FALSE) {
4501+
if ((!access_key.empty()) || gen_access_key || (!secret_key.empty()) || gen_secret_key) {
4502+
cerr << "ERROR: key parameter conflict, if --generate-key is not set so no other key parameters can be set" << std::endl;
4503+
return EINVAL;
4504+
}
4505+
}
4506+
44814507
}
44824508

44834509
// default to pretty json
@@ -6642,7 +6668,7 @@ int main(int argc, const char **argv)
66426668
}
66436669
break;
66446670
case OPT::USER_CREATE:
6645-
if (!user_op.has_existing_user()) {
6671+
if (!user_op.has_existing_user() && (generate_key != OPTION_SET_FALSE)) {
66466672
user_op.set_generate_key(); // generate a new key by default
66476673
}
66486674
ret = ruser.add(dpp(), user_op, null_yield, &err_msg);

src/test/cli/radosgw-admin/help.t

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@
225225
--secret/--secret-key=<key> specify secret key
226226
--gen-access-key generate random access key (for S3)
227227
--gen-secret generate random secret key
228+
--generate-key create user with or without credentials
228229
--key-type=<type> key type, options are: swift, s3
229230
--key-active=<bool> activate or deactivate a key
230231
--temp-url-key[-2]=<key> temp url key

0 commit comments

Comments
 (0)