From c1d129fec4e8810e0080a276d29ec49fe4cfc4fb Mon Sep 17 00:00:00 2001 From: Niels de Vos Date: Tue, 2 Oct 2012 16:17:22 +0200 Subject: 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 Reviewed-on: http://review.gluster.org/4017 Tested-by: Gluster Build System Reviewed-by: Kaleb KEITHLEY Reviewed-by: Jeff Darcy Reviewed-by: Anand Avati --- libglusterfs/src/common-utils.c | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) (limited to 'libglusterfs/src/common-utils.c') diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index 791ecefe6..63d7f6e35 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 * - ::= *["."] * - ::= <[*[]] - ::= [*[]] */ +/* Syntax formed according to RFC 1912 (RFC 1123 & 952 are more restrictive) * + ::= *["."] * + ::= <[*[]] */ 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); -- cgit