From 0d11145c0c2a9bac61398bff2fbab14820f0764a Mon Sep 17 00:00:00 2001 From: Mohammed Junaid Date: Thu, 14 Oct 2010 04:14:47 +0000 Subject: takes either 'y' or 'yes' and 'n' or 'no' for stop volume, delete volume and remove-brick Signed-off-by: Mohammed Junaid Signed-off-by: Anand V. Avati BUG: 1942 (cli: loose parsing of confirmation answer) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1942 --- cli/src/cli-cmd-volume.c | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) (limited to 'cli') diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 7a15f5cb356..8fb32f5de47 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -317,20 +317,40 @@ out: gf_answer_t cli_cmd_get_confirmation (struct cli_state *state, const char *question) { - char answer = '\0'; + char answer[5] = {'\0', }; char flush = '\0'; + int len = 0; if (state->mode & GLUSTER_MODE_SCRIPT) return GF_ANSWER_YES; - printf ("%s (y/n) ", question); - answer = getchar (); - flush = answer; - while ('\n' != flush) - flush = getchar (); - if ('y' != answer) { - return GF_ANSWER_NO; - } - return GF_ANSWER_YES; + + printf ("%s (y/n) ", question); + + fgets (answer, 4, stdin); + + len = strlen (answer); + + if (answer [len - 1] == '\n'){ + answer [--len] = '\0'; + } else { + do{ + flush = getchar (); + }while (flush != '\n'); + } + + if (len > 3) + goto out; + + if (!strcasecmp (answer, "y") || !strcasecmp (answer, "yes")) + return GF_ANSWER_YES; + + else if (!strcasecmp (answer, "n") || !strcasecmp (answer, "no")) + return GF_ANSWER_NO; + +out: + cli_out ("Invalid input, please enter y/n"); + + return GF_ANSWER_NO; } int -- cgit