draft-ietf-regext-rdap-redacted-02.txt | draft-ietf-regext-rdap-redacted-03.txt | |||
---|---|---|---|---|
Network Working Group J.G. Gould | Network Working Group J.G. Gould | |||
Internet-Draft D.S. Smith | Internet-Draft D.S. Smith | |||
Intended status: Standards Track VeriSign, Inc. | Intended status: Standards Track VeriSign, Inc. | |||
Expires: 22 May 2022 J.K. Kolker | Expires: 3 September 2022 J.K. Kolker | |||
R.C. Carney | R.C. Carney | |||
GoDaddy Inc. | GoDaddy Inc. | |||
18 November 2021 | 2 March 2022 | |||
Redacted Fields in the Registration Data Access Protocol (RDAP) Response | Redacted Fields in the Registration Data Access Protocol (RDAP) Response | |||
draft-ietf-regext-rdap-redacted-02 | draft-ietf-regext-rdap-redacted-03 | |||
Abstract | Abstract | |||
This document describes an RDAP extension for explicitly identifying | This document describes an RDAP extension for explicitly identifying | |||
redacted RDAP response fields, using JSONPath as the default | redacted RDAP response fields, using JSONPath as the default | |||
expression language. | expression language. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
skipping to change at page 1, line 35 ¶ | skipping to change at page 1, line 35 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on 22 May 2022. | This Internet-Draft will expire on 3 September 2022. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
extracted from this document must include Simplified BSD License text | extracted from this document must include Revised BSD License text as | |||
as described in Section 4.e of the Trust Legal Provisions and are | described in Section 4.e of the Trust Legal Provisions and are | |||
provided without warranty as described in the Simplified BSD License. | provided without warranty as described in the Revised BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
2. Conventions Used in This Document . . . . . . . . . . . . . . 3 | 2. Conventions Used in This Document . . . . . . . . . . . . . . 3 | |||
3. Redaction Methods . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Redaction Methods . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3.1. Redaction by Removal Method . . . . . . . . . . . . . . . 4 | 3.1. Redaction by Removal Method . . . . . . . . . . . . . . . 4 | |||
3.2. Redaction by Empty Value Method . . . . . . . . . . . . . 4 | 3.2. Redaction by Empty Value Method . . . . . . . . . . . . . 4 | |||
4. Redacted RDAP Response . . . . . . . . . . . . . . . . . . . 5 | 4. Redacted RDAP Response . . . . . . . . . . . . . . . . . . . 5 | |||
4.1. RDAP Conformance . . . . . . . . . . . . . . . . . . . . 5 | 4.1. RDAP Conformance . . . . . . . . . . . . . . . . . . . . 6 | |||
4.2. "redacted" Member . . . . . . . . . . . . . . . . . . . . 6 | 4.2. "redacted" Member . . . . . . . . . . . . . . . . . . . . 6 | |||
5. JSONPath Considerations . . . . . . . . . . . . . . . . . . . 24 | 5. JSONPath Considerations . . . . . . . . . . . . . . . . . . . 27 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 | |||
6.1. RDAP Extensions Registry . . . . . . . . . . . . . . . . 25 | 6.1. RDAP Extensions Registry . . . . . . . . . . . . . . . . 29 | |||
6.2. JSON Values Registry . . . . . . . . . . . . . . . . . . 26 | 6.2. JSON Values Registry . . . . . . . . . . . . . . . . . . 29 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 26 | 7. Implementation Status . . . . . . . . . . . . . . . . . . . . 29 | |||
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 26 | 7.1. IIT-CNR/Registro.it RDAP Server . . . . . . . . . . . . . 30 | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 30 | |||
9.1. Informative References . . . . . . . . . . . . . . . . . 26 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 30 | |||
9.2. Normative References . . . . . . . . . . . . . . . . . . 26 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
Appendix A. Change History . . . . . . . . . . . . . . . . . . . 27 | 10.1. Informative References . . . . . . . . . . . . . . . . . 30 | |||
A.1. Change from 00 to 01 . . . . . . . . . . . . . . . . . . 27 | 10.2. Normative References . . . . . . . . . . . . . . . . . . 31 | |||
A.2. Change from 01 to 02 . . . . . . . . . . . . . . . . . . 28 | Appendix A. Change History . . . . . . . . . . . . . . . . . . . 32 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 | A.1. Change from 00 to 01 . . . . . . . . . . . . . . . . . . 32 | |||
A.2. Change from 01 to 02 . . . . . . . . . . . . . . . . . . 33 | ||||
A.3. Change from 02 to 03 . . . . . . . . . . . . . . . . . . 33 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 33 | ||||
1. Introduction | 1. Introduction | |||
This document describes an RDAP extension for explicitly identifying | This document describes an RDAP extension for explicitly identifying | |||
redacted RDAP response fields, using JSONPath as the default | redacted RDAP response fields, using JSONPath as the default | |||
expression language. A redacted RDAP field is one that has data | expression language. A redacted RDAP field is one that has data | |||
removed from the RDAP response due to the lack of client privilege to | removed from the RDAP response due to the lack of client privilege to | |||
receive the field. This extension can be used to identify redacted | receive the field. This extension can be used to identify redacted | |||
RDAP fields in any RDAP object class, as defined in [RFC7483], or | RDAP fields in any RDAP object class, as defined in [RFC9083], or | |||
RDAP fields defined in RDAP extensions. Because an RDAP response may | RDAP fields defined in RDAP extensions. Because an RDAP response may | |||
exclude a field due to either the lack of data or based on the lack | exclude a field due to either the lack of data or based on the lack | |||
of RDAP client privileges, this extension is used to explicitly | of RDAP client privileges, this extension is used to explicitly | |||
specify which RDAP fields are not included in the RDAP response due | specify which RDAP fields are not included in the RDAP response due | |||
to redaction. It thereby provides a capability for disambiguation | to redaction. It thereby provides a capability for disambiguation | |||
between redaction and possible other reasons for data or field | between redaction and possible other reasons for data or field | |||
absence. | absence. | |||
In [RFC7482] RDAP supports both lookup and search queries, where a | In [RFC9082] RDAP supports both lookup and search queries, where a | |||
lookup query responds with a single object and a search query | lookup query responds with a single object and a search query | |||
responds with a list of objects. This document applies to redaction | responds with a list of objects. This document applies to redaction | |||
of a single object of a lookup response and in each of the objects of | of a single object of a lookup response and in each of the objects of | |||
a search response. | a search response. | |||
JSONPath, as defined in [I-D.ietf-jsonpath-base], is used as the | JSONPath, as defined in [I-D.ietf-jsonpath-base], is used as the | |||
default expression language to reference RDAP fields that have been | default expression language to reference RDAP fields that have been | |||
redacted. The redacted JSON fields will either be removed or have | redacted. The redacted JSON fields will either be removed or have | |||
empty values in the RDAP response. JSON is defined by [RFC8259]. | empty values in the RDAP response. JSON is defined by [RFC8259]. | |||
skipping to change at page 3, line 32 ¶ | skipping to change at page 3, line 32 ¶ | |||
3. Redaction Methods | 3. Redaction Methods | |||
Redaction in RDAP can be handled in multiple ways. The use of | Redaction in RDAP can be handled in multiple ways. The use of | |||
placeholder text for the values of the RDAP fields, such as the | placeholder text for the values of the RDAP fields, such as the | |||
placeholder text "XXXX", MUST NOT be used for redaction. A | placeholder text "XXXX", MUST NOT be used for redaction. A | |||
placeholder text value will not match the format requirements of each | placeholder text value will not match the format requirements of each | |||
of the RDAP fields and provides an inconsistent and unreliable | of the RDAP fields and provides an inconsistent and unreliable | |||
redaction signal. This section covers the redaction methods that can | redaction signal. This section covers the redaction methods that can | |||
be used with the redaction signaling defined in Section 4.2. | be used with the redaction signaling defined in Section 4.2. | |||
RDAP responses, as defined in [RFC7483], include a mix of JSON | RDAP responses, as defined in [RFC9083], include a mix of JSON | |||
objects and JSON arrays, where JSON arrays are heavily used for | objects and JSON arrays, where JSON arrays are heavily used for | |||
entity objects with jCard [RFC7095]. jCard [RFC7095] is a JSON | entity objects with jCard [RFC7095]. jCard [RFC7095] is a JSON | |||
representation of vCard [RFC6350] that inherits its dependency on | representation of vCard [RFC6350] that inherits its dependency on | |||
arrays. An example is the vCard [RFC6350] "ADR" property / jCard | arrays. An example is the vCard [RFC6350] "ADR" property / jCard | |||
[RFC7095] "adr" property that defines a sequence of address | [RFC7095] "adr" property that defines a sequence of address | |||
components. According to [RFC6350], when an "ADR" property component | components. According to [RFC6350], when an "ADR" property component | |||
value is missing, the associated component separator MUST still be | value is missing, the associated component separator MUST still be | |||
specified. jCard [RFC7095] extends the use of arrays with each | specified. jCard [RFC7095] extends the use of arrays with each | |||
individual vCard property being represented by an array of three | individual vCard property being represented by an array of three | |||
fixed elements, followed by one or more additional elements. The mix | fixed elements, followed by one or more additional elements. The mix | |||
skipping to change at page 4, line 34 ¶ | skipping to change at page 4, line 34 ¶ | |||
"redacted": [ | "redacted": [ | |||
{ | { | |||
"name": { | "name": { | |||
"type": "Administrative Contact" | "type": "Administrative Contact" | |||
}, | }, | |||
"path": "$.entities[?(@.roles[0]=='administrative')]", | "path": "$.entities[?(@.roles[0]=='administrative')]", | |||
"method": "removal" | "method": "removal" | |||
} | } | |||
] | ] | |||
Figure 1: Redacted Administrative Contact | ||||
The Redaction by Removal Method MUST NOT be used to remove a field | The Redaction by Removal Method MUST NOT be used to remove a field | |||
using the position in a fixed length array to signal the redacted | using the position in a fixed length array to signal the redacted | |||
field. For example, removal of an individual data field in jCard | field. For example, removal of an individual data field in jCard | |||
[RFC7095] will result in a non-conformant jCard [RFC7095] array | [RFC7095] will result in a non-conformant jCard [RFC7095] array | |||
definition. | definition. | |||
3.2. Redaction by Empty Value Method | 3.2. Redaction by Empty Value Method | |||
The Redaction by Empty Value Method is when a redacted field is not | The Redaction by Empty Value Method is when a redacted field is not | |||
removed, but its value is set to an empty value, such as "" for a | removed, but its value is set to an empty value, such as "" for a | |||
skipping to change at page 5, line 21 ¶ | skipping to change at page 5, line 23 ¶ | |||
An example of the redacted field "fn" jCard property using the | An example of the redacted field "fn" jCard property using the | |||
Redaction by Empty Value Method: | Redaction by Empty Value Method: | |||
[ | [ | |||
"fn", | "fn", | |||
{}, | {}, | |||
"text", | "text", | |||
"" | "" | |||
] | ] | |||
Figure 2: Redacted "fn" jCard Property using Redaction by Empty | ||||
Value Method | ||||
An example of the "redacted" member for the redacted "fn" jCard | An example of the "redacted" member for the redacted "fn" jCard | |||
property value, which is array position 3: | property value, which is array position 3: | |||
"redacted": [ | "redacted": [ | |||
{ | { | |||
"name": { | "name": { | |||
"type": "Registrant Name" | "type": "Registrant Name" | |||
}, | }, | |||
"path": "$.entities[?(@.roles[0]=='registrant')]. | "path": "$.entities[?(@.roles[0]=='registrant')]. | |||
vcardArray[1][?(@[0]=='fn')][3]", | vcardArray[1][?(@[0]=='fn')][3]", | |||
"pathLang": "jsonpath", | "pathLang": "jsonpath", | |||
"method": "emptyValue", | "method": "emptyValue", | |||
"reason": { | "reason": { | |||
"type": "Server policy" | "type": "Server policy" | |||
} | } | |||
} | } | |||
] | ] | |||
4. Redacted RDAP Response | Figure 3: Redacted Registrant Name using Array Position | |||
4. Redacted RDAP Response | ||||
4.1. RDAP Conformance | 4.1. RDAP Conformance | |||
RDAP responses that contain values described in this document MUST | RDAP responses that contain values described in this document MUST | |||
indicate conformance with this specification by including an | indicate conformance with this specification by including an | |||
rdapConformance ([RFC7483]) value of "redacted_0.1". The information | rdapConformance ([RFC9083]) value of "redacted_0.1". The information | |||
needed to register this value in the RDAP Extensions Registry is | needed to register this value in the RDAP Extensions Registry is | |||
described in Section 6.1. | described in Section 6.1. | |||
Example rdapConformance member with the redacted extension: | Example rdapConformance member with the redacted extension: | |||
"rdapConformance": [ | "rdapConformance": [ | |||
"rdap_level_0", | "rdap_level_0", | |||
"redacted_0" | "redacted_0.1" | |||
] | ] | |||
Figure 4: rdapConformance with Redacted Extension | ||||
4.2. "redacted" Member | 4.2. "redacted" Member | |||
The "redacted" member MUST be added to the RDAP response when there | The "redacted" member MUST be added to the RDAP response when there | |||
are redacted fields. The "redacted" member is included as a member | are redacted fields. The "redacted" member is included as a member | |||
of the object class in a lookup response, such as the object classes | of the object class in a lookup response, such as the object classes | |||
defined in [RFC9083], and as a member of the object instances in a | defined in [RFC9083], and as a member of the object instances in a | |||
search response, such as the object instances defined in [RFC9083]. | search response, such as the object instances defined in [RFC9083]. | |||
The "redacted" member contains an array of redacted objects with the | The "redacted" member contains an array of redacted objects with the | |||
following child members: | following child members: | |||
skipping to change at page 6, line 44 ¶ | skipping to change at page 7, line 9 ¶ | |||
default value of "jsonpath" for JSONPath | default value of "jsonpath" for JSONPath | |||
([I-D.ietf-jsonpath-base]). Other JSON path expression languages | ([I-D.ietf-jsonpath-base]). Other JSON path expression languages | |||
MAY be used based on server policy. | MAY be used based on server policy. | |||
"method": OPTIONAL redaction method used with "removal" indicating | "method": OPTIONAL redaction method used with "removal" indicating | |||
the Redaction By Removed Method (Section 3.1) and "emptyValue" | the Redaction By Removed Method (Section 3.1) and "emptyValue" | |||
indicating the Redaction by Empty Value Method (Section 3.2), | indicating the Redaction by Empty Value Method (Section 3.2), | |||
with the default value of "removal". | with the default value of "removal". | |||
"reason": OPTIONAL human readable reason(s) for the redacted field | "reason": OPTIONAL human readable reason(s) for the redacted field | |||
in the language defined by the [RFC7483] "lang" member. The | in the language defined by the [RFC9083] "lang" member. The | |||
default language is "en" if the [RFC7483] "lang" member is not | default language is "en" if the [RFC9083] "lang" member is not | |||
specified. The reason is defined using an object with an | specified. The reason is defined using an object with an | |||
OPTIONAL "type" field denoting a registered redacted reason (see | OPTIONAL "type" field denoting a registered redacted reason (see | |||
see Section 6.2) and an OPTIONAL "description" field denoting an | see Section 6.2) and an OPTIONAL "description" field denoting an | |||
unregistered redacted reason. The "description" field MUST NOT | unregistered redacted reason. The "description" field MUST NOT | |||
be a client processing dependency. | be a client processing dependency. | |||
Example unredacted version of an RDAP lookup response: | Example unredacted version of an RDAP lookup response: | |||
{ | { | |||
"rdapConformance": [ | "rdapConformance": [ | |||
"rdap_level_0" | "rdap_level_0" | |||
], | ], | |||
"objectClassName": "domain", | "objectClassName": "domain", | |||
"handle": "ABC123", | "handle": "ABC123", | |||
"ldhName": "example.com", | "ldhName": "example.com", | |||
"secureDNS": { | "secureDNS": { | |||
"delegationSigned": false | "delegationSigned": false | |||
}, | ||||
"nameservers": [ | ||||
{ | ||||
"objectClassName": "nameserver", | ||||
"ldhName": "ns1.example.com" | ||||
}, | }, | |||
{ | "notices": [ | |||
"objectClassName": "nameserver", | { | |||
"ldhName": "ns2.example.com" | "title": "Terms of Use", | |||
} | "description": [ | |||
], | "Service subject to Terms of Use." | |||
"entities": [ | ], | |||
{ | "links": [ | |||
"objectClassName": "entity", | { | |||
"handle": "123", | "rel": "self", | |||
"roles": [ | "href": "https://www.example.com/terms-of-use", | |||
"registrar" | "type": "text/html", | |||
], | "value": "https://www.example.com/terms-of-use" | |||
"publicIds": [ | } | |||
{ | ] | |||
"type": "IANA Registrar ID", | } | |||
"identifier": "1" | ], | |||
} | "nameservers": [ | |||
], | { | |||
"vcardArray": [ | "objectClassName": "nameserver", | |||
"vcard", | "ldhName": "ns1.example.com" | |||
[ | }, | |||
[ | { | |||
"version", | "objectClassName": "nameserver", | |||
{}, | "ldhName": "ns2.example.com" | |||
"text", | } | |||
"4.0" | ], | |||
], | "entities": [ | |||
[ | { | |||
"fn", | "objectClassName": "entity", | |||
{}, | "handle": "123", | |||
"text", | "roles": [ | |||
"Example Registrar Inc." | "registrar" | |||
], | ], | |||
"publicIds": [ | ||||
{ | ||||
"type": "IANA Registrar ID", | ||||
"identifier": "1" | ||||
} | ||||
], | ||||
"vcardArray": [ | ||||
"vcard", | ||||
[ | [ | |||
"adr", | ||||
{}, | ||||
"text", | ||||
[ | [ | |||
"", | "version", | |||
"Suite 100", | {}, | |||
"123 Example Dr.", | "text", | |||
"Dulles", | "4.0" | |||
"VA", | ], | |||
"20166-6503", | [ | |||
"US" | "fn", | |||
{}, | ||||
"text", | ||||
"Example Registrar Inc." | ||||
], | ||||
[ | ||||
"adr", | ||||
{}, | ||||
"text", | ||||
[ | ||||
"", | ||||
"Suite 100", | ||||
"123 Example Dr.", | ||||
"Dulles", | ||||
"VA", | ||||
"20166-6503", | ||||
"US" | ||||
] | ||||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"contact@organization.example" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "voice" | ||||
}, | ||||
"uri", | ||||
"tel:+1.7035555555;ext=1234" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "fax" | ||||
}, | ||||
"uri", | ||||
"tel:+1.7035555556" | ||||
] | ] | |||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"contact@organization.example" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "voice" | ||||
}, | ||||
"uri", | ||||
"tel:+1.7035555555;ext=1234" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "fax" | ||||
}, | ||||
"uri", | ||||
"tel:+1.7035555556" | ||||
] | ] | |||
], | ||||
"entities": [ | ||||
{ | ||||
"objectClassName": "entity", | ||||
"roles": [ | ||||
"abuse" | ||||
], | ||||
"vcardArray": [ | ||||
"vcard", | ||||
[ | ||||
[ | ||||
"version", | ||||
{}, | ||||
"text", | ||||
"4.0" | ||||
], | ||||
[ | ||||
"fn", | ||||
{}, | ||||
"text", | ||||
"Abuse Contact" | ||||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"abuse@organization.example" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "voice" | ||||
}, | ||||
"uri", | ||||
"tel:+1.7035555555;ext=1234" | ||||
] | ||||
] | ||||
] | ||||
} | ||||
] | ] | |||
], | }, | |||
"entities": [ | { | |||
{ | "objectClassName": "entity", | |||
"objectClassName": "entity", | "handle": "XXXX", | |||
"roles": [ | "roles": [ | |||
"abuse" | "registrant" | |||
], | ], | |||
"vcardArray": [ | "vcardArray": [ | |||
"vcard", | "vcard", | |||
[ | ||||
[ | [ | |||
"version", | ||||
{}, | ||||
"text", | ||||
"4.0" | ||||
], | ||||
[ | ||||
"fn", | ||||
{}, | ||||
"text", | ||||
"Registrant User" | ||||
], | ||||
[ | ||||
"org", | ||||
{}, | ||||
"text", | ||||
"Example Inc." | ||||
], | ||||
[ | ||||
"adr", | ||||
{}, | ||||
"text", | ||||
[ | [ | |||
"version", | "", | |||
{}, | "Suite 1235", | |||
"text", | "4321 Rue Somewhere", | |||
"4.0" | "Quebec", | |||
], | "QC", | |||
[ | "G1V 2M2", | |||
"fn", | "Canada" | |||
{}, | ||||
"text", | ||||
"Abuse Contact" | ||||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"abuse@organization.example" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "voice" | ||||
}, | ||||
"uri", | ||||
"tel:+1.7035555555;ext=1234" | ||||
] | ] | |||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"registrant.user@example.com" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "voice" | ||||
}, | ||||
"uri", | ||||
"tel:+1-555-555-1235;ext=123" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "fax" | ||||
}, | ||||
"uri", | ||||
"tel:+1-555-555-5321" | ||||
] | ] | |||
] | ] | |||
} | ] | |||
] | }, | |||
}, | { | |||
{ | "objectClassName": "entity", | |||
"roles": [ | "handle": "YYYY", | |||
"registrant" | "roles": [ | |||
], | "technical" | |||
"vcardArray": [ | ], | |||
"vcard", | "vcardArray": [ | |||
[ | "vcard", | |||
[ | ||||
"version", | ||||
{}, | ||||
"text", | ||||
"4.0" | ||||
], | ||||
[ | ||||
"fn", | ||||
{}, | ||||
"text", | ||||
"Registrant User" | ||||
], | ||||
[ | ||||
"org", | ||||
{}, | ||||
"text", | ||||
"Example Inc." | ||||
], | ||||
[ | [ | |||
"adr", | ||||
{}, | ||||
"text", | ||||
[ | [ | |||
"", | "version", | |||
"Suite 1235", | {}, | |||
"4321 Rue Somewhere", | "text", | |||
"Quebec", | "4.0" | |||
"QC", | ], | |||
"G1V 2M2", | [ | |||
"Canada" | "fn", | |||
{}, | ||||
"text", | ||||
"Technical User" | ||||
], | ||||
[ | ||||
"org", | ||||
{}, | ||||
"text", | ||||
"Example Inc." | ||||
], | ||||
[ | ||||
"adr", | ||||
{}, | ||||
"text", | ||||
[ | ||||
"", | ||||
"Suite 1234", | ||||
"4321 Rue Somewhere", | ||||
"Quebec", | ||||
"QC", | ||||
"G1V 2M2", | ||||
"Canada" | ||||
] | ||||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"technical.user@example.com" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "voice" | ||||
}, | ||||
"uri", | ||||
"tel:+1-555-555-1234;ext=321" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "fax" | ||||
}, | ||||
"uri", | ||||
"tel:+1-555-555-4321" | ||||
] | ] | |||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"registrant.user@example.com" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "voice" | ||||
}, | ||||
"uri", | ||||
"tel:+1-555-555-1235;ext=123" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "fax" | ||||
}, | ||||
"uri", | ||||
"tel:+1-555-555-5321" | ||||
] | ] | |||
] | ] | |||
] | ||||
}, | }, | |||
{ | { | |||
"roles": [ | "objectClassName": "entity", | |||
"technical" | "handle": "ZZZZ", | |||
], | "roles": [ | |||
"vcardArray": [ | "administrative" | |||
"vcard", | ], | |||
[ | "vcardArray": [ | |||
[ | "vcard", | |||
"version", | ||||
{}, | ||||
"text", | ||||
"4.0" | ||||
], | ||||
[ | ||||
"fn", | ||||
{}, | ||||
"text", | ||||
"Technical User" | ||||
], | ||||
[ | ||||
"org", | ||||
{}, | ||||
"text", | ||||
"Example Inc." | ||||
], | ||||
[ | [ | |||
"adr", | ||||
{}, | ||||
"text", | ||||
[ | [ | |||
"", | "version", | |||
"Suite 1234", | {}, | |||
"4321 Rue Somewhere", | "text", | |||
"Quebec", | "4.0" | |||
"QC", | ], | |||
"G1V 2M2", | [ | |||
"Canada" | "fn", | |||
{}, | ||||
"text", | ||||
"Administrative User" | ||||
], | ||||
[ | ||||
"org", | ||||
{}, | ||||
"text", | ||||
"Example Inc." | ||||
], | ||||
[ | ||||
"adr", | ||||
{}, | ||||
"text", | ||||
[ | ||||
"", | ||||
"Suite 1236", | ||||
"4321 Rue Somewhere", | ||||
"Quebec", | ||||
"QC", | ||||
"G1V 2M2", | ||||
"Canada" | ||||
] | ||||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"administrative.user@example.com" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "voice" | ||||
}, | ||||
"uri", | ||||
"tel:+1-555-555-1236;ext=789" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "fax" | ||||
}, | ||||
"uri", | ||||
"tel:+1-555-555-6321" | ||||
] | ] | |||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"technical.user@example.com" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "voice" | ||||
}, | ||||
"uri", | ||||
"tel:+1-555-555-1234;ext=321" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "fax" | ||||
}, | ||||
"uri", | ||||
"tel:+1-555-555-4321" | ||||
] | ] | |||
] | ] | |||
] | }, | |||
}, | { | |||
{ | "objectClassName": "entity", | |||
"roles": [ | "handle": "WWWW", | |||
"administrative" | "roles": [ | |||
], | "billing" | |||
"vcardArray": [ | ], | |||
"vcard", | "vcardArray": [ | |||
[ | "vcard", | |||
[ | ||||
"version", | ||||
{}, | ||||
"text", | ||||
"4.0" | ||||
], | ||||
[ | ||||
"fn", | ||||
{}, | ||||
"text", | ||||
"Administrative User" | ||||
], | ||||
[ | ||||
"org", | ||||
{}, | ||||
"text", | ||||
"Example Inc." | ||||
], | ||||
[ | [ | |||
"adr", | ||||
{}, | ||||
"text", | ||||
[ | [ | |||
"", | "version", | |||
"Suite 1236", | {}, | |||
"4321 Rue Somewhere", | "text", | |||
"Quebec", | "4.0" | |||
"QC", | ], | |||
"G1V 2M2", | [ | |||
"Canada" | "fn", | |||
{}, | ||||
"text", | ||||
"Billing User" | ||||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"billing.user@example.com" | ||||
] | ] | |||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"administrative.user@example.com" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "voice" | ||||
}, | ||||
"uri", | ||||
"tel:+1-555-555-1236;ext=789" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "fax" | ||||
}, | ||||
"uri", | ||||
"tel:+1-555-555-6321" | ||||
] | ] | |||
] | ] | |||
] | ||||
} | } | |||
], | ], | |||
"events": [ | "events": [ | |||
{ | { | |||
"eventAction": "registration", | "eventAction": "registration", | |||
"eventDate": "1997-06-03T00:00:00Z" | "eventDate": "1997-06-03T00:00:00Z" | |||
}, | }, | |||
{ | { | |||
"eventAction": "last changed", | "eventAction": "last changed", | |||
"eventDate": "2020-05-28T01:35:00Z" | "eventDate": "2020-05-28T01:35:00Z" | |||
}, | }, | |||
{ | { | |||
"eventAction": "expiration", | "eventAction": "expiration", | |||
"eventDate": "2021-06-03T04:00:00Z" | "eventDate": "2021-06-03T04:00:00Z" | |||
} | } | |||
], | ], | |||
"status": [ | "status": [ | |||
"server delete prohibited", | "server delete prohibited", | |||
"server update prohibited", | "server update prohibited", | |||
"server transfer prohibited", | "server transfer prohibited", | |||
"client transfer prohibited" | "client transfer prohibited" | |||
] | ] | |||
} | } | |||
Figure 5: Unredacted RDAP Lookup Response | ||||
Example redacted version of an RDAP lookup response: | Example redacted version of an RDAP lookup response: | |||
{ | { | |||
"rdapConformance": [ | "rdapConformance": [ | |||
"rdap_level_0", | "rdap_level_0", | |||
"redacted_0" | "redacted_0" | |||
], | ], | |||
"objectClassName": "domain", | "objectClassName": "domain", | |||
"ldhName": "example.com", | "ldhName": "example.com", | |||
"secureDNS": { | "secureDNS": { | |||
"delegationSigned": false | "delegationSigned": false | |||
}, | ||||
"nameservers": [ | ||||
{ | ||||
"objectClassName": "nameserver", | ||||
"ldhName": "ns1.example.com" | ||||
}, | }, | |||
{ | "notices": [ | |||
"objectClassName": "nameserver", | { | |||
"ldhName": "ns2.example.com" | "title": "Terms of Use", | |||
} | "description": [ | |||
], | "Service subject to Terms of Use." | |||
"entities": [ | ], | |||
{ | "links": [ | |||
"objectClassName": "entity", | { | |||
"handle": "123", | "rel": "self", | |||
"roles": [ | "href": "https://www.example.com/terms-of-use", | |||
"registrar" | "type": "text/html", | |||
], | "value": "https://www.example.com/terms-of-use" | |||
"publicIds": [ | } | |||
{ | ] | |||
"type": "IANA Registrar ID", | } | |||
"identifier": "1" | ], | |||
} | "nameservers": [ | |||
], | { | |||
"vcardArray": [ | "objectClassName": "nameserver", | |||
"vcard", | "ldhName": "ns1.example.com" | |||
[ | }, | |||
{ | ||||
"objectClassName": "nameserver", | ||||
"ldhName": "ns2.example.com" | ||||
} | ||||
], | ||||
"entities": [ | ||||
{ | ||||
"objectClassName": "entity", | ||||
"handle": "123", | ||||
"roles": [ | ||||
"registrar" | ||||
], | ||||
"publicIds": [ | ||||
{ | ||||
"type": "IANA Registrar ID", | ||||
"identifier": "1" | ||||
} | ||||
], | ||||
"vcardArray": [ | ||||
"vcard", | ||||
[ | [ | |||
"version", | [ | |||
{}, | "version", | |||
"text", | {}, | |||
"4.0" | "text", | |||
"4.0" | ||||
], | ||||
[ | ||||
"fn", | ||||
{}, | ||||
"text", | ||||
"Example Registrar Inc." | ||||
], | ||||
[ | ||||
"adr", | ||||
{}, | ||||
"text", | ||||
], | [ | |||
[ | "", | |||
"fn", | "Suite 100", | |||
{}, | "123 Example Dr.", | |||
"text", | "Dulles", | |||
"Example Registrar Inc." | "VA", | |||
], | "20166-6503", | |||
[ | "US" | |||
"adr", | ] | |||
{}, | ], | |||
"text", | ||||
[ | [ | |||
"", | "email", | |||
"Suite 100", | {}, | |||
"123 Example Dr.", | "text", | |||
"Dulles", | "contact@organization.example" | |||
"VA", | ], | |||
"20166-6503", | [ | |||
"US" | "tel", | |||
{ | ||||
"type": "voice" | ||||
}, | ||||
"uri", | ||||
"tel:+1.7035555555" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "fax" | ||||
}, | ||||
"uri", | ||||
"tel:+1.7035555556" | ||||
] | ] | |||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"contact@organization.example" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "voice" | ||||
}, | ||||
"uri", | ||||
"tel:+1.7035555555" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "fax" | ||||
}, | ||||
"uri", | ||||
"tel:+1.7035555556" | ||||
] | ] | |||
] | ], | |||
], | "entities": [ | |||
"entities": [ | { | |||
{ | "objectClassName": "entity", | |||
"objectClassName": "entity", | "roles": [ | |||
"roles": [ | "abuse" | |||
"abuse" | ], | |||
], | "vcardArray": [ | |||
"vcardArray": [ | "vcard", | |||
"vcard", | ||||
[ | ||||
[ | ||||
"version", | ||||
{}, | ||||
"text", | ||||
"4.0" | ||||
], | ||||
[ | ||||
"fn", | ||||
{}, | ||||
"text", | ||||
"Abuse Contact" | ||||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"abuse@organization.example" | ||||
], | ||||
[ | [ | |||
"tel", | [ | |||
{ | "version", | |||
"type": "voice" | {}, | |||
}, | "text", | |||
"uri", | "4.0" | |||
"tel:+1.7035555555" | ||||
], | ||||
[ | ||||
"fn", | ||||
{}, | ||||
"text", | ||||
"Abuse Contact" | ||||
], | ||||
[ | ||||
"email", | ||||
{}, | ||||
"text", | ||||
"abuse@organization.example" | ||||
], | ||||
[ | ||||
"tel", | ||||
{ | ||||
"type": "voice" | ||||
}, | ||||
"uri", | ||||
"tel:+1.7035555555" | ||||
] | ||||
] | ] | |||
] | ] | |||
] | } | |||
} | ] | |||
] | }, | |||
}, | { | |||
{ | "objectClassName": "entity", | |||
"roles": [ | "handle": "XXXX", | |||
"registrant" | "roles": [ | |||
], | "registrant" | |||
"vcardArray": [ | ], | |||
"vcard", | "vcardArray": [ | |||
[ | "vcard", | |||
[ | ||||
"version", | ||||
{}, | ||||
"text", | ||||
"4.0" | ||||
], | ||||
[ | ||||
"fn", | ||||
{}, | ||||
"text", | ||||
"" | ||||
], | ||||
[ | [ | |||
"adr", | ||||
{}, | ||||
"text", | ||||
[ | [ | |||
"", | "version", | |||
"", | {}, | |||
"", | "text", | |||
"", | "4.0" | |||
"QC", | ], | |||
"", | [ | |||
"Canada" | "fn", | |||
{}, | ||||
"text", | ||||
"" | ||||
], | ||||
[ | ||||
"adr", | ||||
{}, | ||||
"text", | ||||
[ | ||||
"", | ||||
"", | ||||
"", | ||||
"", | ||||
"QC", | ||||
"", | ||||
"Canada" | ||||
] | ||||
] | ] | |||
] | ] | |||
] | ] | |||
] | }, | |||
}, | { | |||
{ | "objectClassName": "entity", | |||
"roles": [ | "handle": "YYYY", | |||
"technical" | "roles": [ | |||
], | "technical" | |||
"vcardArray": [ | ], | |||
"vcard", | "vcardArray": [ | |||
[ | "vcard", | |||
[ | ||||
"version", | ||||
{}, | ||||
"text", | ||||
"4.0" | ||||
], | ||||
[ | ||||
"fn", | ||||
{}, | ||||
"text", | ||||
"" | ||||
], | ||||
[ | ||||
"org", | ||||
{}, | ||||
"text", | ||||
"Example Inc." | ||||
], | ||||
[ | [ | |||
"adr", | ||||
{}, | ||||
"text", | ||||
[ | [ | |||
"", | "version", | |||
"Suite 1234", | {}, | |||
"4321 Rue Somewhere", | "text", | |||
"Quebec", | "4.0" | |||
"QC", | ], | |||
"G1V 2M2", | [ | |||
"Canada" | "fn", | |||
{}, | ||||
"text", | ||||
"" | ||||
], | ||||
[ | ||||
"org", | ||||
{}, | ||||
"text", | ||||
"Example Inc." | ||||
], | ||||
[ | ||||
"adr", | ||||
{}, | ||||
"text", | ||||
[ | ||||
"", | ||||
"Suite 1234", | ||||
"4321 Rue Somewhere", | ||||
"Quebec", | ||||
"QC", | ||||
"G1V 2M2", | ||||
"Canada" | ||||
] | ||||
] | ] | |||
] | ] | |||
] | ] | |||
] | ||||
} | ||||
], | ||||
"events": [ | ||||
{ | ||||
"eventAction": "registration", | ||||
"eventDate": "1997-06-03T00:00:00Z" | ||||
}, | ||||
{ | ||||
"eventAction": "last changed", | ||||
"eventDate": "2020-05-28T01:35:00Z" | ||||
}, | ||||
{ | ||||
"eventAction": "expiration", | ||||
"eventDate": "2021-06-03T04:00:00Z" | ||||
} | ||||
], | ||||
"status": [ | ||||
"server delete prohibited", | ||||
"server update prohibited", | ||||
"server transfer prohibited", | ||||
"client transfer prohibited" | ||||
], | ||||
"redacted": [ | ||||
{ | ||||
"name": { | ||||
"type": "Registry Domain ID" | ||||
}, | ||||
"path": "$.handle", | ||||
"pathLang": "jsonpath", | ||||
"method": "removal", | ||||
"reason": { | ||||
"type": "Server policy" | ||||
} | } | |||
}, | ], | |||
{ | "events": [ | |||
"name": { | { | |||
"type": "Registrant Name" | "eventAction": "registration", | |||
"eventDate": "1997-06-03T00:00:00Z" | ||||
}, | }, | |||
"path": "$.entities[?(@.roles[0]=='registrant')]. | { | |||
vcardArray[1][?(@[0]=='fn')][3]", | "eventAction": "last changed", | |||
"pathLang": "jsonpath", | "eventDate": "2020-05-28T01:35:00Z" | |||
"method": "emptyValue", | ||||
"reason": { | ||||
"type": "Server policy" | ||||
} | ||||
}, | ||||
{ | ||||
"name": { | ||||
"type": "Registrant Organization" | ||||
}, | }, | |||
"path": "$.entities[?(@.roles[0]=='registrant')]. | { | |||
vcardArray[1][?(@[0]=='org')]", | "eventAction": "expiration", | |||
"pathLang": "jsonpath", | "eventDate": "2021-06-03T04:00:00Z" | |||
"method": "removal", | ||||
"reason": { | ||||
"type": "Server policy" | ||||
} | } | |||
}, | ], | |||
{ | "status": [ | |||
"name": { | "server delete prohibited", | |||
"type": "Registrant Street" | "server update prohibited", | |||
"server transfer prohibited", | ||||
"client transfer prohibited" | ||||
], | ||||
"redacted": [ | ||||
{ | ||||
"name": { | ||||
"type": "Registry Domain ID" | ||||
}, | ||||
"path": "$.handle", | ||||
"pathLang": "jsonpath", | ||||
"method": "removal", | ||||
"reason": { | ||||
"type": "Server policy" | ||||
} | ||||
}, | }, | |||
"path": "$.entities[?(@.roles[0]=='registrant')]. | { | |||
vcardArray[1][?(@[0]=='adr')][3][:3]", | "name": { | |||
"pathLang": "jsonpath", | "type": "Registrant Name" | |||
"method": "emptyValue", | ||||
"reason": { | }, | |||
"type": "Server policy" | "path": "$.entities[?(@.roles[0]=='registrant')]. | |||
} | vcardArray[1][?(@[0]=='fn')][3]", | |||
}, | "pathLang": "jsonpath", | |||
{ | "method": "emptyValue", | |||
"name": { | "reason": { | |||
"type": "Registrant City" | "type": "Server policy" | |||
} | ||||
}, | }, | |||
"path": "$.entities[?(@.roles[0]=='registrant')]. | { | |||
vcardArray[1][?(@[0]=='adr')][3][3]", | "name": { | |||
"pathLang": "jsonpath", | "type": "Registrant Organization" | |||
"method": "emptyValue", | }, | |||
"reason": { | "path": "$.entities[?(@.roles[0]=='registrant')]. | |||
"type": "Server policy" | vcardArray[1][?(@[0]=='org')]", | |||
} | "pathLang": "jsonpath", | |||
}, | "method": "removal", | |||
{ | "reason": { | |||
"name": { | "type": "Server policy" | |||
"type": "Registrant Postal Code" | } | |||
}, | }, | |||
"path": "$.entities[?(@.roles[0]=='registrant')]. | { | |||
vcardArray[1][?(@[0]=='adr')][3][5]", | "name": { | |||
"pathLang": "jsonpath", | "type": "Registrant Street" | |||
"method": "emptyValue", | }, | |||
"reason": { | "path": "$.entities[?(@.roles[0]=='registrant')]. | |||
"type": "Server policy" | vcardArray[1][?(@[0]=='adr')][3][:3]", | |||
} | "pathLang": "jsonpath", | |||
}, | "method": "emptyValue", | |||
{ | "reason": { | |||
"name": { | "type": "Server policy" | |||
"type": "Registrant Email" | } | |||
}, | }, | |||
"path": "$.entities[?(@.roles[0]=='registrant')]. | { | |||
vcardArray[1][?(@[0]=='email')]", | "name": { | |||
"method": "removal", | "type": "Registrant City" | |||
"reason": { | }, | |||
"type": "Server policy" | "path": "$.entities[?(@.roles[0]=='registrant')]. | |||
} | vcardArray[1][?(@[0]=='adr')][3][3]", | |||
}, | "pathLang": "jsonpath", | |||
{ | "method": "emptyValue", | |||
"name": { | "reason": { | |||
"type": "Registrant Phone" | "type": "Server policy" | |||
} | ||||
}, | }, | |||
"path": "$.entities[?(@.roles[0]=='registrant')]. | { | |||
vcardArray[1][?(@[1].type=='voice')]", | "name": { | |||
"method": "removal", | "type": "Registrant Postal Code" | |||
"reason": { | ||||
"type": "Server policy" | }, | |||
} | "path": "$.entities[?(@.roles[0]=='registrant')]. | |||
}, | vcardArray[1][?(@[0]=='adr')][3][5]", | |||
{ | "pathLang": "jsonpath", | |||
"name": { | "method": "emptyValue", | |||
"type": "Technical Name" | "reason": { | |||
"type": "Server policy" | ||||
} | ||||
}, | }, | |||
"path": "$.entities[?(@.roles[0]=='technical')]. | { | |||
vcardArray[1][?(@[0]=='fn')][3]", | "name": { | |||
"method": "emptyValue", | "type": "Registrant Email" | |||
"reason": { | }, | |||
"type": "Server policy" | "path": "$.entities[?(@.roles[0]=='registrant')]. | |||
} | vcardArray[1][?(@[0]=='email')]", | |||
"method": "removal", | ||||
"reason": { | ||||
"type": "Server policy" | ||||
} | ||||
}, | ||||
{ | ||||
"name": { | ||||
"type": "Registrant Phone" | ||||
}, | ||||
"path": "$.entities[?(@.roles[0]=='registrant')]. | ||||
vcardArray[1][?(@[1].type=='voice')]", | ||||
"method": "removal", | ||||
"reason": { | ||||
"type": "Server policy" | ||||
} | ||||
}, | ||||
{ | ||||
"name": { | ||||
"type": "Technical Name" | ||||
}, | ||||
"path": "$.entities[?(@.roles[0]=='technical')]. | ||||
vcardArray[1][?(@[0]=='fn')][3]", | ||||
"method": "emptyValue", | ||||
"reason": { | ||||
"type": "Server policy" | ||||
} | ||||
}, | ||||
{ | ||||
"name": { | ||||
"type": "Technical Email" | ||||
}, | ||||
"path": "$.entities[?(@.roles[0]=='technical')]. | ||||
vcardArray[1][?(@[0]=='email')]", | ||||
}, | "method": "removal", | |||
{ | "reason": { | |||
"name": { | "type": "Server policy" | |||
"type": "Technical Email" | } | |||
}, | }, | |||
"path": "$.entities[?(@.roles[0]=='technical')]. | { | |||
vcardArray[1][?(@[0]=='email')]", | "name": { | |||
"method": "removal", | "type": "Technical Phone" | |||
"reason": { | }, | |||
"type": "Server policy" | "path": "$.entities[?(@.roles[0]=='technical')]. | |||
} | vcardArray[1][?(@[1].type=='voice')]", | |||
}, | "method": "removal", | |||
{ | "reason": { | |||
"name": { | "type": "Server policy" | |||
"type": "Technical Phone" | } | |||
}, | }, | |||
"path": "$.entities[?(@.roles[0]=='technical')]. | { | |||
vcardArray[1][?(@[1].type=='voice')]", | "name": { | |||
"method": "removal", | "type": "Technical Fax" | |||
"reason": { | }, | |||
"type": "Server policy" | "path": "$.entities[?(@.roles[0]=='technical')]. | |||
} | vcardArray[1][?(@[1].type=='fax')]", | |||
}, | "reason": { | |||
{ | "type": "Client request", | |||
"name": { | "description": "Client requested the field redacted" | |||
"description": "Technical Fax" | } | |||
}, | }, | |||
"path": "$.entities[?(@.roles[0]=='technical')]. | { | |||
vcardArray[1][?(@[1].type=='fax')]", | "name": { | |||
"reason": { | "description": "Administrative Contact" | |||
"type": "Client request", | }, | |||
"description": "Client requested the field redacted" | "path": "$.entities[?(@.roles[0]=='administrative')]", | |||
"method": "removal", | ||||
"reason": { | ||||
"description": "Refer to the technical contact" | ||||
} | ||||
} | } | |||
}, | { | |||
{ | "name": { | |||
"name": { | "description": "Billing Contact" | |||
"type": "Administrative Contact" | }, | |||
}, | "path": "$.entities[?(@.roles[0]=='billing')]", | |||
"path": "$.entities[?(@.roles[0]=='administrative')]", | "method": "removal", | |||
"method": "removal", | "reason": { | |||
"reason": { | "description": "Refer to the registrant contact" | |||
"description": "Refer to the technical contact" | } | |||
} | } | |||
} | ] | |||
] | ||||
} | } | |||
Figure 6: Redacted RDAP Lookup Response | ||||
Example unredacted version of an RDAP search response: | Example unredacted version of an RDAP search response: | |||
{ | { | |||
"rdapConformance": [ | "rdapConformance": [ | |||
"rdap_level_0" | "rdap_level_0" | |||
], | ], | |||
"domainSearchResults":[ | "domainSearchResults":[ | |||
{ | { | |||
"objectClassName": "domain", | "objectClassName": "domain", | |||
skipping to change at page 22, line 51 ¶ | skipping to change at page 25, line 51 ¶ | |||
"value":"https://example.com/rdap/domain/example2.com", | "value":"https://example.com/rdap/domain/example2.com", | |||
"rel":"related", | "rel":"related", | |||
"href":"https://example.com/rdap/domain/example2.com", | "href":"https://example.com/rdap/domain/example2.com", | |||
"type":"application/rdap+json" | "type":"application/rdap+json" | |||
} | } | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
Figure 7: Unredacted RDAP Search Response | ||||
Example redacted version of an RDAP search response: | Example redacted version of an RDAP search response: | |||
{ | { | |||
"rdapConformance": [ | "rdapConformance": [ | |||
"rdap_level_0", | "rdap_level_0", | |||
"redacted_0" | "redacted_0.1" | |||
], | ], | |||
"domainSearchResults":[ | "domainSearchResults":[ | |||
{ | { | |||
"objectClassName": "domain", | "objectClassName": "domain", | |||
"ldhName": "example1.com", | "ldhName": "example1.com", | |||
"links":[ | "links":[ | |||
{ | { | |||
"value":"https://example.com/rdap/domain/example1.com", | "value":"https://example.com/rdap/domain/example1.com", | |||
"rel":"self", | "rel":"self", | |||
"href":"https://example.com/rdap/domain/example1.com", | "href":"https://example.com/rdap/domain/example1.com", | |||
skipping to change at page 24, line 27 ¶ | skipping to change at page 27, line 30 ¶ | |||
"method": "removal", | "method": "removal", | |||
"reason": { | "reason": { | |||
"type": "Server policy" | "type": "Server policy" | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
Figure 8: Redacted RDAP Search Response | ||||
5. JSONPath Considerations | 5. JSONPath Considerations | |||
JSONPath [I-D.ietf-jsonpath-base] is the default JSON path expression | JSONPath [I-D.ietf-jsonpath-base] is the default JSON path expression | |||
language. This section covers considerations for servers using | language. This section covers considerations for servers using | |||
[I-D.ietf-jsonpath-base] to identify redacted RDAP fields with the | [I-D.ietf-jsonpath-base] to identify redacted RDAP fields with the | |||
"path" member of redacted objects in the "redacted" member. The list | "path" member of redacted objects in the "redacted" member. The list | |||
of JSONPath considerations include: | of JSONPath considerations include: | |||
1. Use absolute paths with the '$' JSONPath element. An example is | 1. Use absolute paths with the '$' JSONPath element. An example is | |||
"$.handle" for the "Registry Domain ID" in a lookup response or | "$.handle" for the "Registry Domain ID" in a lookup response or | |||
skipping to change at page 25, line 8 ¶ | skipping to change at page 28, line 15 ¶ | |||
4. When an entity has multiple roles, include "redacted" members for | 4. When an entity has multiple roles, include "redacted" members for | |||
each role using the role index. This will result in duplicate | each role using the role index. This will result in duplicate | |||
"redacted" members, but will enable the client to treat redaction | "redacted" members, but will enable the client to treat redaction | |||
consistently when there is a single role per entity or multiple | consistently when there is a single role per entity or multiple | |||
roles per entity. An example is when the "roles" member has the | roles per entity. An example is when the "roles" member has the | |||
value '["registrant","administrative"]', redacting the "name" | value '["registrant","administrative"]', redacting the "name" | |||
member of the entity will result in two "redacted" members with | member of the entity will result in two "redacted" members with | |||
the JSONPath expressions "$.entities[?(@.roles[0]=='registrant')] | the JSONPath expressions "$.entities[?(@.roles[0]=='registrant')] | |||
.vcardArray[1][?(@[0]=='fn')][3]" and "$.entities[?(@.roles[1]==' | .vcardArray[1][?(@[0]=='fn')][3]" and "$.entities[?(@.roles[1]==' | |||
administrative')].vcardArray[1][?(@[0]=='fn')][3]". | administrative')].vcardArray[1][?(@[0]=='fn')][3]". | |||
5. Reference the removed field when using the Redaction by Removal | 5. When there are multiple entities with the same role, include | |||
"redacted" members for each entity using the entity index instead | ||||
of the role. A JSONPath can be created that identifies the | ||||
entity based on an index of a role selector nodelist, such as | ||||
"$.entities[?(@.roles[0]=='technical')][0]" for the first entity | ||||
with the "technical" role. Using the entity index, such as | ||||
"$.entities[1]", is simpler and recommended. | ||||
6. Reference the removed field when using the Redaction by Removal | ||||
Method (Section 3.1). An example is "$.handle" for the "Registry | Method (Section 3.1). An example is "$.handle" for the "Registry | |||
Domain ID". | Domain ID". | |||
6. Reference index 0 of the jCard [RFC7095] property array, which is | 7. Reference index 0 of the jCard [RFC7095] property array, which is | |||
the jCard [RFC7095] "name" property, with a filter expression | the jCard [RFC7095] "name" property, with a filter expression | |||
containing the name of the field, when redacting a jCard | containing the name of the field, when redacting a jCard | |||
[RFC7095] field using the Redaction by Removal Method | [RFC7095] field using the Redaction by Removal Method | |||
(Section 3.1). An example is "$.entities[?(@.roles[0]=='registra | (Section 3.1). An example is "$.entities[?(@.roles[0]=='registra | |||
nt')].vcardArray[1][?(@[0]=='email')]" for the "Registrant | nt')].vcardArray[1][?(@[0]=='email')]" for the "Registrant | |||
Email". | Email". | |||
7. Reference jCard [RFC7095] field value or values redacted by array | 8. Reference jCard [RFC7095] field value or values redacted by array | |||
index 3 and greater, when redacting a jCard [RFC7095] field using | index 3 and greater, when redacting a jCard [RFC7095] field using | |||
the Redaction by Empty Value Method (Section 3.2). The jCard | the Redaction by Empty Value Method (Section 3.2). The jCard | |||
[RFC7095] property array index 3 and greater contain the property | [RFC7095] property array index 3 and greater contain the property | |||
values, where the property values set with an empty value are | values, where the property values set with an empty value are | |||
referenced directly in place of the jCard [RFC7095] property | referenced directly in place of the jCard [RFC7095] property | |||
name. Servers can then systematically redact jCard [RFC7095] | name. Servers can then systematically redact jCard [RFC7095] | |||
field value or values based on the JSONPath expressions and | field value or values based on the JSONPath expressions and | |||
clients will directly know which jCard [RFC7095] property values | clients will directly know which jCard [RFC7095] property values | |||
have been redacted. An example is "$.entities[?(@.roles[0]=='reg | have been redacted. An example is "$.entities[?(@.roles[0]=='reg | |||
istrant')].vcardArray[1][?(@[0]=='fn')][3]" for the "Registrant | istrant')].vcardArray[1][?(@[0]=='fn')][3]" for the "Registrant | |||
Name" or "$.entities[?(@.roles[0]=='registrant')].vcardArray[1][? | Name" or "$.entities[?(@.roles[0]=='registrant')].vcardArray[1][? | |||
(@[0]=='adr')][3][5]" for the "Registrant Postal Code". | (@[0]=='adr')][3][5]" for the "Registrant Postal Code". | |||
8. RDAP extensions should define any special JSONPath considerations | 9. RDAP extensions should define any special JSONPath considerations | |||
required to identify redacted RDAP fields if these considerations | required to identify redacted RDAP fields if these considerations | |||
are insufficient. | are insufficient. | |||
6. IANA Considerations | 6. IANA Considerations | |||
6.1. RDAP Extensions Registry | 6.1. RDAP Extensions Registry | |||
IANA is requested to register the following value in the RDAP | IANA is requested to register the following value in the RDAP | |||
Extensions Registry: | Extensions Registry: | |||
Extension identifier: redacted_0.1 | Extension identifier: redacted_0.1 | |||
Registry operator: Any | Registry operator: Any | |||
Published specification: This document. | Published specification: This document. | |||
Contact: IESG <iesg@ietf.org> | Contact: IESG <iesg@ietf.org> | |||
Intended usage: This extension identifies the redacted fields in an | Intended usage: This extension identifies the redacted fields in an | |||
skipping to change at page 26, line 20 ¶ | skipping to change at page 29, line 31 ¶ | |||
are used to register pre-defined redacted name and reason values: | are used to register pre-defined redacted name and reason values: | |||
"redacted name": Redacted name being registered. The registered | "redacted name": Redacted name being registered. The registered | |||
redacted name is referenced using the "type" field of the | redacted name is referenced using the "type" field of the | |||
redacted "name" field. | redacted "name" field. | |||
"redacted reason": Redacted reason being registered. The registered | "redacted reason": Redacted reason being registered. The registered | |||
redacted reason is referenced using the "type" field of the | redacted reason is referenced using the "type" field of the | |||
redacted "reason" field. | redacted "reason" field. | |||
7. Security Considerations | 7. Implementation Status | |||
Note to RFC Editor: Please remove this section and the reference to | ||||
RFC 7942 [RFC7942] before publication. | ||||
This section records the status of known implementations of the | ||||
protocol defined by this specification at the time of posting of this | ||||
Internet-Draft, and is based on a proposal described in RFC 7942 | ||||
[RFC7942]. The description of implementations in this section is | ||||
intended to assist the IETF in its decision processes in progressing | ||||
drafts to RFCs. Please note that the listing of any individual | ||||
implementation here does not imply endorsement by the IETF. | ||||
Furthermore, no effort has been spent to verify the information | ||||
presented here that was supplied by IETF contributors. This is not | ||||
intended as, and must not be construed to be, a catalog of available | ||||
implementations or their features. Readers are advised to note that | ||||
other implementations may exist. | ||||
According to RFC 7942 [RFC7942], "this will allow reviewers and | ||||
working groups to assign due consideration to documents that have the | ||||
benefit of running code, which may serve as evidence of valuable | ||||
experimentation and feedback that have made the implemented protocols | ||||
more mature. It is up to the individual working groups to use this | ||||
information as they see fit". | ||||
7.1. IIT-CNR/Registro.it RDAP Server | ||||
Responsible Organization: Institute of Informatics and Telematics of | ||||
National Research Council (IIT-CNR)/Registro.it | ||||
Location: https://rdap.pubtest.nic.it/ | ||||
Description: This implementation includes support for RDAP queries | ||||
using data from the public test environment of .it ccTLD. The | ||||
"redacted" array can be returned in the response to the domain lookup | ||||
that is the only available to anonymous users. | ||||
Level of Maturity: This is an "alpha" test implementation. | ||||
Coverage: This implementation includes all of the features described | ||||
in this specification. | ||||
Contact Information: Mario Loffredo, mario.loffredo@iit.cnr.it | ||||
8. Security Considerations | ||||
The server including a redacted signal provides an unauthorized | The server including a redacted signal provides an unauthorized | |||
client additional information related to the existence of data. | client additional information related to the existence of data. | |||
Servers MAY exclude the redacted members for RDAP fields that are | Servers MAY exclude the redacted members for RDAP fields that are | |||
considered a privacy issue in providing a data existence signal. | considered a privacy issue in providing a data existence signal. | |||
8. Acknowledgements | 9. Acknowledgements | |||
The authors wish to thank the following persons for their feedback | The authors wish to thank the following persons for their feedback | |||
and suggestions: Marc Blanchet, Scott Hollenbeck, Mario Loffredo, | and suggestions: Marc Blanchet, Scott Hollenbeck, Mario Loffredo, | |||
Gustavo Lozano, and Rick Wilhelm. | Gustavo Lozano, and Rick Wilhelm. | |||
9. References | 10. References | |||
9.1. Informative References | 10.1. Informative References | |||
[I-D.ietf-regext-rdap-jscontact] | [I-D.ietf-regext-rdap-jscontact] | |||
Loffredo, M. and G. Brown, "Using JSContact in | Loffredo, M. and G. Brown, "Using JSContact in | |||
Registration Data Access Protocol (RDAP) JSON Responses", | Registration Data Access Protocol (RDAP) JSON Responses", | |||
Work in Progress, Internet-Draft, draft-ietf-regext-rdap- | Work in Progress, Internet-Draft, draft-ietf-regext-rdap- | |||
jscontact-03, 22 October 2021, | jscontact-08, 15 February 2022, | |||
<https://tools.ietf.org/html/draft-ietf-regext-rdap- | <https://datatracker.ietf.org/doc/html/draft-ietf-regext- | |||
jscontact-03>. | rdap-jscontact-08>. | |||
9.2. Normative References | 10.2. Normative References | |||
[I-D.ietf-jsonpath-base] | [I-D.ietf-jsonpath-base] | |||
Gössner, S., Normington, G., and C. Bormann, "JSONPath: | Gössner, S., Normington, G., and C. Bormann, "JSONPath: | |||
Query expressions for JSON", Work in Progress, Internet- | Query expressions for JSON", Work in Progress, Internet- | |||
Draft, draft-ietf-jsonpath-base-02, 25 October 2021, | Draft, draft-ietf-jsonpath-base-03, 16 January 2022, | |||
<https://tools.ietf.org/html/draft-ietf-jsonpath-base-02>. | <https://datatracker.ietf.org/doc/html/draft-ietf- | |||
jsonpath-base-03>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC6350] Perreault, S., "vCard Format Specification", RFC 6350, | [RFC6350] Perreault, S., "vCard Format Specification", RFC 6350, | |||
DOI 10.17487/RFC6350, August 2011, | DOI 10.17487/RFC6350, August 2011, | |||
<https://www.rfc-editor.org/info/rfc6350>. | <https://www.rfc-editor.org/info/rfc6350>. | |||
[RFC7095] Kewisch, P., "jCard: The JSON Format for vCard", RFC 7095, | [RFC7095] Kewisch, P., "jCard: The JSON Format for vCard", RFC 7095, | |||
DOI 10.17487/RFC7095, January 2014, | DOI 10.17487/RFC7095, January 2014, | |||
<https://www.rfc-editor.org/info/rfc7095>. | <https://www.rfc-editor.org/info/rfc7095>. | |||
[RFC7482] Newton, A. and S. Hollenbeck, "Registration Data Access | [RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | |||
Protocol (RDAP) Query Format", RFC 7482, | Code: The Implementation Status Section", BCP 205, | |||
DOI 10.17487/RFC7482, March 2015, | RFC 7942, DOI 10.17487/RFC7942, July 2016, | |||
<https://www.rfc-editor.org/info/rfc7482>. | <https://www.rfc-editor.org/info/rfc7942>. | |||
[RFC7483] Newton, A. and S. Hollenbeck, "JSON Responses for the | ||||
Registration Data Access Protocol (RDAP)", RFC 7483, | ||||
DOI 10.17487/RFC7483, March 2015, | ||||
<https://www.rfc-editor.org/info/rfc7483>. | ||||
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
<https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
Interchange Format", STD 90, RFC 8259, | Interchange Format", STD 90, RFC 8259, | |||
DOI 10.17487/RFC8259, December 2017, | DOI 10.17487/RFC8259, December 2017, | |||
<https://www.rfc-editor.org/info/rfc8259>. | <https://www.rfc-editor.org/info/rfc8259>. | |||
[RFC9082] Hollenbeck, S. and A. Newton, "Registration Data Access | ||||
Protocol (RDAP) Query Format", STD 95, RFC 9082, | ||||
DOI 10.17487/RFC9082, June 2021, | ||||
<https://www.rfc-editor.org/info/rfc9082>. | ||||
[RFC9083] Hollenbeck, S. and A. Newton, "JSON Responses for the | [RFC9083] Hollenbeck, S. and A. Newton, "JSON Responses for the | |||
Registration Data Access Protocol (RDAP)", STD 95, | Registration Data Access Protocol (RDAP)", STD 95, | |||
RFC 9083, DOI 10.17487/RFC9083, June 2021, | RFC 9083, DOI 10.17487/RFC9083, June 2021, | |||
<https://www.rfc-editor.org/info/rfc9083>. | <https://www.rfc-editor.org/info/rfc9083>. | |||
Appendix A. Change History | Appendix A. Change History | |||
A.1. Change from 00 to 01 | A.1. Change from 00 to 01 | |||
1. Changed rdapConformance to use pointed "redacted_0.1" value to | 1. Changed rdapConformance to use pointed "redacted_0.1" value to | |||
support structural changes of the extension up to the target of | support structural changes of the extension up to the target of | |||
"redacted_1.0". | "redacted_1.0". | |||
2. Updates based on the Gustavo Lozano feedback: | 2. Updates based on the Gustavo Lozano feedback: | |||
1. Updated the language to change the special treatment of jCard | 1. Updated the language to change the special treatment of jCard | |||
to be more generic for future RDAP extensions that leverage | to be more generic for future RDAP extensions that leverage | |||
fixed length JSON arrays. | fixed length JSON arrays. | |||
2. Added "RDAP extensions should define any special JSONPath | 2. Added "RDAP extensions should define any special JSONPath | |||
considerations required to identify redacted RDAP fields if | considerations required to identify redacted RDAP fields if | |||
the these considerations are insufficient." to the JSONPath | the these considerations are insufficient." to the JSONPath | |||
skipping to change at page 29, line 4 ¶ | skipping to change at page 33, line 13 ¶ | |||
4. Added language to restrict the extension to responses. | 4. Added language to restrict the extension to responses. | |||
A.2. Change from 01 to 02 | A.2. Change from 01 to 02 | |||
1. Updates to add support for RDAP search responses: | 1. Updates to add support for RDAP search responses: | |||
1. Replaced "RDAP lookup response" with "RDAP response" | 1. Replaced "RDAP lookup response" with "RDAP response" | |||
throughout the draft to expand the scope to include search. | throughout the draft to expand the scope to include search. | |||
2. Updated the description in the second paragraph of the | 2. Updated the description in the second paragraph of the | |||
Introduction to cover both a lookup response and a search | Introduction to cover both a lookup response and a search | |||
response. | response. | |||
3. Added an example of the use of an absoluate path for a search | 3. Added an example of the use of an absoluate path for a search | |||
response to the "JSONPath Considerations" section. | response to the "JSONPath Considerations" section. | |||
4. Added a description of the placement of the "redacted" member | 4. Added a description of the placement of the "redacted" member | |||
in a lookup response and a search response in the ""redacted" | in a lookup response and a search response in the ""redacted" | |||
Member" section. | Member" section. | |||
5. Added an example of an unredacted search response and a | 5. Added an example of an unredacted search response and a | |||
redacted search response in the ""redacted" Member" section. | redacted search response in the ""redacted" Member" section. | |||
A.3. Change from 02 to 03 | ||||
1. Fixed mismatch of the extension identifier, which was updated to | ||||
"redacted_0.1" throughout the draft based on feedback from Mario | ||||
Loffredo. | ||||
2. Added the JSONPath Considerations item associated with redacting | ||||
fields for multiple entities with the same role based on | ||||
implementation feedback from Mario Loffredo. | ||||
3. Added the Implementation Status section that includes the server | ||||
implementation by Mario Loffredo. | ||||
4. Added use of numbered figures for easy reference for JSON Values | ||||
Registry registrations. | ||||
5. Updated the example unredacted and redacted lookup responses to | ||||
include the "objectClassName" and "handle" members. | ||||
6. Changed RFC7482 and RFC7483 references to RFC9082 and RFC9083, | ||||
respectively. | ||||
Authors' Addresses | Authors' Addresses | |||
James Gould | James Gould | |||
VeriSign, Inc. | VeriSign, Inc. | |||
12061 Bluemont Way | 12061 Bluemont Way | |||
Reston, VA 20190 | Reston, VA 20190 | |||
United States of America | United States of America | |||
Email: jgould@verisign.com | Email: jgould@verisign.com | |||
URI: http://www.verisigninc.com | URI: http://www.verisigninc.com | |||
David Smith | David Smith | |||
VeriSign, Inc. | VeriSign, Inc. | |||
12061 Bluemont Way | 12061 Bluemont Way | |||
Reston, VA 20190 | Reston, VA 20190 | |||
United States of America | United States of America | |||
Email: dsmith@verisign.com | Email: dsmith@verisign.com | |||
URI: http://www.verisigninc.com | URI: http://www.verisigninc.com | |||
Jody Kolker | Jody Kolker | |||
GoDaddy Inc. | GoDaddy Inc. | |||
14455 N. Hayden Rd. #219 | 14455 N. Hayden Rd. #219 | |||
Scottsdale, AZ 85260 | Scottsdale, AZ 85260 | |||
United States of America | United States of America | |||
Email: jkolker@godaddy.com | Email: jkolker@godaddy.com | |||
URI: http://www.godaddy.com | URI: http://www.godaddy.com | |||
Roger Carney | Roger Carney | |||
GoDaddy Inc. | GoDaddy Inc. | |||
14455 N. Hayden Rd. #219 | 14455 N. Hayden Rd. #219 | |||
Scottsdale, AZ 85260 | Scottsdale, AZ 85260 | |||
United States of America | United States of America | |||
Email: rcarney@godaddy.com | Email: rcarney@godaddy.com | |||
URI: http://www.godaddy.com | URI: http://www.godaddy.com | |||
End of changes. 98 change blocks. | ||||
719 lines changed or deleted | 889 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |