Skip to content

Commit 5278f69

Browse files
authored
Merge pull request ceph#59631 from thotz/create-user-without-creds-cli
radosgw-admin: create user without creds cli Reviewed-by: Matt Benjamin <[email protected]> Reviewed-by: Casey Bodley <[email protected]>
2 parents 557ccdc + 05e207f commit 5278f69

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
@@ -541,6 +541,13 @@ Options
541541

542542
Generate random secret key.
543543

544+
.. option:: --generate-key
545+
546+
create user with or without credentials.
547+
If this option set to false, then user cannot set --gen-access-key/--gen-secret/--secret-key/--access-key.
548+
If this option set to true, then user cannot set --secret-key/--access-key and bypass options for --gen-secret/--gen-access-key.
549+
Default is true.
550+
544551
.. option:: --key-type=<type>
545552

546553
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
@@ -361,6 +361,7 @@ void usage()
361361
cout << " --secret/--secret-key=<key> specify secret key\n";
362362
cout << " --gen-access-key generate random access key (for S3)\n";
363363
cout << " --gen-secret generate random secret key\n";
364+
cout << " --generate-key create user with or without credentials\n";
364365
cout << " --key-type=<type> key type, options are: swift, s3\n";
365366
cout << " --key-active=<bool> activate or deactivate a key\n";
366367
cout << " --temp-url-key[-2]=<key> temp url key\n";
@@ -3556,6 +3557,13 @@ int main(int argc, const char **argv)
35563557
OPT opt_cmd = OPT::NO_CMD;
35573558
int gen_access_key = 0;
35583559
int gen_secret_key = 0;
3560+
enum generate_key_enum {
3561+
OPTION_SET_FALSE = 0,
3562+
OPTION_SET_TRUE = 1,
3563+
OPTION_NOT_SET = 2,
3564+
};
3565+
3566+
generate_key_enum generate_key = OPTION_NOT_SET;
35593567
bool set_perm = false;
35603568
bool set_temp_url_key = false;
35613569
map<int, string> temp_url_keys;
@@ -3837,6 +3845,17 @@ int main(int argc, const char **argv)
38373845
cerr << "bad key type: " << key_type_str << std::endl;
38383846
exit(1);
38393847
}
3848+
} else if (ceph_argparse_witharg(args, i, &val, "--generate-key", (char*)NULL)) {
3849+
key_type_str = val;
3850+
if (key_type_str.compare("true") == 0) {
3851+
generate_key = OPTION_SET_TRUE;
3852+
} else if(key_type_str.compare("false") == 0) {
3853+
generate_key = OPTION_SET_FALSE;
3854+
} else {
3855+
cerr << "wrong value for --generate-key: " << key_type_str << " please specify either true or false" << std::endl;
3856+
exit(1);
3857+
}
3858+
// do nothing
38403859
} else if (ceph_argparse_binary_flag(args, i, &key_active, NULL, "--key-active", (char*)NULL)) {
38413860
key_active_specified = true;
38423861
} else if (ceph_argparse_witharg(args, i, &val, "--job-id", (char*)NULL)) {
@@ -4600,14 +4619,21 @@ int main(int argc, const char **argv)
46004619
}
46014620

46024621
/* check key parameter conflict */
4603-
if ((!access_key.empty()) && gen_access_key) {
4604-
cerr << "ERROR: key parameter conflict, --access-key & --gen-access-key" << std::endl;
4622+
if ((!access_key.empty()) && (gen_access_key || generate_key == OPTION_SET_TRUE)) {
4623+
cerr << "ERROR: key parameter conflict, --access-key & --gen-access-key/generate-key" << std::endl;
46054624
return EINVAL;
46064625
}
4607-
if ((!secret_key.empty()) && gen_secret_key) {
4608-
cerr << "ERROR: key parameter conflict, --secret & --gen-secret" << std::endl;
4626+
if ((!secret_key.empty()) && (gen_secret_key || generate_key == OPTION_SET_TRUE)) {
4627+
cerr << "ERROR: key parameter conflict, --secret & --gen-secret/generate-key" << std::endl;
46094628
return EINVAL;
46104629
}
4630+
if (generate_key == OPTION_SET_FALSE) {
4631+
if ((!access_key.empty()) || gen_access_key || (!secret_key.empty()) || gen_secret_key) {
4632+
cerr << "ERROR: key parameter conflict, if --generate-key is not set so no other key parameters can be set" << std::endl;
4633+
return EINVAL;
4634+
}
4635+
}
4636+
46114637
}
46124638

46134639
// default to pretty json
@@ -6772,7 +6798,7 @@ int main(int argc, const char **argv)
67726798
}
67736799
break;
67746800
case OPT::USER_CREATE:
6775-
if (!user_op.has_existing_user()) {
6801+
if (!user_op.has_existing_user() && (generate_key != OPTION_SET_FALSE)) {
67766802
user_op.set_generate_key(); // generate a new key by default
67776803
}
67786804
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
@@ -226,6 +226,7 @@
226226
--secret/--secret-key=<key> specify secret key
227227
--gen-access-key generate random access key (for S3)
228228
--gen-secret generate random secret key
229+
--generate-key create user with or without credentials
229230
--key-type=<type> key type, options are: swift, s3
230231
--key-active=<bool> activate or deactivate a key
231232
--temp-url-key[-2]=<key> temp url key

0 commit comments

Comments
 (0)