Disallow bad combination of arguments in keygen grind (#17251)
* Use constant for outfile sentinel value * Require --use-mnemonic flag when --no-outfile flag passed to keygen grind
This commit is contained in:
parent
f7b0184f81
commit
6cba53421e
|
@ -17,6 +17,9 @@ use {
|
|||
std::{str::FromStr, sync::Arc},
|
||||
};
|
||||
|
||||
// Sentinel value used to indicate to write to screen instead of file
|
||||
pub const STDOUT_OUTFILE_TOKEN: &str = "-";
|
||||
|
||||
// Return parsed values from matches at `name`
|
||||
pub fn values_of<T>(matches: &ArgMatches<'_>, name: &str) -> Option<Vec<T>>
|
||||
where
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use {
|
||||
crate::{
|
||||
input_parsers::pubkeys_sigs_of,
|
||||
input_parsers::{pubkeys_sigs_of, STDOUT_OUTFILE_TOKEN},
|
||||
offline::{SIGNER_ARG, SIGN_ONLY_ARG},
|
||||
ArgConstant,
|
||||
},
|
||||
|
@ -235,7 +235,7 @@ pub(crate) fn parse_signer_source<S: AsRef<str>>(
|
|||
}
|
||||
} else {
|
||||
match source {
|
||||
"-" => Ok(SignerSource::new(SignerSourceKind::Stdin)),
|
||||
STDOUT_OUTFILE_TOKEN => Ok(SignerSource::new(SignerSourceKind::Stdin)),
|
||||
ASK_KEYWORD => Ok(SignerSource::new_legacy(SignerSourceKind::Prompt)),
|
||||
_ => match Pubkey::from_str(source) {
|
||||
Ok(pubkey) => Ok(SignerSource::new(SignerSourceKind::Pubkey(pubkey))),
|
||||
|
@ -632,7 +632,7 @@ mod tests {
|
|||
#[test]
|
||||
fn test_parse_signer_source() {
|
||||
assert!(matches!(
|
||||
parse_signer_source("-").unwrap(),
|
||||
parse_signer_source(STDOUT_OUTFILE_TOKEN).unwrap(),
|
||||
SignerSource {
|
||||
kind: SignerSourceKind::Stdin,
|
||||
derivation_path: None,
|
||||
|
|
|
@ -5,6 +5,7 @@ use clap::{
|
|||
Arg, ArgMatches, SubCommand,
|
||||
};
|
||||
use solana_clap_utils::{
|
||||
input_parsers::STDOUT_OUTFILE_TOKEN,
|
||||
input_validators::{is_parsable, is_prompt_signer_source},
|
||||
keypair::{
|
||||
keypair_from_path, keypair_from_seed_phrase, prompt_passphrase, signer_from_path,
|
||||
|
@ -105,6 +106,9 @@ fn no_outfile_arg<'a, 'b>() -> Arg<'a, 'b> {
|
|||
Arg::with_name(NO_OUTFILE_ARG.name)
|
||||
.long(NO_OUTFILE_ARG.long)
|
||||
.conflicts_with_all(&["outfile", "silent"])
|
||||
// Require a seed phrase to avoid generating a keypair
|
||||
// but having no way to get the private key
|
||||
.requires("use_mnemonic")
|
||||
.help(NO_OUTFILE_ARG.help)
|
||||
}
|
||||
|
||||
|
@ -151,7 +155,7 @@ fn output_keypair(
|
|||
outfile: &str,
|
||||
source: &str,
|
||||
) -> Result<(), Box<dyn error::Error>> {
|
||||
if outfile == "-" {
|
||||
if outfile == STDOUT_OUTFILE_TOKEN {
|
||||
let mut stdout = std::io::stdout();
|
||||
write_keypair(&keypair, &mut stdout)?;
|
||||
} else {
|
||||
|
@ -550,7 +554,7 @@ fn do_main(matches: &ArgMatches<'_>) -> Result<(), Box<dyn error::Error>> {
|
|||
};
|
||||
|
||||
match outfile {
|
||||
Some("-") => (),
|
||||
Some(STDOUT_OUTFILE_TOKEN) => (),
|
||||
Some(outfile) => check_for_overwrite(&outfile, &matches),
|
||||
None => (),
|
||||
}
|
||||
|
@ -592,7 +596,7 @@ fn do_main(matches: &ArgMatches<'_>) -> Result<(), Box<dyn error::Error>> {
|
|||
path.to_str().unwrap()
|
||||
};
|
||||
|
||||
if outfile != "-" {
|
||||
if outfile != STDOUT_OUTFILE_TOKEN {
|
||||
check_for_overwrite(&outfile, &matches);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue