summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libglusterfs/src/common-utils.c36
-rw-r--r--libglusterfs/src/common-utils.h2
-rw-r--r--xlators/protocol/server/src/server-protocol.c5
3 files changed, 41 insertions, 2 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c
index 3f52a90a0..7b5e02a34 100644
--- a/libglusterfs/src/common-utils.c
+++ b/libglusterfs/src/common-utils.c
@@ -565,6 +565,42 @@ free_exit:
}
int
+gf_strstr (const char *str, const char *delim, const char *match)
+{
+ char *tmp = NULL;
+ char *save_ptr = NULL;
+ char *tmp_str = NULL;
+
+ int ret = 0;
+
+ tmp_str = strdup (str);
+
+ if (str == NULL || delim == NULL || match == NULL || tmp_str == NULL) {
+ ret = -1;
+ goto out;
+ }
+
+
+ tmp = strtok_r (tmp_str, delim, &save_ptr);
+
+ while (tmp) {
+ ret = strcmp (tmp, match);
+
+ if (ret == 0)
+ break;
+
+ tmp = strtok_r (NULL, delim, &save_ptr);
+ }
+
+out:
+ if (tmp_str)
+ free (tmp_str);
+
+ return ret;
+
+}
+
+int
gf_volume_name_validate (const char *volume_name)
{
const char *vname = NULL;
diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h
index 48788d295..05acfd83d 100644
--- a/libglusterfs/src/common-utils.h
+++ b/libglusterfs/src/common-utils.h
@@ -313,6 +313,8 @@ int gf_string2uint16 (const char *str, uint16_t *n);
int gf_string2uint32 (const char *str, uint32_t *n);
int gf_string2uint64 (const char *str, uint64_t *n);
+int gf_strstr (const char *str, const char *delim, const char *match);
+
int gf_string2ulong_base10 (const char *str, unsigned long *n);
int gf_string2uint_base10 (const char *str, unsigned int *n);
int gf_string2uint8_base10 (const char *str, uint8_t *n);
diff --git a/xlators/protocol/server/src/server-protocol.c b/xlators/protocol/server/src/server-protocol.c
index 993323a1d..608b31513 100644
--- a/xlators/protocol/server/src/server-protocol.c
+++ b/xlators/protocol/server/src/server-protocol.c
@@ -5239,7 +5239,8 @@ build_volfile_path (xlator_t *this, const char *key, char *path,
/* Make sure that conf-dir doesn't
* contain ".." in path
*/
- if (strstr (conf_dir_data->data, "..")) {
+ if ((gf_strstr (conf_dir_data->data,
+ "/", "..")) == -1) {
ret = -1;
gf_log (this->name, GF_LOG_ERROR,
"%s: invalid conf_dir",
@@ -5251,7 +5252,7 @@ build_volfile_path (xlator_t *this, const char *key, char *path,
* contain "../" in path
*/
- if (strstr (key, "../")) {
+ if ((gf_strstr (key, "/", "..")) == -1) {
ret = -1;
gf_log (this->name, GF_LOG_ERROR,
"%s: invalid key", key);