mirror of
https://github.com/google/nomulus.git
synced 2025-05-22 04:09:46 +02:00
Remove some fields from WHOIS output
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=191445626
This commit is contained in:
parent
377fe5f573
commit
839e4aa682
9 changed files with 34 additions and 161 deletions
|
@ -26,8 +26,6 @@ import com.googlecode.objectify.Key;
|
||||||
import google.registry.model.contact.ContactPhoneNumber;
|
import google.registry.model.contact.ContactPhoneNumber;
|
||||||
import google.registry.model.contact.ContactResource;
|
import google.registry.model.contact.ContactResource;
|
||||||
import google.registry.model.contact.PostalInfo;
|
import google.registry.model.contact.PostalInfo;
|
||||||
import google.registry.model.domain.DesignatedContact;
|
|
||||||
import google.registry.model.domain.DesignatedContact.Type;
|
|
||||||
import google.registry.model.domain.DomainResource;
|
import google.registry.model.domain.DomainResource;
|
||||||
import google.registry.model.domain.GracePeriod;
|
import google.registry.model.domain.GracePeriod;
|
||||||
import google.registry.model.eppcommon.StatusValue;
|
import google.registry.model.eppcommon.StatusValue;
|
||||||
|
@ -101,9 +99,6 @@ final class DomainWhoisResponse extends WhoisResponseImpl {
|
||||||
abuseContact.map(RegistrarContact::getPhoneNumber).orElse(null))
|
abuseContact.map(RegistrarContact::getPhoneNumber).orElse(null))
|
||||||
.emitStatusValues(domain.getStatusValues(), domain.getGracePeriods())
|
.emitStatusValues(domain.getStatusValues(), domain.getGracePeriods())
|
||||||
.emitContact("Registrant", domain.getRegistrant(), preferUnicode)
|
.emitContact("Registrant", domain.getRegistrant(), preferUnicode)
|
||||||
.emitContact("Admin", getContactReference(Type.ADMIN), preferUnicode)
|
|
||||||
.emitContact("Tech", getContactReference(Type.TECH), preferUnicode)
|
|
||||||
.emitContact("Billing", getContactReference(Type.BILLING), preferUnicode)
|
|
||||||
.emitSet(
|
.emitSet(
|
||||||
"Name Server",
|
"Name Server",
|
||||||
domain.loadNameserverFullyQualifiedHostNames(),
|
domain.loadNameserverFullyQualifiedHostNames(),
|
||||||
|
@ -118,14 +113,6 @@ final class DomainWhoisResponse extends WhoisResponseImpl {
|
||||||
return WhoisResponseResults.create(plaintext, 1);
|
return WhoisResponseResults.create(plaintext, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the contact of the given type, or null if it does not exist. */
|
|
||||||
@Nullable
|
|
||||||
private Key<ContactResource> getContactReference(final Type type) {
|
|
||||||
Optional<DesignatedContact> contactOfType =
|
|
||||||
domain.getContacts().stream().filter(d -> d.getType() == type).findFirst();
|
|
||||||
return contactOfType.map(DesignatedContact::getContactKey).orElse(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Output emitter with logic for domains. */
|
/** Output emitter with logic for domains. */
|
||||||
class DomainEmitter extends Emitter<DomainEmitter> {
|
class DomainEmitter extends Emitter<DomainEmitter> {
|
||||||
DomainEmitter emitPhone(
|
DomainEmitter emitPhone(
|
||||||
|
@ -140,9 +127,7 @@ final class DomainWhoisResponse extends WhoisResponseImpl {
|
||||||
|
|
||||||
/** Emit the contact entry of the given type. */
|
/** Emit the contact entry of the given type. */
|
||||||
DomainEmitter emitContact(
|
DomainEmitter emitContact(
|
||||||
String contactType,
|
String contactType, @Nullable Key<ContactResource> contact, boolean preferUnicode) {
|
||||||
@Nullable Key<ContactResource> contact,
|
|
||||||
boolean preferUnicode) {
|
|
||||||
if (contact == null) {
|
if (contact == null) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -151,24 +136,21 @@ final class DomainWhoisResponse extends WhoisResponseImpl {
|
||||||
// someone's attention.
|
// someone's attention.
|
||||||
ContactResource contactResource = ofy().load().key(contact).now();
|
ContactResource contactResource = ofy().load().key(contact).now();
|
||||||
if (contactResource == null) {
|
if (contactResource == null) {
|
||||||
logger.severefmt("(BUG) Broken reference found from domain %s to contact %s",
|
logger.severefmt(
|
||||||
|
"(BUG) Broken reference found from domain %s to contact %s",
|
||||||
domain.getFullyQualifiedDomainName(), contact);
|
domain.getFullyQualifiedDomainName(), contact);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
// ICANN Consistent Labeling & Display policy requires that this be the ROID.
|
PostalInfo postalInfo =
|
||||||
emitField(ImmutableList.of("Registry", contactType, "ID"), contactResource.getRepoId());
|
chooseByUnicodePreference(
|
||||||
PostalInfo postalInfo = chooseByUnicodePreference(
|
preferUnicode,
|
||||||
preferUnicode,
|
contactResource.getLocalizedPostalInfo(),
|
||||||
contactResource.getLocalizedPostalInfo(),
|
contactResource.getInternationalizedPostalInfo());
|
||||||
contactResource.getInternationalizedPostalInfo());
|
|
||||||
if (postalInfo != null) {
|
if (postalInfo != null) {
|
||||||
emitFieldIfDefined(ImmutableList.of(contactType, "Name"), postalInfo.getName());
|
|
||||||
emitFieldIfDefined(ImmutableList.of(contactType, "Organization"), postalInfo.getOrg());
|
emitFieldIfDefined(ImmutableList.of(contactType, "Organization"), postalInfo.getOrg());
|
||||||
emitAddress(contactType, postalInfo.getAddress());
|
emitRegistrantAddress(contactType, postalInfo.getAddress());
|
||||||
}
|
}
|
||||||
return emitPhone(contactType, "Phone", contactResource.getVoiceNumber())
|
return this;
|
||||||
.emitPhone(contactType, "Fax", contactResource.getFaxNumber())
|
|
||||||
.emitField(ImmutableList.of(contactType, "Email"), contactResource.getEmailAddress());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Emits status values and grace periods as a set, in the AWIP format. */
|
/** Emits status values and grace periods as a set, in the AWIP format. */
|
||||||
|
|
|
@ -48,7 +48,7 @@ class RegistrarWhoisResponse extends WhoisResponseImpl {
|
||||||
String plaintext =
|
String plaintext =
|
||||||
new RegistrarEmitter()
|
new RegistrarEmitter()
|
||||||
.emitField("Registrar", registrar.getRegistrarName())
|
.emitField("Registrar", registrar.getRegistrarName())
|
||||||
.emitAddress(
|
.emitRegistrarAddress(
|
||||||
null,
|
null,
|
||||||
chooseByUnicodePreference(
|
chooseByUnicodePreference(
|
||||||
preferUnicode,
|
preferUnicode,
|
||||||
|
|
|
@ -135,8 +135,8 @@ abstract class WhoisResponseImpl implements WhoisResponse {
|
||||||
return emitField(Joiner.on(' ').join(nameParts), value);
|
return emitField(Joiner.on(' ').join(nameParts), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Emit a contact address. */
|
/** Emit registrar address. */
|
||||||
E emitAddress(@Nullable String prefix, @Nullable Address address) {
|
E emitRegistrarAddress(@Nullable String prefix, @Nullable Address address) {
|
||||||
prefix = isNullOrEmpty(prefix) ? "" : prefix + " ";
|
prefix = isNullOrEmpty(prefix) ? "" : prefix + " ";
|
||||||
if (address != null) {
|
if (address != null) {
|
||||||
emitList(prefix + "Street", address.getStreet());
|
emitList(prefix + "Street", address.getStreet());
|
||||||
|
@ -148,6 +148,16 @@ abstract class WhoisResponseImpl implements WhoisResponse {
|
||||||
return thisCastToDerived();
|
return thisCastToDerived();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Emit registrant address. */
|
||||||
|
E emitRegistrantAddress(@Nullable String prefix, @Nullable Address address) {
|
||||||
|
prefix = isNullOrEmpty(prefix) ? "" : prefix + " ";
|
||||||
|
if (address != null) {
|
||||||
|
emitField(prefix + "State/Province", address.getState());
|
||||||
|
emitField(prefix + "Country", address.getCountryCode());
|
||||||
|
}
|
||||||
|
return thisCastToDerived();
|
||||||
|
}
|
||||||
|
|
||||||
/** Emit Whois Inaccuracy Complaint Form link. Only used for domain queries. */
|
/** Emit Whois Inaccuracy Complaint Form link. Only used for domain queries. */
|
||||||
E emitWicfLink() {
|
E emitWicfLink() {
|
||||||
emitField(ICANN_REPORTING_URL_FIELD, ICANN_REPORTING_URL);
|
emitField(ICANN_REPORTING_URL_FIELD, ICANN_REPORTING_URL);
|
||||||
|
|
|
@ -237,7 +237,6 @@ public class WhoisActionTest {
|
||||||
assertThat(domain1.getRepoId()).isNotEqualTo(domain2.getRepoId());
|
assertThat(domain1.getRepoId()).isNotEqualTo(domain2.getRepoId());
|
||||||
newWhoisAction("domain cat.lol\r\n").run();
|
newWhoisAction("domain cat.lol\r\n").run();
|
||||||
assertThat(response.getStatus()).isEqualTo(200);
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
assertThat(response.getPayload()).contains("Dr. Pablo");
|
|
||||||
assertThat(response.getPayload()).contains("ns1.google.lol");
|
assertThat(response.getPayload()).contains("ns1.google.lol");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -163,9 +163,16 @@ public class WhoisHttpActionTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRun_wickedLineFeedForgeryInDatastore_crlfSubstitutedWithSpace() throws Exception {
|
public void testRun_wickedLineFeedForgeryInDatastore_crlfSubstitutedWithSpace() throws Exception {
|
||||||
String evilName = "Eric\r\nSchmidt";
|
ContactResource trl = makeContactResource("5372808-TRL", "Eric Schmidt", "bog@cat.みんな");
|
||||||
ContactResource trl = persistResource(
|
trl =
|
||||||
makeContactResource("5372808-TRL", evilName, "bog@cat.みんな"));
|
persistResource(
|
||||||
|
trl.asBuilder()
|
||||||
|
.setInternationalizedPostalInfo(
|
||||||
|
trl.getInternationalizedPostalInfo()
|
||||||
|
.asBuilder()
|
||||||
|
.setOrg("Galactic\r\nEmpire")
|
||||||
|
.build())
|
||||||
|
.build());
|
||||||
persistResource(makeDomainResource(
|
persistResource(makeDomainResource(
|
||||||
"cat.みんな", trl,
|
"cat.みんな", trl,
|
||||||
trl,
|
trl,
|
||||||
|
@ -174,7 +181,7 @@ public class WhoisHttpActionTest {
|
||||||
persistResource(makeHostResource("ns2.cat.みんな", "bad:f00d:cafe::15:beef")),
|
persistResource(makeHostResource("ns2.cat.みんな", "bad:f00d:cafe::15:beef")),
|
||||||
persistResource(makeRegistrar("example", "Example Registrar", Registrar.State.ACTIVE))));
|
persistResource(makeRegistrar("example", "Example Registrar", Registrar.State.ACTIVE))));
|
||||||
newWhoisHttpAction("/domain/cat.みんな").run();
|
newWhoisHttpAction("/domain/cat.みんな").run();
|
||||||
assertThat(response.getPayload()).contains("Eric Schmidt");
|
assertThat(response.getPayload()).contains("Galactic Empire");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -13,39 +13,9 @@ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibit
|
||||||
Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
|
Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
|
||||||
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
|
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
|
||||||
Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
|
Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
|
||||||
Registry Registrant ID: 4-ROID
|
|
||||||
Registrant Name: Goblin Market
|
|
||||||
Registrant Organization: GOOGLE INCORPORATED <script>
|
Registrant Organization: GOOGLE INCORPORATED <script>
|
||||||
Registrant Street: 123 Example Boulevard <script>
|
|
||||||
Registrant City: KOKOMO
|
|
||||||
Registrant State/Province: BM
|
Registrant State/Province: BM
|
||||||
Registrant Postal Code: 31337
|
|
||||||
Registrant Country: US
|
Registrant Country: US
|
||||||
Registrant Phone: +1.2126660420
|
|
||||||
Registrant Fax: +1.2126660420
|
|
||||||
Registrant Email: lol@cat.lol
|
|
||||||
Registry Admin ID: 5-ROID
|
|
||||||
Admin Name: Santa Claus
|
|
||||||
Admin Organization: GOOGLE INCORPORATED <script>
|
|
||||||
Admin Street: 123 Example Boulevard <script>
|
|
||||||
Admin City: KOKOMO
|
|
||||||
Admin State/Province: BM
|
|
||||||
Admin Postal Code: 31337
|
|
||||||
Admin Country: US
|
|
||||||
Admin Phone: +1.2126660420
|
|
||||||
Admin Fax: +1.2126660420
|
|
||||||
Admin Email: BOFH@cat.lol
|
|
||||||
Registry Tech ID: 6-ROID
|
|
||||||
Tech Name: The Raven
|
|
||||||
Tech Organization: GOOGLE INCORPORATED <script>
|
|
||||||
Tech Street: 123 Example Boulevard <script>
|
|
||||||
Tech City: KOKOMO
|
|
||||||
Tech State/Province: BM
|
|
||||||
Tech Postal Code: 31337
|
|
||||||
Tech Country: US
|
|
||||||
Tech Phone: +1.2126660420
|
|
||||||
Tech Fax: +1.2126660420
|
|
||||||
Tech Email: bog@cat.lol
|
|
||||||
Name Server: ns1.cat.lol
|
Name Server: ns1.cat.lol
|
||||||
Name Server: ns2.cat.lol
|
Name Server: ns2.cat.lol
|
||||||
DNSSEC: signedDelegation
|
DNSSEC: signedDelegation
|
||||||
|
|
|
@ -13,39 +13,9 @@ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibit
|
||||||
Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
|
Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
|
||||||
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
|
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
|
||||||
Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
|
Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
|
||||||
Registry Registrant ID: 4-ROID
|
|
||||||
Registrant Name: (◕‿◕)
|
|
||||||
Registrant Organization: GOOGLE INCORPORATED <script>
|
Registrant Organization: GOOGLE INCORPORATED <script>
|
||||||
Registrant Street: 123 Example Boulevard <script>
|
|
||||||
Registrant City: KOKOMO
|
|
||||||
Registrant State/Province: BM
|
Registrant State/Province: BM
|
||||||
Registrant Postal Code: 31337
|
|
||||||
Registrant Country: US
|
Registrant Country: US
|
||||||
Registrant Phone: +1.2126660420
|
|
||||||
Registrant Fax: +1.2126660420
|
|
||||||
Registrant Email: lol@cat.みんな
|
|
||||||
Registry Admin ID: 5-ROID
|
|
||||||
Admin Name: Santa Claus
|
|
||||||
Admin Organization: GOOGLE INCORPORATED <script>
|
|
||||||
Admin Street: 123 Example Boulevard <script>
|
|
||||||
Admin City: KOKOMO
|
|
||||||
Admin State/Province: BM
|
|
||||||
Admin Postal Code: 31337
|
|
||||||
Admin Country: US
|
|
||||||
Admin Phone: +1.2126660420
|
|
||||||
Admin Fax: +1.2126660420
|
|
||||||
Admin Email: BOFH@cat.みんな
|
|
||||||
Registry Tech ID: 6-ROID
|
|
||||||
Tech Name: The Raven
|
|
||||||
Tech Organization: GOOGLE INCORPORATED <script>
|
|
||||||
Tech Street: 123 Example Boulevard <script>
|
|
||||||
Tech City: KOKOMO
|
|
||||||
Tech State/Province: BM
|
|
||||||
Tech Postal Code: 31337
|
|
||||||
Tech Country: US
|
|
||||||
Tech Phone: +1.2126660420
|
|
||||||
Tech Fax: +1.2126660420
|
|
||||||
Tech Email: bog@cat.みんな
|
|
||||||
Name Server: ns1.cat.xn--q9jyb4c
|
Name Server: ns1.cat.xn--q9jyb4c
|
||||||
Name Server: ns2.cat.xn--q9jyb4c
|
Name Server: ns2.cat.xn--q9jyb4c
|
||||||
DNSSEC: signedDelegation
|
DNSSEC: signedDelegation
|
||||||
|
|
|
@ -13,39 +13,9 @@ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibit
|
||||||
Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
|
Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
|
||||||
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
|
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
|
||||||
Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
|
Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
|
||||||
Registry Registrant ID: 4-ROID
|
|
||||||
Registrant Name: (◕‿◕)
|
|
||||||
Registrant Organization: GOOGLE INCORPORATED <script>
|
Registrant Organization: GOOGLE INCORPORATED <script>
|
||||||
Registrant Street: 123 Example Boulevard <script>
|
|
||||||
Registrant City: KOKOMO
|
|
||||||
Registrant State/Province: BM
|
Registrant State/Province: BM
|
||||||
Registrant Postal Code: 31337
|
|
||||||
Registrant Country: US
|
Registrant Country: US
|
||||||
Registrant Phone: +1.2126660420
|
|
||||||
Registrant Fax: +1.2126660420
|
|
||||||
Registrant Email: lol@cat.みんな
|
|
||||||
Registry Admin ID: 5-ROID
|
|
||||||
Admin Name: Santa Claus
|
|
||||||
Admin Organization: GOOGLE INCORPORATED <script>
|
|
||||||
Admin Street: 123 Example Boulevard <script>
|
|
||||||
Admin City: KOKOMO
|
|
||||||
Admin State/Province: BM
|
|
||||||
Admin Postal Code: 31337
|
|
||||||
Admin Country: US
|
|
||||||
Admin Phone: +1.2126660420
|
|
||||||
Admin Fax: +1.2126660420
|
|
||||||
Admin Email: BOFH@cat.みんな
|
|
||||||
Registry Tech ID: 6-ROID
|
|
||||||
Tech Name: The Raven
|
|
||||||
Tech Organization: GOOGLE INCORPORATED <script>
|
|
||||||
Tech Street: 123 Example Boulevard <script>
|
|
||||||
Tech City: KOKOMO
|
|
||||||
Tech State/Province: BM
|
|
||||||
Tech Postal Code: 31337
|
|
||||||
Tech Country: US
|
|
||||||
Tech Phone: +1.2126660420
|
|
||||||
Tech Fax: +1.2126660420
|
|
||||||
Tech Email: bog@cat.みんな
|
|
||||||
Name Server: ns1.cat.みんな
|
Name Server: ns1.cat.みんな
|
||||||
Name Server: ns2.cat.みんな
|
Name Server: ns2.cat.みんな
|
||||||
DNSSEC: signedDelegation
|
DNSSEC: signedDelegation
|
||||||
|
|
|
@ -15,44 +15,9 @@ Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
|
||||||
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
|
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
|
||||||
Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
|
Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
|
||||||
Domain Status: transferPeriod https://icann.org/epp#transferPeriod
|
Domain Status: transferPeriod https://icann.org/epp#transferPeriod
|
||||||
Registry Registrant ID: 4-TLD
|
|
||||||
Registrant Name: EXAMPLE REGISTRANT
|
|
||||||
Registrant Organization: EXAMPLE ORGANIZATION
|
Registrant Organization: EXAMPLE ORGANIZATION
|
||||||
Registrant Street: 123 EXAMPLE STREET
|
|
||||||
Registrant City: ANYTOWN
|
|
||||||
Registrant State/Province: AP
|
Registrant State/Province: AP
|
||||||
Registrant Postal Code: A1A1A1
|
|
||||||
Registrant Country: EX
|
Registrant Country: EX
|
||||||
Registrant Phone: +1.5555551212
|
|
||||||
Registrant Phone Ext: 1234
|
|
||||||
Registrant Fax: +1.5555551213
|
|
||||||
Registrant Fax Ext: 4321
|
|
||||||
Registrant Email: EMAIL@EXAMPLE.tld
|
|
||||||
Registry Admin ID: 5-TLD
|
|
||||||
Admin Name: EXAMPLE REGISTRANT ADMINISTRATIVE
|
|
||||||
Admin Organization: EXAMPLE REGISTRANT ORGANIZATION
|
|
||||||
Admin Street: 123 EXAMPLE STREET
|
|
||||||
Admin City: ANYTOWN
|
|
||||||
Admin State/Province: AP
|
|
||||||
Admin Postal Code: A1A1A1
|
|
||||||
Admin Country: EX
|
|
||||||
Admin Phone: +1.5555551212
|
|
||||||
Admin Phone Ext: 1234
|
|
||||||
Admin Fax: +1.5555551213
|
|
||||||
Admin Email: EMAIL@EXAMPLE.tld
|
|
||||||
Registry Tech ID: 6-TLD
|
|
||||||
Tech Name: EXAMPLE REGISTRAR TECHNICAL
|
|
||||||
Tech Organization: EXAMPLE REGISTRAR LLC
|
|
||||||
Tech Street: 123 EXAMPLE STREET
|
|
||||||
Tech City: ANYTOWN
|
|
||||||
Tech State/Province: AP
|
|
||||||
Tech Postal Code: A1A1A1
|
|
||||||
Tech Country: EX
|
|
||||||
Tech Phone: +1.1235551234
|
|
||||||
Tech Phone Ext: 1234
|
|
||||||
Tech Fax: +1.5555551213
|
|
||||||
Tech Fax Ext: 93
|
|
||||||
Tech Email: EMAIL@EXAMPLE.tld
|
|
||||||
Name Server: ns01.exampleregistrar.tld
|
Name Server: ns01.exampleregistrar.tld
|
||||||
Name Server: ns02.exampleregistrar.tld
|
Name Server: ns02.exampleregistrar.tld
|
||||||
DNSSEC: signedDelegation
|
DNSSEC: signedDelegation
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue