d1681e
From 6d6e3a4100fcb9333d82618d64e96e49ddddcbf4 Mon Sep 17 00:00:00 2001
d1681e
From: Amar Tumballi <amarts@redhat.com>
d1681e
Date: Mon, 16 Oct 2017 11:44:59 +0530
d1681e
Subject: [PATCH 37/74] protocol-auth: use the proper validation method
d1681e
d1681e
Currently, server protocol's init and glusterd's option
d1681e
validation methods are different, causing an issue. They
d1681e
should be same for having consistent behavior
d1681e
d1681e
> Upstream:
d1681e
> Change-Id: Ibbf9a18c7192b2d77f9b7675ae7da9b8d2fe5de4
d1681e
> URL: https://review.gluster.org/#/c/18489/
d1681e
d1681e
Change-Id: Id595a1032b14233ca8f31d20813dca98476b2468
d1681e
Signed-off-by: Amar Tumballi <amarts@redhat.com>
d1681e
Reviewed-on: https://code.engineering.redhat.com/gerrit/120558
d1681e
Tested-by: RHGS Build Bot <nigelb@redhat.com>
d1681e
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
d1681e
---
d1681e
 libglusterfs/src/options.c           |  4 ++--
d1681e
 libglusterfs/src/options.h           |  5 +++++
d1681e
 tests/features/subdir-mount.t        |  4 ++++
d1681e
 xlators/protocol/server/src/server.c | 40 +++++++-----------------------------
d1681e
 4 files changed, 18 insertions(+), 35 deletions(-)
d1681e
d1681e
diff --git a/libglusterfs/src/options.c b/libglusterfs/src/options.c
d1681e
index f0292ea..a0f04c7 100644
d1681e
--- a/libglusterfs/src/options.c
d1681e
+++ b/libglusterfs/src/options.c
d1681e
@@ -590,7 +590,7 @@ xlator_option_validate_addr (xlator_t *xl, const char *key, const char *value,
d1681e
         return ret;
d1681e
 }
d1681e
 
d1681e
-static int
d1681e
+int
d1681e
 xlator_option_validate_addr_list (xlator_t *xl, const char *key,
d1681e
                                   const char *value, volume_option_t *opt,
d1681e
                                   char **op_errstr)
d1681e
@@ -668,7 +668,7 @@ xlator_option_validate_addr_list (xlator_t *xl, const char *key,
d1681e
 out:
d1681e
         if (ret) {
d1681e
                 snprintf (errstr, sizeof (errstr), "option %s %s: '%s' is not "
d1681e
-                "a valid internet-address-list", key, value, value);
d1681e
+                          "a valid internet-address-list", key, value, value);
d1681e
                 gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",
d1681e
                         errstr);
d1681e
                 if (op_errstr)
d1681e
diff --git a/libglusterfs/src/options.h b/libglusterfs/src/options.h
d1681e
index 3154dce..d259d44 100644
d1681e
--- a/libglusterfs/src/options.h
d1681e
+++ b/libglusterfs/src/options.h
d1681e
@@ -87,6 +87,11 @@ int xlator_options_validate_list (xlator_t *xl, dict_t *options,
d1681e
 int xlator_option_validate (xlator_t *xl, char *key, char *value,
d1681e
                             volume_option_t *opt, char **op_errstr);
d1681e
 int xlator_options_validate (xlator_t *xl, dict_t *options, char **errstr);
d1681e
+
d1681e
+int xlator_option_validate_addr_list (xlator_t *xl, const char *key,
d1681e
+                                      const char *value, volume_option_t *opt,
d1681e
+                                      char **op_errstr);
d1681e
+
d1681e
 volume_option_t *
d1681e
 xlator_volume_option_get (xlator_t *xl, const char *key);
d1681e
 
d1681e
diff --git a/tests/features/subdir-mount.t b/tests/features/subdir-mount.t
d1681e
index 2fb0be4..ab7ef35 100644
d1681e
--- a/tests/features/subdir-mount.t
d1681e
+++ b/tests/features/subdir-mount.t
d1681e
@@ -78,6 +78,10 @@ TEST ! $CLI volume set $V0 auth.allow "subdir2\(1.2.3.4\)"
d1681e
 # support subdir inside subdir
d1681e
 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\)'
d1681e
 
d1681e
+TEST $CLI volume stop $V0
d1681e
+
d1681e
+TEST $CLI volume start $V0
d1681e
+
d1681e
 # /subdir2 has not allowed IP
d1681e
 TEST $GFS --subdir-mount /subdir2 -s $H0 --volfile-id $V0 $M1
d1681e
 TEST stat $M1
d1681e
diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c
d1681e
index e47acb2..6dc9d0f 100644
d1681e
--- a/xlators/protocol/server/src/server.c
d1681e
+++ b/xlators/protocol/server/src/server.c
d1681e
@@ -386,9 +386,6 @@ _check_for_auth_option (dict_t *d, char *k, data_t *v,
d1681e
         int       ret           = 0;
d1681e
         xlator_t *xl            = NULL;
d1681e
         char     *tail          = NULL;
d1681e
-        char     *tmp_addr_list = NULL;
d1681e
-        char     *addr          = NULL;
d1681e
-        char     *tmp_str       = NULL;
d1681e
 
d1681e
         xl = tmp;
d1681e
 
d1681e
@@ -417,38 +414,15 @@ _check_for_auth_option (dict_t *d, char *k, data_t *v,
d1681e
                  * valid auth.allow.<xlator>
d1681e
                  * Now we verify the ip address
d1681e
                  */
d1681e
-                if (!strcmp (v->data, "*")) {
d1681e
-                        ret = 0;
d1681e
-                        goto out;
d1681e
-                }
d1681e
-
d1681e
-                /* TODO-SUBDIR-MOUNT: fix the format */
d1681e
-                tmp_addr_list = gf_strdup (v->data);
d1681e
-                addr = strtok_r (tmp_addr_list, ",", &tmp_str);
d1681e
-                if (!addr)
d1681e
-                        addr = v->data;
d1681e
-
d1681e
-                while (addr) {
d1681e
-                        if (valid_internet_address (addr, _gf_true)) {
d1681e
-                                ret = 0;
d1681e
-                        } else {
d1681e
-                                ret = -1;
d1681e
-                                gf_msg (xl->name, GF_LOG_ERROR, 0,
d1681e
-                                        PS_MSG_INTERNET_ADDR_ERROR,
d1681e
-                                        "internet address '%s'"
d1681e
-                                        " does not conform to"
d1681e
-                                        " standards.", addr);
d1681e
-                                goto out;
d1681e
-                        }
d1681e
-                        if (tmp_str)
d1681e
-                                addr = strtok_r (NULL, ",", &tmp_str);
d1681e
-                        else
d1681e
-                                addr = NULL;
d1681e
-                }
d1681e
+                ret = xlator_option_validate_addr_list (xl, "auth-*", v->data,
d1681e
+                                                        NULL, NULL);
d1681e
+                if (ret)
d1681e
+                        gf_msg (xl->name, GF_LOG_ERROR, 0,
d1681e
+                                PS_MSG_INTERNET_ADDR_ERROR,
d1681e
+                                "internet address '%s' does not conform "
d1681e
+                                "to standards.", v->data);
d1681e
         }
d1681e
 out:
d1681e
-        GF_FREE (tmp_addr_list);
d1681e
-
d1681e
         return ret;
d1681e
 }
d1681e
 
d1681e
-- 
d1681e
1.8.3.1
d1681e