1
0
mirror of https://github.com/google/nomulus synced 2026-05-18 13:51:45 +00:00

Compare commits

...

2 Commits

Author SHA1 Message Date
Weimin Yu
0dc7ab99d7 Update CreateCdnsTld command for RST Tests (#2891)
Add a flag indicating that a Sandbox TLD should use the production
servers.

No additional TLD name pattern checks. Cloud DNS has an allowlist for
names that may use production servers.

Also updated default descriptive name generation: dropping the trailing
'.', and replacing remaining dots with '_'.
2025-11-25 19:41:44 +00:00
Ben McIlwain
76d4dfbb04 Add "augmented_latin.txt" IDN table in existing txt table format (#2884)
This contains the same codepoints from the
core/src/main/java/google/registry/idn/Latin-IDN.xml file, just in the old .txt
IDN format that Nomulus actually ingests.
2025-11-24 21:26:05 +00:00
3 changed files with 237 additions and 6 deletions

View File

@@ -0,0 +1,177 @@
# URL: https://www.iana.org/domains/idn-tables/tables/google_latn_1.0.txt
# Policy: https://www.registry.google/about/policies/domainabuse/
U+002D # HYPHEN-MINUS
U+0030 # DIGIT ZERO
U+0031 # DIGIT ONE
U+0032 # DIGIT TWO
U+0033 # DIGIT THREE
U+0034 # DIGIT FOUR
U+0035 # DIGIT FIVE
U+0036 # DIGIT SIX
U+0037 # DIGIT SEVEN
U+0038 # DIGIT EIGHT
U+0039 # DIGIT NINE
U+0061 # LATIN SMALL LETTER A
U+0062 # LATIN SMALL LETTER B
U+0063 # LATIN SMALL LETTER C
U+0064 # LATIN SMALL LETTER D
U+0065 # LATIN SMALL LETTER E
U+0066 # LATIN SMALL LETTER F
U+0067 # LATIN SMALL LETTER G
U+0068 # LATIN SMALL LETTER H
U+0069 # LATIN SMALL LETTER I
U+006A # LATIN SMALL LETTER J
U+006B # LATIN SMALL LETTER K
U+006C # LATIN SMALL LETTER L
U+006D # LATIN SMALL LETTER M
U+006E # LATIN SMALL LETTER N
U+006F # LATIN SMALL LETTER O
U+0070 # LATIN SMALL LETTER P
U+0071 # LATIN SMALL LETTER Q
U+0072 # LATIN SMALL LETTER R
U+0073 # LATIN SMALL LETTER S
U+0074 # LATIN SMALL LETTER T
U+0075 # LATIN SMALL LETTER U
U+0076 # LATIN SMALL LETTER V
U+0077 # LATIN SMALL LETTER W
U+0078 # LATIN SMALL LETTER X
U+0079 # LATIN SMALL LETTER Y
U+007A # LATIN SMALL LETTER Z
U+00E0 # LATIN SMALL LETTER A WITH GRAVE
U+00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
U+00E3 # LATIN SMALL LETTER A WITH TILDE
U+00E4 # LATIN SMALL LETTER A WITH DIAERESIS
U+00E5 # LATIN SMALL LETTER A WITH RING ABOVE
U+00E6 # LATIN SMALL LETTER AE
U+00E7 # LATIN SMALL LETTER C WITH CEDILLA
U+00E8 # LATIN SMALL LETTER E WITH GRAVE
U+00E9 # LATIN SMALL LETTER E WITH ACUTE
U+00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
U+00EB # LATIN SMALL LETTER E WITH DIAERESIS
U+00EC # LATIN SMALL LETTER I WITH GRAVE
U+00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
U+00F0 # LATIN SMALL LETTER ETH
U+00F2 # LATIN SMALL LETTER O WITH GRAVE
U+00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
U+00F5 # LATIN SMALL LETTER O WITH TILDE
U+00F6 # LATIN SMALL LETTER O WITH DIAERESIS
U+00F8 # LATIN SMALL LETTER O WITH STROKE
U+00F9 # LATIN SMALL LETTER U WITH GRAVE
U+00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
U+00FD # LATIN SMALL LETTER Y WITH ACUTE
U+00FE # LATIN SMALL LETTER THORN
U+00FF # LATIN SMALL LETTER Y WITH DIAERESIS
U+0103 # LATIN SMALL LETTER A WITH BREVE
U+0105 # LATIN SMALL LETTER A WITH OGONEK
U+0107 # LATIN SMALL LETTER C WITH ACUTE
U+0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX
U+010D # LATIN SMALL LETTER C WITH CARON
U+010F # LATIN SMALL LETTER D WITH CARON
U+0111 # LATIN SMALL LETTER D WITH STROKE
U+0113 # LATIN SMALL LETTER E WITH MACRON
U+0117 # LATIN SMALL LETTER E WITH DOT ABOVE
U+0119 # LATIN SMALL LETTER E WITH OGONEK
U+011B # LATIN SMALL LETTER E WITH CARON
U+011D # LATIN SMALL LETTER G WITH CIRCUMFLEX
U+011F # LATIN SMALL LETTER G WITH BREVE
U+0123 # LATIN SMALL LETTER G WITH CEDILLA
U+0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX
U+0127 # LATIN SMALL LETTER H WITH STROKE
U+012B # LATIN SMALL LETTER I WITH MACRON
U+012F # LATIN SMALL LETTER I WITH OGONEK
U+0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX
U+0137 # LATIN SMALL LETTER K WITH CEDILLA
U+013A # LATIN SMALL LETTER L WITH ACUTE
U+013C # LATIN SMALL LETTER L WITH CEDILLA
U+013E # LATIN SMALL LETTER L WITH CARON
U+0142 # LATIN SMALL LETTER L WITH STROKE
U+0146 # LATIN SMALL LETTER N WITH CEDILLA
U+0148 # LATIN SMALL LETTER N WITH CARON
U+0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
U+0153 # LATIN SMALL LIGATURE OE
U+0155 # LATIN SMALL LETTER R WITH ACUTE
U+0159 # LATIN SMALL LETTER R WITH CARON
U+015B # LATIN SMALL LETTER S WITH ACUTE
U+015D # LATIN SMALL LETTER S WITH CIRCUMFLEX
U+015F # LATIN SMALL LETTER S WITH CEDILLA
U+0161 # LATIN SMALL LETTER S WITH CARON
U+0165 # LATIN SMALL LETTER T WITH CARON
U+0167 # LATIN SMALL LETTER T WITH STROKE
U+016B # LATIN SMALL LETTER U WITH MACRON
U+016D # LATIN SMALL LETTER U WITH BREVE
U+016F # LATIN SMALL LETTER U WITH RING ABOVE
U+0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
U+0173 # LATIN SMALL LETTER U WITH OGONEK
U+0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
U+0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
U+017A # LATIN SMALL LETTER Z WITH ACUTE
U+017E # LATIN SMALL LETTER Z WITH CARON
U+0188 # LATIN SMALL LETTER C WITH HOOK
U+0199 # LATIN SMALL LETTER K WITH HOOK
U+01A1 # LATIN SMALL LETTER O WITH HORN
U+01A5 # LATIN SMALL LETTER P WITH HOOK
U+01AD # LATIN SMALL LETTER T WITH HOOK
U+01B0 # LATIN SMALL LETTER U WITH HORN
U+01B4 # LATIN SMALL LETTER Y WITH HOOK
U+01E9 # LATIN SMALL LETTER K WITH CARON
U+01EF # LATIN SMALL LETTER EZH WITH CARON
U+0219 # LATIN SMALL LETTER S WITH COMMA BELOW
U+021B # LATIN SMALL LETTER T WITH COMMA BELOW
U+024D # LATIN SMALL LETTER R WITH STROKE
U+0253 # LATIN SMALL LETTER B WITH HOOK
U+0254 # LATIN SMALL LETTER OPEN O
U+0256 # LATIN SMALL LETTER D WITH TAIL
U+0257 # LATIN SMALL LETTER D WITH HOOK
U+0259 # LATIN SMALL LETTER SCHWA
U+025B # LATIN SMALL LETTER OPEN E
U+0260 # LATIN SMALL LETTER G WITH HOOK
U+0268 # LATIN SMALL LETTER I WITH STROKE
U+0272 # LATIN SMALL LETTER N WITH LEFT HOOK
U+0289 # LATIN SMALL LETTER U BAR
U+0292 # LATIN SMALL LETTER EZH
U+1E13 # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
U+1E3D # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
U+1E49 # LATIN SMALL LETTER N WITH LINE BELOW
U+1E4B # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
U+1E63 # LATIN SMALL LETTER S WITH DOT BELOW
U+1E6D # LATIN SMALL LETTER T WITH DOT BELOW
U+1E71 # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
U+1E8D # LATIN SMALL LETTER X WITH DIAERESIS
U+1EA1 # LATIN SMALL LETTER A WITH DOT BELOW
U+1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
U+1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
U+1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
U+1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
U+1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
U+1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
U+1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
U+1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
U+1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
U+1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
U+1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
U+1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE
U+1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
U+1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
U+1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
U+1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
U+1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
U+1ECB # LATIN SMALL LETTER I WITH DOT BELOW
U+1ECD # LATIN SMALL LETTER O WITH DOT BELOW
U+1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
U+1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
U+1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
U+1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
U+1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
U+1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
U+1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
U+1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
U+1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
U+1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
U+1EE5 # LATIN SMALL LETTER U WITH DOT BELOW
U+1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
U+1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
U+1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
U+1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
U+1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
U+1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW
U+1EF9 # LATIN SMALL LETTER Y WITH TILDE

View File

@@ -21,6 +21,8 @@ import com.beust.jcommander.Parameters;
import com.google.api.services.dns.Dns;
import com.google.api.services.dns.model.ManagedZone;
import com.google.api.services.dns.model.ManagedZoneDnsSecConfig;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import google.registry.config.RegistryConfig.Config;
import jakarta.inject.Inject;
import java.io.IOException;
@@ -52,6 +54,13 @@ final class CreateCdnsTld extends ConfirmingCommand {
description = "In Sandbox, skip the dns_name format check.")
boolean skipSandboxTldCheck;
@Parameter(
names = "--use_prod_name_servers_in_sandbox",
description =
"In Sandbox, create zone on the production name servers, e.g., for ICANN tests. "
+ "Ignored in other environments.")
boolean useProdNameServersInSandbox;
@Inject
@Config("projectId")
String projectId;
@@ -77,15 +86,25 @@ final class CreateCdnsTld extends ConfirmingCommand {
}
}
String nameServerSetName;
if (RegistryToolEnvironment.get().equals(RegistryToolEnvironment.PRODUCTION)) {
nameServerSetName = "cloud-dns-registry";
} else if (RegistryToolEnvironment.get().equals(RegistryToolEnvironment.SANDBOX)
&& useProdNameServersInSandbox) {
nameServerSetName = "cloud-dns-registry";
} else {
nameServerSetName = "cloud-dns-registry-test";
}
managedZone =
new ManagedZone()
.setDescription(description)
.setNameServerSet(
RegistryToolEnvironment.get() == RegistryToolEnvironment.PRODUCTION
? "cloud-dns-registry"
: "cloud-dns-registry-test")
.setNameServerSet(nameServerSetName)
.setDnsName(dnsName)
.setName((name != null) ? name : dnsName)
.setName(
(name != null)
? name
: Joiner.on('_').join(Splitter.on('.').omitEmptyStrings().split(dnsName)))
.setDnssecConfig(new ManagedZoneDnsSecConfig().setNonExistence("nsec").setState("on"));
}

