diff options
| author | Aravinda VK <avishwan@redhat.com> | 2016-10-25 12:56:05 +0530 | 
|---|---|---|
| committer | Aravinda VK <avishwan@redhat.com> | 2016-11-16 02:09:29 -0800 | 
| commit | 8a1993b32f476765f9f5c9294e7c3f2ae75198a0 (patch) | |
| tree | 601fcc2a4de4a495b1cecd1b2f0212fb0e9c1708 /cli/src | |
| parent | 922af37e33acb59c6f8beca40a9314593b484d1a (diff) | |
geo-rep/cli: Validate Checkpoint label
Checkpoint command accepts "now" or any other Time
in "%Y-%m-%d %H:%M:%S" format as label.
Validation added with this patch for the input label. Checkpoint set
will fail for invalid label.
BUG: 1388401
Change-Id: I23518c151ab4b294f64cae3b78baaacb3d8f7b82
Signed-off-by: Aravinda VK <avishwan@redhat.com>
Reviewed-on: http://review.gluster.org/15721
Smoke: Gluster Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Saravanakumar Arumugam <sarumuga@redhat.com>
Reviewed-by: Kotresh HR <khiremat@redhat.com>
Diffstat (limited to 'cli/src')
| -rw-r--r-- | cli/src/cli-cmd-parser.c | 25 | 
1 files changed, 25 insertions, 0 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index 1498f6cb99a..38054a94f50 100644 --- a/cli/src/cli-cmd-parser.c +++ b/cli/src/cli-cmd-parser.c @@ -13,6 +13,7 @@  #include <stdint.h>  #include <pthread.h>  #include <fnmatch.h> +#include <time.h>  #include "cli.h"  #include "cli-cmd.h" @@ -2582,6 +2583,9 @@ config_parse (const char **words, int wordcount, dict_t *dict,          char               *append_str = NULL;          size_t             append_len = 0;          char               *subop = NULL; +        char               *ret_chkpt = NULL; +        struct tm           checkpoint_time; +        char                chkpt_buf[20] = "";          switch ((wordcount - 1) - cmdi) {          case 0: @@ -2643,6 +2647,27 @@ config_parse (const char **words, int wordcount, dict_t *dict,                          }                          snprintf (append_str, 300, "%" GF_PRI_SECOND,                                    tv.tv_sec); +                } else if ((strcmp (words[cmdi + 1], "checkpoint") == 0) && +                           (strcmp (append_str, "now") != 0)) { +                        memset(&checkpoint_time, 0, sizeof(struct tm)); +                        ret_chkpt = strptime(append_str, "%Y-%m-%d %H:%M:%S", +                                             &checkpoint_time); + +                        if (ret_chkpt == NULL) { +                                ret = -1; +                                cli_err ("Invalid Checkpoint label. Use format " +                                         "\"Y-m-d H:M:S\", Example: 2016-10-25 15:30:45"); +                                goto out; +                        } +                        GF_FREE (append_str); +                        append_str = GF_CALLOC (1, 300, cli_mt_append_str); +                        if (!append_str) { +                                ret = -1; +                                goto out; +                        } +                        strftime (chkpt_buf, sizeof(chkpt_buf), "%s", +                                  &checkpoint_time); +                        snprintf (append_str, 300, "%s", chkpt_buf);                  }                  ret = dict_set_dynstr (dict, "op_value", append_str);  | 
