diff options
author | djm@openbsd.org <djm@openbsd.org> | 2019-09-03 08:27:52 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2019-09-03 18:39:31 +1000 |
commit | 85443f165b4169b2a448b3e24bc1d4dc5b3156a4 (patch) | |
tree | 1d28f80daa6ad37e1ecedda5f22c8c7362c7859b | |
parent | 9a396e33685633581c67d5ad9664570ef95281f2 (diff) |
upstream: factor out confirm_overwrite(); ok markus@
OpenBSD-Commit-ID: 304e95381b39c774c8fced7e5328b106a3ff0400
-rw-r--r-- | ssh-keygen.c | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/ssh-keygen.c b/ssh-keygen.c index 6426bb74..3c32513b 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keygen.c,v 1.342 2019/09/02 23:46:46 djm Exp $ */ +/* $OpenBSD: ssh-keygen.c,v 1.343 2019/09/03 08:27:52 djm Exp $ */ /* * Author: Tatu Ylonen <ylo@cs.hut.fi> * Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland @@ -222,6 +222,30 @@ type_bits_valid(int type, const char *name, u_int32_t *bitsp) #endif } +/* + * Checks whether a file exists and, if so, asks the user whether they wish + * to overwrite it. + * Returns nonzero if the file does not already exist or if the user agrees to + * overwrite, or zero otherwise. + */ +static int +confirm_overwrite(const char *filename) +{ + char yesno[3]; + struct stat st; + + if (stat(filename, &st) != 0) + return 1; + printf("%s already exists.\n", filename); + printf("Overwrite (y/n)? "); + fflush(stdout); + if (fgets(yesno, sizeof(yesno), stdin) == NULL) + return 0; + if (yesno[0] != 'y' && yesno[0] != 'Y') + return 0; + return 1; +} + static void ask_filename(struct passwd *pw, const char *prompt) { @@ -2881,16 +2905,8 @@ main(int argc, char **argv) } } /* If the file already exists, ask the user to confirm. */ - if (stat(identity_file, &st) >= 0) { - char yesno[3]; - printf("%s already exists.\n", identity_file); - printf("Overwrite (y/n)? "); - fflush(stdout); - if (fgets(yesno, sizeof(yesno), stdin) == NULL) - exit(1); - if (yesno[0] != 'y' && yesno[0] != 'Y') - exit(1); - } + if (!confirm_overwrite(identity_file)) + exit(1); /* Ask for a passphrase (twice). */ if (identity_passphrase) passphrase1 = xstrdup(identity_passphrase); |