diff options
Diffstat (limited to 'cli/src/cli-cmd-parser.c')
| -rw-r--r-- | cli/src/cli-cmd-parser.c | 36 | 
1 files changed, 30 insertions, 6 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index d8464067dcd..4b8520c676b 100644 --- a/cli/src/cli-cmd-parser.c +++ b/cli/src/cli-cmd-parser.c @@ -41,6 +41,7 @@ cli_cmd_volume_create_parse (const char **words, int wordcount, dict_t **options  {          dict_t  *dict = NULL;          char    *volname = NULL; +        char    *delimiter = NULL;          int     ret = -1;          gf1_cluster_type type = GF_CLUSTER_TYPE_NONE;          int     count = 1; @@ -148,8 +149,9 @@ cli_cmd_volume_create_parse (const char **words, int wordcount, dict_t **options                  goto out;          strcpy (brick_list, " ");          while (brick_index < wordcount) { -                GF_ASSERT (words[brick_index]); -                if (!strchr (words[brick_index], ':')) { +                delimiter = strchr (words[brick_index], ':'); +                if (!delimiter || delimiter == words[brick_index] +                    || *(delimiter+1) != '/') {                          gf_log ("cli", GF_LOG_ERROR,                                  "wrong brick type, use <HOSTNAME>:<export-dir>");                          ret = -1; @@ -296,6 +298,7 @@ cli_cmd_volume_add_brick_parse (const char **words, int wordcount,  {          dict_t  *dict = NULL;          char    *volname = NULL; +        char    *delimiter = NULL;          int     ret = -1;          gf1_cluster_type type = GF_CLUSTER_TYPE_NONE;          int     count = 0; @@ -356,8 +359,9 @@ cli_cmd_volume_add_brick_parse (const char **words, int wordcount,          strcpy (brick_list, " ");          while (brick_index < wordcount) { -                GF_ASSERT (words[brick_index]); -                if (!strchr (words[brick_index], ':')) { +                delimiter = strchr (words[brick_index], ':'); +                if (!delimiter || delimiter == words[brick_index] +                    || *(delimiter+1) != '/') {                          gf_log ("cli", GF_LOG_ERROR,                                  "wrong brick type, use <HOSTNAME>:<export-dir>");                          ret = -1; @@ -413,6 +417,7 @@ cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,  {          dict_t  *dict = NULL;          char    *volname = NULL; +        char    *delimiter = NULL;          int     ret = -1;          gf1_cluster_type type = GF_CLUSTER_TYPE_NONE;          int     count = 0; @@ -475,7 +480,14 @@ cli_cmd_volume_remove_brick_parse (const char **words, int wordcount,                  goto out;          while (brick_index < wordcount) { -                GF_ASSERT (words[brick_index]); +                delimiter = strchr(words[brick_index], ':'); +                if (!delimiter || delimiter == words[brick_index] +                    || *(delimiter+1) != '/') { +                        gf_log ("cli", GF_LOG_ERROR, +                                "wrong brick type, use <HOSTNAME>:<export-dir>"); +                        ret = -1; +                        goto out; +                }                  snprintf (key, 50, "brick%d", ++brick_count);                  ret = dict_set_str (dict, key, (char *)words[brick_index++]); @@ -511,6 +523,7 @@ cli_cmd_volume_replace_brick_parse (const char **words, int wordcount,          int     ret = -1;          char    *op = NULL;          int     op_index = 0; +        char    *delimiter = NULL;          gf1_cli_replace_op replace_op = GF_REPLACE_OP_NONE;          GF_ASSERT (words); @@ -541,7 +554,9 @@ cli_cmd_volume_replace_brick_parse (const char **words, int wordcount,                  goto out;          } -        if (strchr ((char *)words[3], ':')) { +        delimiter = strchr ((char *)words[3], ':'); +        if (delimiter && delimiter != words[3] +            && *(delimiter+1) == '/') {                  ret = dict_set_str (dict, "src-brick", (char *)words[3]);                  if (ret) @@ -552,6 +567,15 @@ cli_cmd_volume_replace_brick_parse (const char **words, int wordcount,                          goto out;                  } +                delimiter = strchr ((char *)words[4], ':'); +                if (!delimiter || delimiter == words[4] +                    || *(delimiter+1) != '/') { +                        gf_log ("cli", GF_LOG_ERROR, +                                "wrong brick type, use <HOSTNAME>:<export-dir>"); +                        ret = -1; +                        goto out; +                } +                  ret = dict_set_str (dict, "dst-brick", (char *)words[4]);                  if (ret)  | 
