From 85443f165b4169b2a448b3e24bc1d4dc5b3156a4 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 3 Sep 2019 08:27:52 +0000 Subject: upstream: factor out confirm_overwrite(); ok markus@ OpenBSD-Commit-ID: 304e95381b39c774c8fced7e5328b106a3ff0400 --- ssh-keygen.c | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) (limited to 'ssh-keygen.c') diff --git a/ssh-keygen.c b/ssh-keygen.c index 6426bb743..3c32513bf 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 * Copyright (c) 1994 Tatu Ylonen , 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); -- cgit v1.2.3