]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: factor out confirm_overwrite(); ok markus@
authordjm@openbsd.org <djm@openbsd.org>
Tue, 3 Sep 2019 08:27:52 +0000 (08:27 +0000)
committerDamien Miller <djm@mindrot.org>
Tue, 3 Sep 2019 08:39:31 +0000 (18:39 +1000)
OpenBSD-Commit-ID: 304e95381b39c774c8fced7e5328b106a3ff0400

ssh-keygen.c

index 6426bb74345a5495357248bb797e23d03aa1a5df..3c32513bf632649c8c87030451b5bfe5319ca8ad 100644 (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);