| 55 } |
55 } |
| 56 |
56 |
| 57 gboolean jabber_domain_validate(const char *str) |
57 gboolean jabber_domain_validate(const char *str) |
| 58 { |
58 { |
| 59 const char *c; |
59 const char *c; |
| |
60 size_t len; |
| 60 |
61 |
| 61 if(!str) |
62 if(!str) |
| 62 return TRUE; |
63 return TRUE; |
| 63 |
64 |
| 64 if(strlen(str) > 1023) |
65 len = strlen(str); |
| |
66 if (len > 1023) |
| 65 return FALSE; |
67 return FALSE; |
| 66 |
68 |
| 67 c = str; |
69 c = str; |
| 68 |
70 |
| 69 if (*c == '[') { |
71 if (*c == '[') { |
| 70 /* Check if str is a valid IPv6 identifier */ |
72 /* Check if str is a valid IPv6 identifier */ |
| 71 const gchar *end_bracket = strstr(c, "]"); |
|
| 72 gboolean valid = FALSE; |
73 gboolean valid = FALSE; |
| 73 |
74 |
| 74 if (!end_bracket || *(end_bracket + 1) != '\0') |
75 if (*(c + len - 1) != ']') |
| 75 return FALSE; |
76 return FALSE; |
| 76 |
77 |
| 77 /* Ugly, but in-place */ |
78 /* Ugly, but in-place */ |
| 78 *(gchar *)end_bracket = '\0'; |
79 *(gchar *)(c + len - 1) = '\0'; |
| 79 valid = purple_ipv6_address_is_valid(c + 1); |
80 valid = purple_ipv6_address_is_valid(c + 1); |
| 80 *(gchar *)end_bracket = ']'; |
81 *(gchar *)(c + len - 1) = ']'; |
| 81 |
82 |
| 82 return valid; |
83 return valid; |
| 83 } |
84 } |
| 84 |
85 |
| 85 while(c && *c) { |
86 while(c && *c) { |