diff options
3 files changed, 10 insertions, 6 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/HostName.java b/config-provisioning/src/main/java/com/yahoo/config/provision/HostName.java index e55737da18d..515ed24ae0b 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/HostName.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/HostName.java @@ -3,6 +3,7 @@ package com.yahoo.config.provision; import ai.vespa.http.DomainName; +import static ai.vespa.validation.Validation.require; import static ai.vespa.validation.Validation.requireLength; /** @@ -13,7 +14,10 @@ import static ai.vespa.validation.Validation.requireLength; public class HostName extends DomainName { private HostName(String value) { - super(requireLength(value, "hostname length", 1, 64)); + super(requireLength(require( ! value.endsWith("."), + value, "hostname cannot end with '.'"), + "hostname length", 1, 64), + "hostname"); } public static HostName of(String value) { diff --git a/vespajlib/src/main/java/ai/vespa/http/DomainName.java b/vespajlib/src/main/java/ai/vespa/http/DomainName.java index 737f6b6d863..86242a1af0c 100644 --- a/vespajlib/src/main/java/ai/vespa/http/DomainName.java +++ b/vespajlib/src/main/java/ai/vespa/http/DomainName.java @@ -16,16 +16,16 @@ import static ai.vespa.validation.Validation.requireMatch; public class DomainName extends PatternedStringWrapper<DomainName> { protected static final Pattern labelPattern = Pattern.compile("([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])"); - protected static final Pattern domainNamePattern = Pattern.compile("(" + labelPattern + "\\.)*" + labelPattern); + protected static final Pattern domainNamePattern = Pattern.compile("(" + labelPattern + "\\.)*" + labelPattern + "\\.?"); public static final DomainName localhost = DomainName.of("localhost"); - protected DomainName(String value) { - super(requireLength(value, "domain name length", 1, 255), domainNamePattern, "domain name"); + protected DomainName(String value, String description) { + super(requireLength(value, "domain name length", 1, 255), domainNamePattern, description); } public static DomainName of(String value) { - return new DomainName(value); + return new DomainName(value, "domain name"); } public static String requireLabel(String label) { diff --git a/vespajlib/src/test/java/ai/vespa/http/DomainNameTest.java b/vespajlib/src/test/java/ai/vespa/http/DomainNameTest.java index aa19e8667f6..4575ab4e8c1 100644 --- a/vespajlib/src/test/java/ai/vespa/http/DomainNameTest.java +++ b/vespajlib/src/test/java/ai/vespa/http/DomainNameTest.java @@ -15,6 +15,7 @@ class DomainNameTest { DomainName.of("name-123.0.321-eman"); DomainName.of(("." + "a".repeat(63)).repeat(4).substring(1)); DomainName.of("123"); + DomainName.of("foo."); assertThrows(IllegalArgumentException.class, () -> DomainName.of("_")); assertThrows(IllegalArgumentException.class, () -> DomainName.of("-")); @@ -22,7 +23,6 @@ class DomainNameTest { assertThrows(IllegalArgumentException.class, () -> DomainName.of("-foo")); assertThrows(IllegalArgumentException.class, () -> DomainName.of("foo-")); assertThrows(IllegalArgumentException.class, () -> DomainName.of(".foo")); - assertThrows(IllegalArgumentException.class, () -> DomainName.of("foo.")); assertThrows(IllegalArgumentException.class, () -> DomainName.of("foo..bar")); assertThrows(IllegalArgumentException.class, () -> DomainName.of("foo.-.bar")); assertThrows(IllegalArgumentException.class, () -> DomainName.of("foo/")); |