View File

@@ -71,7 +71,7 @@ class CreateCdnsTldTest extends CommandTestCase<CreateCdnsTld> {
void testNameDefault() throws Exception {
runCommand("--dns_name=tld.", "--description=test run", "--force");
ManagedZone zone = requestBody.getValue();
assertThat(zone).isEqualTo(createZone("cloud-dns-registry-test", "test run", "tld.", "tld."));
assertThat(zone).isEqualTo(createZone("cloud-dns-registry-test", "test run", "tld.", "tld"));
}
@Test
@@ -109,4 +109,39 @@ class CreateCdnsTldTest extends CommandTestCase<CreateCdnsTld> {
"--description=test run",
"--force");
}
@Test
void testSandbox_defaultNameServer() throws Exception {
runCommandInEnvironment(
RegistryToolEnvironment.SANDBOX,
"--dns_name=abc.test.",
"--description=test run",
"--force");
ManagedZone zone = requestBody.getValue();
assertThat(zone.getNameServerSet()).isEqualTo("cloud-dns-registry-test");
}
@Test
void testSandbox_useProdNameServer() throws Exception {
runCommandInEnvironment(
RegistryToolEnvironment.SANDBOX,
"--use_prod_name_servers_in_sandbox",
"--dns_name=abc.test.",
"--description=test run",
"--force");
ManagedZone zone = requestBody.getValue();
assertThat(zone.getNameServerSet()).isEqualTo("cloud-dns-registry");
}
@Test
void testProdNameServerFlag_ignoredIfNotSandbox() throws Exception {
runCommandInEnvironment(
RegistryToolEnvironment.QA,
"--use_prod_name_servers_in_sandbox",
"--dns_name=abc.test.",
"--description=test run",
"--force");
ManagedZone zone = requestBody.getValue();
assertThat(zone.getNameServerSet()).isEqualTo("cloud-dns-registry-test");
}
}