From 6d6e3a4100fcb9333d82618d64e96e49ddddcbf4 Mon Sep 17 00:00:00 2001 From: Amar Tumballi Date: Mon, 16 Oct 2017 11:44:59 +0530 Subject: [PATCH 37/74] 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 > Upstream: > Change-Id: Ibbf9a18c7192b2d77f9b7675ae7da9b8d2fe5de4 > URL: https://review.gluster.org/#/c/18489/ Change-Id: Id595a1032b14233ca8f31d20813dca98476b2468 Signed-off-by: Amar Tumballi Reviewed-on: https://code.engineering.redhat.com/gerrit/120558 Tested-by: RHGS Build Bot Reviewed-by: Atin Mukherjee --- libglusterfs/src/options.c | 4 ++-- libglusterfs/src/options.h | 5 +++++ tests/features/subdir-mount.t | 4 ++++ xlators/protocol/server/src/server.c | 40 +++++++----------------------------- 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 3154dce..d259d44 100644 --- a/libglusterfs/src/options.h +++ b/libglusterfs/src/options.h @@ -87,6 +87,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 e47acb2..6dc9d0f 100644 --- a/xlators/protocol/server/src/server.c +++ b/xlators/protocol/server/src/server.c @@ -386,9 +386,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; @@ -417,38 +414,15 @@ _check_for_auth_option (dict_t *d, char *k, data_t *v, * valid auth.allow. * 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; } -- 1.8.3.1