upstream: factor out confirm_overwrite(); ok markus@

OpenBSD-Commit-ID: 304e95381b39c774c8fced7e5328b106a3ff0400
This commit is contained in:
djm@openbsd.org 2019-09-03 08:27:52 +00:00 committed by Damien Miller
parent 9a396e3368
commit 85443f165b
1 changed files with 27 additions and 11 deletions

View File

@ -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);