diff options
| author | Niels de Vos <ndevos@redhat.com> | 2012-10-02 16:17:22 +0200 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2012-10-02 10:27:14 -0700 | 
| commit | c1d129fec4e8810e0080a276d29ec49fe4cfc4fb (patch) | |
| tree | 2e8f8125aa8dacb0f61f0fea011e6f019a401f7a /libglusterfs | |
| parent | 7d347b2b0fc1c6d5262e42bf6f89e61a1fc18204 (diff) | |
common-utils: valid_host_name() should allow (sub)domains starting/ending with a digit
Some (sub)domains start or end with a digit. If this is the case, it
will not be possible to 'gluster peer probe' hosts in that (sub)domain.
This is overly restrictive, and RFC 1912 contains a note that describes
the common use of start/end digits in (sub)domains:
>
> Allowable characters in a label for a host name are only ASCII
> letters, digits, and the `-' character.  Labels may not be all
> numbers, but may have a leading digit  (e.g., 3com.com).  Labels must
> end and begin only with a letter or digit.  See [RFC 1035] and [RFC
> 1123].  (Labels were initially restricted in [RFC 1035] to start with
> a letter, and some older hosts still reportedly have problems with
> the relaxation in [RFC 1123].)  Note there are some Internet
> hostnames which violate this rule (411.org, 1776.com).
>
This change will also allow (sub)domains to consist out of digits only,
like the example of 411.org above. It is still not allowed to start or
and a (sub)domain with a `-' (dash) character.
Change-Id: I7236edfe80fd08f28247536bef5287f63b564a63
BUG: 862297
Signed-off-by: Niels de Vos <ndevos@redhat.com>
Reviewed-on: http://review.gluster.org/4017
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'libglusterfs')
| -rw-r--r-- | libglusterfs/src/common-utils.c | 30 | 
1 files changed, 7 insertions, 23 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index 791ecefe62b..63d7f6e3530 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -1625,11 +1625,9 @@ get_nth_word (const char *str, int n)          return word;  } -/* RFC 1123 & 952 */ -/* Syntax formed combining RFC 1123 & 952                                     * -   <hname> ::= <first-name>*["."<gen-name>]                                   * -   <first-name> ::= <let-or-digit> <[*[<let-or-digit-or-hyphen>]<let-or-digit>] -   <gen-name> ::= <let>[*[<let-or-digit-or-hyphen>]<let-or-digit>]            */ +/* Syntax formed according to RFC 1912 (RFC 1123 & 952 are more restrictive)  * +   <hname> ::= <gen-name>*["."<gen-name>]                                     * +   <gen-name> ::= <let-or-digit> <[*[<let-or-digit-or-hyphen>]<let-or-digit>] */  char  valid_host_name (char *address, int length)  { @@ -1650,27 +1648,13 @@ valid_host_name (char *address, int length)                  ret = 0;                  goto out;          } -        temp_str = strtok_r (dup_addr,".", &save_ptr); - -        /* first-name */ -        if (!temp_str || -            !isalnum(temp_str[0]) || -            !isalnum (temp_str[strlen(temp_str)-1])) { -                ret = 0; -                goto out; -        } -        for (i = 1; i < (strlen (temp_str) - 1); i++) { -                if (!isalnum (temp_str[i]) && (temp_str[i] != '-')) { -                        ret = 0; -                        goto out; -                } -        }          /* gen-name */ -        while ((temp_str = strtok_r (NULL, ".", &save_ptr))) { +        temp_str = strtok_r (dup_addr, ".", &save_ptr); +        do {                  str_len = strlen (temp_str); -                if (!isalpha (temp_str[0]) || +                if (!isalnum (temp_str[0]) ||                      !isalnum (temp_str[str_len-1])) {                          ret = 0;                          goto out; @@ -1681,7 +1665,7 @@ valid_host_name (char *address, int length)                                  goto out;                          }                  } -        } +        } while ((temp_str = strtok_r (NULL, ".", &save_ptr)));  out:          GF_FREE (dup_addr);  | 
