summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaushal M <kaushal@redhat.com>2012-04-19 13:17:49 +0530
committerVijay Bellur <vijay@gluster.com>2012-04-20 09:32:17 -0700
commite2216fbc37831f76039cae77bf724550827daa0f (patch)
tree86621048b0f18383ed16a75fa64174663c623d1f
parent3a26a7324128aed8181959b995d09ffc19ec2265 (diff)
cli: Strip whitespace from "volume set" option values
Strips the whitespace from options values before sending to glusterd. This prevents options containing whitespace to be written to the volfiles which would cause the volfile parser to fail. Change-Id: I46faee7b0853141fa102d06bb067c7ab499a2f6e BUG: 813937 Signed-off-by: Kaushal M <kaushal@redhat.com> Reviewed-on: http://review.gluster.com/3192 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Amar Tumballi <amarts@redhat.com> Reviewed-by: Vijay Bellur <vijay@gluster.com>
-rw-r--r--cli/src/cli-cmd-parser.c4
-rw-r--r--libglusterfs/src/common-utils.c31
-rw-r--r--libglusterfs/src/common-utils.h1
3 files changed, 36 insertions, 0 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c
index 2aba56b9b3d..aef13a77df9 100644
--- a/cli/src/cli-cmd-parser.c
+++ b/cli/src/cli-cmd-parser.c
@@ -688,6 +688,10 @@ cli_cmd_volume_set_parse (const char **words, int wordcount, dict_t **options)
count++;
+ ret = gf_strip_whitespace (value, strlen (value));
+ if (ret == -1)
+ goto out;
+
sprintf (str, "key%d", count);
ret = dict_set_str (dict, str, key);
if (ret)
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c
index cc73a8b7abb..0e133c005e3 100644
--- a/libglusterfs/src/common-utils.c
+++ b/libglusterfs/src/common-utils.c
@@ -2024,3 +2024,34 @@ gf_client_pid_check (gf_client_pid_t npid)
return ( (npid > GF_CLIENT_PID_MIN) && (npid < GF_CLIENT_PID_MAX) )
? 0 : -1;
}
+
+/* Strips all whitespace characters in a string and returns length of new string
+ * on success
+ */
+int
+gf_strip_whitespace (char *str, int len)
+{
+ int i = 0;
+ int new_len = 0;
+ char *new_str = NULL;
+
+ GF_ASSERT (str);
+
+ new_str = GF_CALLOC (1, len + 1, gf_common_mt_char);
+ if (new_str == NULL)
+ return -1;
+
+ for (i = 0; i < len; i++) {
+ if (!isspace (str[i]))
+ new_str[new_len++] = str[i];
+ }
+ new_str[new_len] = '\0';
+
+ if (new_len != len) {
+ memset (str, 0, len);
+ strncpy (str, new_str, new_len);
+ }
+
+ GF_FREE (new_str);
+ return new_len;
+}
diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h
index 86f1b051f33..7e6da9ed2d4 100644
--- a/libglusterfs/src/common-utils.h
+++ b/libglusterfs/src/common-utils.h
@@ -494,4 +494,5 @@ char *get_path_name (char *word, char **path);
void gf_path_strip_trailing_slashes (char *path);
uint64_t get_mem_size ();
int gf_client_pid_check (gf_client_pid_t npid);
+int gf_strip_whitespace (char *str, int len);
#endif /* _COMMON_UTILS_H */