summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmar Tumballi <amarts@redhat.com>2017-10-11 17:33:20 +0530
committerAmar Tumballi <amarts@redhat.com>2017-10-12 10:36:26 +0000
commita3767c4ceb527cb0f52b95650c841964cf7faec9 (patch)
tree518be95c0d473f4d4791bd88978e76510d0cfef1
parent9422446d72bc054962d72ace9912ecb885946d49 (diff)
protocol-auth: use the proper validation method
Currently, server protocol's init and glusterd's option validation methods are different, causing an issue. They should be same for having consistent behavior Updates #175 Change-Id: Ibbf9a18c7192b2d77f9b7675ae7da9b8d2fe5de4 Signed-off-by: Amar Tumballi <amarts@redhat.com>
-rw-r--r--libglusterfs/src/options.c4
-rw-r--r--libglusterfs/src/options.h5
-rw-r--r--tests/features/subdir-mount.t4
-rw-r--r--xlators/protocol/server/src/server.c40
4 files changed, 18 insertions, 35 deletions
diff --git a/libglusterfs/src/options.c b/libglusterfs/src/options.c
index f0292ea..a0f04c7 100644
--- a/libglusterfs/src/options.c
+++ b/libglusterfs/src/options.c
@@ -590,7 +590,7 @@ xlator_option_validate_addr (xlator_t *xl, const char *key, const char *value,
return ret;
}
-static int
+int
xlator_option_validate_addr_list (xlator_t *xl, const char *key,
const char *value, volume_option_t *opt,
char **op_errstr)
@@ -668,7 +668,7 @@ xlator_option_validate_addr_list (xlator_t *xl, const char *key,
out:
if (ret) {
snprintf (errstr, sizeof (errstr), "option %s %s: '%s' is not "
- "a valid internet-address-list", key, value, value);
+ "a valid internet-address-list", key, value, value);
gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",
errstr);
if (op_errstr)
diff --git a/libglusterfs/src/options.h b/libglusterfs/src/options.h
index 1d87e05..6308773 100644
--- a/libglusterfs/src/options.h
+++ b/libglusterfs/src/options.h
@@ -140,6 +140,11 @@ int xlator_options_validate_list (xlator_t *xl, dict_t *options,
int xlator_option_validate (xlator_t *xl, char *key, char *value,
volume_option_t *opt, char **op_errstr);
int xlator_options_validate (xlator_t *xl, dict_t *options, char **errstr);
+
+int xlator_option_validate_addr_list (xlator_t *xl, const char *key,
+ const char *value, volume_option_t *opt,
+ char **op_errstr);
+
volume_option_t *
xlator_volume_option_get (xlator_t *xl, const char *key);
diff --git a/tests/features/subdir-mount.t b/tests/features/subdir-mount.t
index 2fb0be4..ab7ef35 100644
--- a/tests/features/subdir-mount.t
+++ b/tests/features/subdir-mount.t
@@ -78,6 +78,10 @@ TEST ! $CLI volume set $V0 auth.allow "subdir2\(1.2.3.4\)"
# support subdir inside subdir
TEST $CLI volume set $V0 auth.allow '/subdir1/subdir1.1/subdir1.2/\(1.2.3.4\|::1\),/\(192.168.10.1\|192.168.11.1\),/subdir2\(1.2.3.4\)'
+TEST $CLI volume stop $V0
+
+TEST $CLI volume start $V0
+
# /subdir2 has not allowed IP
TEST $GFS --subdir-mount /subdir2 -s $H0 --volfile-id $V0 $M1
TEST stat $M1
diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c
index 19f2619..344046a 100644
--- a/xlators/protocol/server/src/server.c
+++ b/xlators/protocol/server/src/server.c
@@ -394,9 +394,6 @@ _check_for_auth_option (dict_t *d, char *k, data_t *v,
int ret = 0;
xlator_t *xl = NULL;
char *tail = NULL;
- char *tmp_addr_list = NULL;
- char *addr = NULL;
- char *tmp_str = NULL;
xl = tmp;
@@ -425,38 +422,15 @@ _check_for_auth_option (dict_t *d, char *k, data_t *v,
* valid auth.allow.<xlator>
* Now we verify the ip address
*/
- if (!strcmp (v->data, "*")) {
- ret = 0;
- goto out;
- }
-
- /* TODO-SUBDIR-MOUNT: fix the format */
- tmp_addr_list = gf_strdup (v->data);
- addr = strtok_r (tmp_addr_list, ",", &tmp_str);
- if (!addr)
- addr = v->data;
-
- while (addr) {
- if (valid_internet_address (addr, _gf_true)) {
- ret = 0;
- } else {
- ret = -1;
- gf_msg (xl->name, GF_LOG_ERROR, 0,
- PS_MSG_INTERNET_ADDR_ERROR,
- "internet address '%s'"
- " does not conform to"
- " standards.", addr);
- goto out;
- }
- if (tmp_str)
- addr = strtok_r (NULL, ",", &tmp_str);
- else
- addr = NULL;
- }
+ ret = xlator_option_validate_addr_list (xl, "auth-*", v->data,
+ NULL, NULL);
+ if (ret)
+ gf_msg (xl->name, GF_LOG_ERROR, 0,
+ PS_MSG_INTERNET_ADDR_ERROR,
+ "internet address '%s' does not conform "
+ "to standards.", v->data);
}
out:
- GF_FREE (tmp_addr_list);
-
return ret;
}