summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPranith Kumar K <pranithk@gluster.com>2010-08-26 12:17:37 +0000
committerVijay Bellur <vijay@dev.gluster.com>2010-08-27 02:26:22 -0700
commitc97156833355697a381e5e6a1c14142d8c9f3593 (patch)
treee206197819b92f31cb7d23819d2dbfdc570a517e
parent228d11a9c91a5f5be9a2827a93cc5b7afef2d96a (diff)
cli, mgmt/glusterd: validate brick
Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>
-rw-r--r--cli/src/cli-cmd-parser.c36
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c9
2 files changed, 37 insertions, 8 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c
index d8464067d..4b8520c67 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)
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index a6f9082a8..9c767da30 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -670,8 +670,13 @@ glusterd_brickinfo_get (char *brick, glusterd_volinfo_t *volinfo,
hostname = strtok (dup_brick, ":");
path = strtok (NULL, ":");
- GF_ASSERT (hostname);
- GF_ASSERT (path);
+ if (!hostname || !path) {
+ gf_log ("", GF_LOG_ERROR,
+ "brick %s is not of form <HOSTNAME>:<export-dir>",
+ brick);
+ ret = -1;
+ goto out;
+ }
list_for_each_entry (tmp, &volinfo->bricks, brick_list) {