shared: add new API to validate a string as hostname or IP address
This commit is contained in:
@@ -1324,3 +1324,15 @@ int dns_name_apply_idna(const char *name, char **ret) {
|
||||
|
||||
return (int) n;
|
||||
}
|
||||
|
||||
int dns_name_is_valid_or_address(const char *name) {
|
||||
/* Returns > 0 if the specified name is either a valid IP address formatted as string or a valid DNS name */
|
||||
|
||||
if (isempty(name))
|
||||
return 0;
|
||||
|
||||
if (in_addr_from_string_auto(name, NULL, NULL) >= 0)
|
||||
return 1;
|
||||
|
||||
return dns_name_is_valid(name);
|
||||
}
|
||||
|
||||
@@ -107,3 +107,5 @@ int dns_name_equal_skip(const char *a, unsigned n_labels, const char *b);
|
||||
int dns_name_common_suffix(const char *a, const char *b, const char **ret);
|
||||
|
||||
int dns_name_apply_idna(const char *name, char **ret);
|
||||
|
||||
int dns_name_is_valid_or_address(const char *name);
|
||||
|
||||
@@ -627,6 +627,18 @@ static void test_dns_name_apply_idna(void) {
|
||||
test_dns_name_apply_idna_one("föö.bär.", "xn--f-1gaa.xn--br-via");
|
||||
}
|
||||
|
||||
static void test_dns_name_is_valid_or_address(void) {
|
||||
assert_se(dns_name_is_valid_or_address(NULL) == 0);
|
||||
assert_se(dns_name_is_valid_or_address("") == 0);
|
||||
assert_se(dns_name_is_valid_or_address("foobar") > 0);
|
||||
assert_se(dns_name_is_valid_or_address("foobar.com") > 0);
|
||||
assert_se(dns_name_is_valid_or_address("foobar..com") == 0);
|
||||
assert_se(dns_name_is_valid_or_address("foobar.com.") > 0);
|
||||
assert_se(dns_name_is_valid_or_address("127.0.0.1") > 0);
|
||||
assert_se(dns_name_is_valid_or_address("::") > 0);
|
||||
assert_se(dns_name_is_valid_or_address("::1") > 0);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
test_dns_label_unescape();
|
||||
@@ -654,6 +666,7 @@ int main(int argc, char *argv[]) {
|
||||
test_dns_name_compare_func();
|
||||
test_dns_name_common_suffix();
|
||||
test_dns_name_apply_idna();
|
||||
test_dns_name_is_valid_or_address();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user