Skip to content

Commit

Permalink
Disallow bad combination of arguments in keygen grind (#17251)
Browse files Browse the repository at this point in the history
* Use constant for outfile sentinel value

* Require --use-mnemonic flag when --no-outfile flag passed to keygen grind
  • Loading branch information
steviez authored May 18, 2021
1 parent f7b0184 commit 6cba534
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 6 deletions.
3 changes: 3 additions & 0 deletions clap-utils/src/input_parsers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions clap-utils/src/keypair.rs
Original file line number Diff line number Diff line change
@@ -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,
},
Expand Down Expand Up @@ -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))),
Expand Down Expand Up @@ -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,
Expand Down
10 changes: 7 additions & 3 deletions keygen/src/keygen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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)
}

Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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 => (),
}
Expand Down Expand Up @@ -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);
}

Expand Down

0 comments on commit 6cba534

Please sign in to comment.