diff options
Diffstat (limited to 'cli/src')
| -rw-r--r-- | cli/src/cli-cmd-parser.c | 50 | 
1 files changed, 47 insertions, 3 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index ef69235d673..b169b77c68d 100644 --- a/cli/src/cli-cmd-parser.c +++ b/cli/src/cli-cmd-parser.c @@ -36,7 +36,6 @@  #include "protocol-common.h"  #include "cli1-xdr.h" -  static const char *  id_sel (void *wcon)  { @@ -636,6 +635,43 @@ out:  }  int32_t +cli_cmd_valid_ip_list (char *iplist) +{ +        int     ret = 0; +        char    *duplist = NULL; +        char    *addr = NULL; +        char    *saveptr = NULL; + +        GF_ASSERT (iplist); +        duplist = gf_strdup (iplist); + +        if (!duplist) { +                ret = -1; +                goto out; +        } + +        addr = strtok_r (duplist, ",", &saveptr); +        if (!addr) { +                ret = -1; +                goto out; +        } +        while (addr) { +                if (!valid_internet_address (addr) && +                    !valid_wildcard_internet_address (addr)) { +                        cli_out ("Invalid ip or wildcard : %s", addr); +                        ret= -1; +                        goto out; +                } +                addr = strtok_r (NULL, ",", &saveptr); +        } +out: +        if (duplist) +                GF_FREE (duplist); +        gf_log ("cli", GF_LOG_INFO, "Returning %d", ret); +        return ret; +} + +int32_t  cli_cmd_volume_set_parse (const char **words, int wordcount, dict_t **options)  {          dict_t  *dict = NULL; @@ -691,10 +727,18 @@ cli_cmd_volume_set_parse (const char **words, int wordcount, dict_t **options)  		if ( !key || !value) {  			ret = -1;  			goto out; -        	} +	        }                  count++; - +                if (!strncmp ("auth.allow", key, sizeof (key)) || +                    !strncmp ("auth.reject", key, sizeof (key))) { +                        ret = cli_cmd_valid_ip_list (value); +                        if (ret) { +                                gf_log ("cli", GF_LOG_ERROR, +                                        "invalid ips given"); +                                goto out; +                        } +                }                  sprintf (str, "key%d", count);                  ret = dict_set_str (dict, str, key);                  if (ret)  | 
