mirror of
https://github.com/systemd/systemd.git
synced 2024-12-25 01:34:28 +03:00
shared: recognize DNS names with more than one trailing dot as invalid (#4111)
One trailing dot is valid, but more than one isn't. This also fixes glibc's posix/tst-getaddrinfo5 test. Fixes #3978.
This commit is contained in:
parent
0dd99f86ad
commit
f35c467db3
@ -131,6 +131,10 @@ int dns_label_unescape(const char **name, char *dest, size_t sz) {
|
||||
if (r == 0 && *n)
|
||||
return -EINVAL;
|
||||
|
||||
/* More than one trailing dot? */
|
||||
if (*n == '.')
|
||||
return -EINVAL;
|
||||
|
||||
if (sz >= 1 && d)
|
||||
*d = 0;
|
||||
|
||||
|
@ -48,6 +48,7 @@ static void test_dns_label_unescape(void) {
|
||||
test_dns_label_unescape_one("..", "", 20, -EINVAL);
|
||||
test_dns_label_unescape_one(".foobar", "", 20, -EINVAL);
|
||||
test_dns_label_unescape_one("foobar.", "foobar", 20, 6);
|
||||
test_dns_label_unescape_one("foobar..", "foobar", 20, -EINVAL);
|
||||
}
|
||||
|
||||
static void test_dns_name_to_wire_format_one(const char *what, const char *expect, size_t buffer_sz, int ret) {
|
||||
@ -359,6 +360,7 @@ static void test_dns_name_is_valid_one(const char *s, int ret) {
|
||||
static void test_dns_name_is_valid(void) {
|
||||
test_dns_name_is_valid_one("foo", 1);
|
||||
test_dns_name_is_valid_one("foo.", 1);
|
||||
test_dns_name_is_valid_one("foo..", 0);
|
||||
test_dns_name_is_valid_one("Foo", 1);
|
||||
test_dns_name_is_valid_one("foo.bar", 1);
|
||||
test_dns_name_is_valid_one("foo.bar.baz", 1);
|
||||
@ -366,6 +368,7 @@ static void test_dns_name_is_valid(void) {
|
||||
test_dns_name_is_valid_one("foo..bar", 0);
|
||||
test_dns_name_is_valid_one(".foo.bar", 0);
|
||||
test_dns_name_is_valid_one("foo.bar.", 1);
|
||||
test_dns_name_is_valid_one("foo.bar..", 0);
|
||||
test_dns_name_is_valid_one("\\zbar", 0);
|
||||
test_dns_name_is_valid_one("ä", 1);
|
||||
test_dns_name_is_valid_one("\n", 0);
|
||||
|
Loading…
Reference in New Issue
Block a user