| draft-ietf-xmpp-address-05.txt | draft-ietf-xmpp-address-06.txt | |||
|---|---|---|---|---|
| Network Working Group P. Saint-Andre | Network Working Group P. Saint-Andre | |||
| Internet-Draft Cisco | Internet-Draft Cisco | |||
| Intended status: Standards Track October 6, 2010 | Intended status: Standards Track October 20, 2010 | |||
| Expires: April 9, 2011 | Expires: April 23, 2011 | |||
| Extensible Messaging and Presence Protocol (XMPP): Address Format | Extensible Messaging and Presence Protocol (XMPP): Address Format | |||
| draft-ietf-xmpp-address-05 | draft-ietf-xmpp-address-06 | |||
| Abstract | Abstract | |||
| This document defines the format for addresses used in the Extensible | This document defines the format for addresses used in the Extensible | |||
| Messaging and Presence Protocol (XMPP), including support for non- | Messaging and Presence Protocol (XMPP), including support for non- | |||
| ASCII characters. | ASCII characters. | |||
| 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 32 | skipping to change at page 1, line 32 | |||
| 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 http://datatracker.ietf.org/drafts/current/. | Drafts is at http://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 April 9, 2011. | This Internet-Draft will expire on April 23, 2011. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2010 IETF Trust and the persons identified as the | Copyright (c) 2010 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 | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Addresses . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. Fundamentals . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.2. Domainpart . . . . . . . . . . . . . . . . . . . . . . . . 5 | 4. Addresses . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.3. Localpart . . . . . . . . . . . . . . . . . . . . . . . . 6 | 4.1. Fundamentals . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.4. Resourcepart . . . . . . . . . . . . . . . . . . . . . . . 7 | 4.2. Domainpart . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. Internationalization Considerations . . . . . . . . . . . . . 8 | 4.3. Localpart . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 4.4. Resourcepart . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4.1. Reuse of Stringprep . . . . . . . . . . . . . . . . . . . 8 | 5. Internationalization Considerations . . . . . . . . . . . . . 8 | |||
| 4.2. Reuse of Unicode . . . . . . . . . . . . . . . . . . . . . 8 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.3. Confusable Characters . . . . . . . . . . . . . . . . . . 8 | 6.1. Reuse of Stringprep . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.4. Address Spoofing . . . . . . . . . . . . . . . . . . . . . 9 | 6.2. Reuse of Unicode . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.4.1. Address Forging . . . . . . . . . . . . . . . . . . . 9 | 6.3. Address Spoofing . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.4.2. Address Mimicking . . . . . . . . . . . . . . . . . . 10 | 6.3.1. Address Forging . . . . . . . . . . . . . . . . . . . 9 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 6.3.2. Address Mimicking . . . . . . . . . . . . . . . . . . 9 | |||
| 5.1. Nodeprep Profile of Stringprep . . . . . . . . . . . . . . 11 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 5.2. Resourceprep Profile of Stringprep . . . . . . . . . . . . 11 | 7.1. Nodeprep Profile of Stringprep . . . . . . . . . . . . . . 12 | |||
| 6. Conformance Requirements . . . . . . . . . . . . . . . . . . . 12 | 7.2. Resourceprep Profile of Stringprep . . . . . . . . . . . . 12 | |||
| 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 8. Conformance Requirements . . . . . . . . . . . . . . . . . . . 13 | |||
| 7.1. Normative References . . . . . . . . . . . . . . . . . . . 13 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 7.2. Informative References . . . . . . . . . . . . . . . . . . 14 | 9.1. Normative References . . . . . . . . . . . . . . . . . . . 14 | |||
| Appendix A. Nodeprep . . . . . . . . . . . . . . . . . . . . . . 16 | 9.2. Informative References . . . . . . . . . . . . . . . . . . 15 | |||
| A.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 16 | Appendix A. Nodeprep . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| A.2. Character Repertoire . . . . . . . . . . . . . . . . . . . 16 | A.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| A.3. Mapping . . . . . . . . . . . . . . . . . . . . . . . . . 17 | A.2. Character Repertoire . . . . . . . . . . . . . . . . . . . 18 | |||
| A.4. Normalization . . . . . . . . . . . . . . . . . . . . . . 17 | A.3. Mapping . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| A.5. Prohibited Output . . . . . . . . . . . . . . . . . . . . 17 | A.4. Normalization . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| A.6. Bidirectional Characters . . . . . . . . . . . . . . . . . 17 | A.5. Prohibited Output . . . . . . . . . . . . . . . . . . . . 18 | |||
| A.7. Notes . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | A.6. Bidirectional Characters . . . . . . . . . . . . . . . . . 19 | |||
| Appendix B. Resourceprep . . . . . . . . . . . . . . . . . . . . 18 | A.7. Notes . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| B.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 18 | Appendix B. Resourceprep . . . . . . . . . . . . . . . . . . . . 19 | |||
| B.2. Character Repertoire . . . . . . . . . . . . . . . . . . . 19 | B.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| B.3. Mapping . . . . . . . . . . . . . . . . . . . . . . . . . 19 | B.2. Character Repertoire . . . . . . . . . . . . . . . . . . . 20 | |||
| B.4. Normalization . . . . . . . . . . . . . . . . . . . . . . 19 | B.3. Mapping . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| B.5. Prohibited Output . . . . . . . . . . . . . . . . . . . . 19 | B.4. Normalization . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| B.6. Bidirectional Characters . . . . . . . . . . . . . . . . . 19 | B.5. Prohibited Output . . . . . . . . . . . . . . . . . . . . 20 | |||
| Appendix C. Differences From RFC 3920 . . . . . . . . . . . . . . 20 | B.6. Bidirectional Characters . . . . . . . . . . . . . . . . . 21 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 20 | Appendix C. Differences From RFC 3920 . . . . . . . . . . . . . . 21 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 21 | ||||
| 1. Introduction | 1. Introduction | |||
| The Extensible Messaging and Presence Protocol (XMPP) is an | The Extensible Messaging and Presence Protocol (XMPP) is an | |||
| application profile of the Extensible Markup Language [XML] for | application profile of the Extensible Markup Language [XML] for | |||
| streaming XML data in close to real time between any two or more | streaming XML data in close to real time between any two or more | |||
| network-aware entities. The address format for XMPP entities was | network-aware entities. The address format for XMPP entities was | |||
| originally developed in the Jabber open-source community in 1999, | originally developed in the Jabber open-source community in 1999, | |||
| first described by [XEP-0029] in 2002, and defined canonically by | first described by [XEP-0029] in 2002, and defined canonically by | |||
| [RFC3920] in 2004. | [RFC3920] in 2004. | |||
| skipping to change at page 3, line 33 | skipping to change at page 3, line 33 | |||
| on stringprep. Following the lead of the IDNA community, other | on stringprep. Following the lead of the IDNA community, other | |||
| technology communities that use stringprep have begun discussions | technology communities that use stringprep have begun discussions | |||
| about migrating away from stringprep toward more "modern" approaches. | about migrating away from stringprep toward more "modern" approaches. | |||
| The XMPP community is participating in those discussions in order to | The XMPP community is participating in those discussions in order to | |||
| find a replacement for the Nodeprep and Resourceprep profiles of | find a replacement for the Nodeprep and Resourceprep profiles of | |||
| stringprep defined in RFC 3920. However, work on improved handling | stringprep defined in RFC 3920. However, work on improved handling | |||
| of internationalized addresses is currently in progress within the | of internationalized addresses is currently in progress within the | |||
| PRECIS Working Group and at the time of this writing it seems that | PRECIS Working Group and at the time of this writing it seems that | |||
| such work might take several years to complete. Because all other | such work might take several years to complete. Because all other | |||
| aspects of revised documentation for XMPP have been incorporated into | aspects of revised documentation for XMPP have been incorporated into | |||
| [rfc3920bis], the XMPP Working Group decided to split the XMPP | [XMPP], the XMPP Working Group decided to split the XMPP address | |||
| address format into a separate specification so as not to | format into a separate specification so as not to significantly delay | |||
| significantly delay publication of improved documentation for XMPP | publication of improved documentation for XMPP while awaiting the | |||
| while awaiting the conclusion of work on improved handling of | conclusion of work on improved handling of internationalized | |||
| internationalized addresses. | addresses. | |||
| Therefore, this specification provides corrected documentation of the | Therefore, this specification provides corrected documentation of the | |||
| XMPP address format using the internationalization technologies | XMPP address format using the internationalization technologies | |||
| available in 2004 (when RFC 3920 was published), with the intent that | available in 2004 (when RFC 3920 was published), with the intent that | |||
| this specification will be superseded as soon as work on a new | this specification will be superseded as soon as work on a new | |||
| approach to preparation and comparison of internationalized strings | approach to preparation and comparison of internationalized strings | |||
| has been defined by the PRECIS Working Group and applied to the | has been defined by the PRECIS Working Group and applied to the | |||
| specific cases of XMPP localparts and resourceparts. | specific cases of XMPP localparts and resourceparts. | |||
| 2. Addresses | 2. Terminology | |||
| 2.1. Fundamentals | ||||
| Many important terms used in this document are defined in [IDNA2003], | ||||
| [STRINGPREP], [UNICODE], and [XMPP]. | ||||
| The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" in this document are to be interpreted as described in | ||||
| [KEYWORDS]. | ||||
| 3. Acknowledgements | ||||
| Some text in this document was borrowed or adapted from [IDNA-DEFS], | ||||
| [IDNA-PROTO], [IDNA-RATIONALE], and [XEP-0165]. | ||||
| 4. Addresses | ||||
| 4.1. Fundamentals | ||||
| An XMPP entity is anything that is network-addressable and that can | An XMPP entity is anything that is network-addressable and that can | |||
| communicate using XMPP. For historical reasons, the native address | communicate using XMPP. For historical reasons, the native address | |||
| of an XMPP entity is called a Jabber Identifier or JID. A valid JID | of an XMPP entity is called a Jabber Identifier or JID. A valid JID | |||
| is a string of [UNICODE] code points, encoded using [UTF-8], and | is a string of [UNICODE] code points, encoded using [UTF-8], and | |||
| structured as an ordered sequence of localpart, domainpart, and | structured as an ordered sequence of localpart, domainpart, and | |||
| resourcepart (where the first two parts are demarcated by the '@' | resourcepart (where the first two parts are demarcated by the '@' | |||
| character used as a separator, and the last two parts are similarly | character used as a separator, and the last two parts are similarly | |||
| demarcated by the '/' character). | demarcated by the '/' character). | |||
| skipping to change at page 4, line 40 | skipping to change at page 5, line 6 | |||
| ; code point that satisfies the Nameprep | ; code point that satisfies the Nameprep | |||
| ; profile of stringprep | ; profile of stringprep | |||
| resourcepart = 1*(resourcepoint) | resourcepart = 1*(resourcepoint) | |||
| ; a "resourcepoint" is a UTF-8 encoded Unicode | ; a "resourcepoint" is a UTF-8 encoded Unicode | |||
| ; code point that satisfies the Resourceprep | ; code point that satisfies the Resourceprep | |||
| ; profile of stringprep | ; profile of stringprep | |||
| All JIDs are based on the foregoing structure. One common use of | All JIDs are based on the foregoing structure. One common use of | |||
| this structure is to identify a messaging and presence account, the | this structure is to identify a messaging and presence account, the | |||
| server that hosts the account, and a connected resource (e.g., a | server that hosts the account, and a connected resource (e.g., a | |||
| specific device) in the form of <localpart@domain/resource>. | specific device) in the form of <localpart@domainpart/resourcepart>. | |||
| However, localparts other than clients are possible; for example, a | However, localparts other than clients are possible; for example, a | |||
| specific chat room offered by a multi-user chat service (see | specific chat room offered by a multi-user chat service (see | |||
| [XEP-0045]) is addressed as <room@service> (where "room" is the name | [XEP-0045]) is addressed as <room@service> (where "room" is the name | |||
| of the chat room and "service" is the hostname of the multi-user chat | of the chat room and "service" is the hostname of the multi-user chat | |||
| service) and a specific occupant of such a room could be addressed as | service) and a specific occupant of such a room could be addressed as | |||
| <room@service/nick> (where "nick" is the occupant's room nickname). | <room@service/nick> (where "nick" is the occupant's room nickname). | |||
| Many other JID types are possible (e.g., <domain/resource> could be a | Many other JID types are possible (e.g., <domainpart/resourcepart> | |||
| server-side script or service). | could be a server-side script or service). | |||
| Each allowable portion of a JID (localpart, domainpart, and | Each allowable portion of a JID (localpart, domainpart, and | |||
| resourcepart) MUST NOT be zero bytes in length and MUST NOT be more | resourcepart) MUST NOT be zero bytes in length and MUST NOT be more | |||
| than 1023 bytes in length, resulting in a maximum total size | than 1023 bytes in length, resulting in a maximum total size | |||
| (including the '@' and '/' separators) of 3071 bytes. | (including the '@' and '/' separators) of 3071 bytes. | |||
| An entity's address on an XMPP network MUST be represented as a JID | An entity's address on an XMPP network MUST be represented as a JID | |||
| (without a URI scheme) and not a [URI] or [IRI] as specified in | (without a URI scheme) and not a [URI] or [IRI] as specified in | |||
| [XMPP-URI]; the latter specification is provided only for | [XMPP-URI]; the latter specification is provided only for | |||
| identification and interaction outside the context of XMPP itself. | identification and interaction outside the context of XMPP itself. | |||
| Implementation Note: When dividing a JID into its component parts, | Implementation Note: When dividing a JID into its component parts, | |||
| an implementation needs to match the separator characters '@' and | an implementation needs to match the separator characters '@' and | |||
| '/' before applying any transformation algorithms, which might | '/' before applying any transformation algorithms, which might | |||
| decompose certain Unicode code points to the separator characters | decompose certain Unicode code points to the separator characters | |||
| (e.g., U+FE6B SMALL COMMERCIAL AT might decompose into U+0040 | (e.g., U+FE6B SMALL COMMERCIAL AT might decompose into U+0040 | |||
| COMMERCIAL AT). | COMMERCIAL AT). | |||
| 2.2. Domainpart | 4.2. Domainpart | |||
| The DOMAINPART of a JID is that portion after the '@' character (if | The DOMAINPART of a JID is that portion after the '@' character (if | |||
| any) and before the '/' character (if any); it is the primary | any) and before the '/' character (if any); it is the primary | |||
| identifier and is the only REQUIRED element of a JID (a mere | identifier and is the only REQUIRED element of a JID (a mere | |||
| domainpart is a valid JID). Typically a domainpart identifies the | domainpart is a valid JID). Typically a domainpart identifies the | |||
| "home" server to which clients connect for XML routing and data | "home" server to which clients connect for XML routing and data | |||
| management functionality. However, it is not necessary for an XMPP | management functionality. However, it is not necessary for an XMPP | |||
| domainpart to identify an entity that provides core XMPP server | domainpart to identify an entity that provides core XMPP server | |||
| functionality (e.g., a domainpart can identify an entity such as a | functionality (e.g., a domainpart can identify an entity such as a | |||
| multi-user chat service, a publish-subscribe service, or a user | multi-user chat service, a publish-subscribe service, or a user | |||
| skipping to change at page 5, line 43 | skipping to change at page 6, line 9 | |||
| a network SHOULD be a fully qualified domain name or "FQDN" (see | a network SHOULD be a fully qualified domain name or "FQDN" (see | |||
| [DNS]); although the domainpart is allowed to be either an Internet | [DNS]); although the domainpart is allowed to be either an Internet | |||
| Protocol (IPv4 or IPv6) address or a text label that is resolvable on | Protocol (IPv4 or IPv6) address or a text label that is resolvable on | |||
| a local network (commonly called an "unqualified hostname"), it is | a local network (commonly called an "unqualified hostname"), it is | |||
| possible that domainparts that are IP addresses will not be | possible that domainparts that are IP addresses will not be | |||
| acceptable to other services for the sake of interdomain | acceptable to other services for the sake of interdomain | |||
| communication. Furthermore, domainparts that are unqualified | communication. Furthermore, domainparts that are unqualified | |||
| hostnames MUST NOT be used on public networks but MAY be used on | hostnames MUST NOT be used on public networks but MAY be used on | |||
| private networks. | private networks. | |||
| Note: If the domainpart includes a final character considered to | Implementation Note: If the domainpart includes a final character | |||
| be a label separator (dot) by [IDNA2003] or [DNS], this character | considered to be a label separator (dot) by [IDNA2003] or [DNS], | |||
| MUST be stripped from the domainpart before the JID of which it is | this character MUST be stripped from the domainpart before the JID | |||
| a part is used for the purpose of routing an XML stanza, comparing | of which it is a part is used for the purpose of routing an XML | |||
| against another JID, or constructing an [XMPP-URI]; in particular, | stanza, comparing against another JID, or constructing an | |||
| the character MUST be stripped before any other canonicalization | [XMPP-URI]; in particular, the character MUST be stripped before | |||
| steps are taken, such as application of the [NAMEPREP] profile of | any other canonicalization steps are taken, such as application of | |||
| [STRINGPREP] or completion of the ToASCII operation as described | the [NAMEPREP] profile of [STRINGPREP] or completion of the | |||
| in [IDNA2003]. | ToASCII operation as described in [IDNA2003]. | |||
| A domainpart MUST NOT be zero bytes in length and MUST NOT be more | A domainpart MUST NOT be zero bytes in length and MUST NOT be more | |||
| than 1023 bytes in length. | than 1023 bytes in length. | |||
| A domainpart consisting of a fully qualified domain name MUST be an | A domainpart consisting of a fully qualified domain name MUST be an | |||
| "internationalized domain name" as defined in [IDNA2003], that is, it | "internationalized domain name" as defined in [IDNA2003], that is, it | |||
| MUST be "a domain name in which every label is an internationalized | MUST be "a domain name in which every label is an internationalized | |||
| label" and MUST follow the rules for construction of | label" and MUST follow the rules for construction of | |||
| internationalized domain names specified in [IDNA2003]. When | internationalized domain names specified in [IDNA2003]. When | |||
| preparing a text label (consisting of a sequence of UTF-8 encoded | preparing a text label (consisting of a sequence of UTF-8 encoded | |||
| skipping to change at page 6, line 39 | skipping to change at page 7, line 5 | |||
| that ACE label to an internationalized label using the ToUnicode | that ACE label to an internationalized label using the ToUnicode | |||
| operation (see [IDNA2003]) before including the label in an XMPP | operation (see [IDNA2003]) before including the label in an XMPP | |||
| domainpart that will be communicated over the wire on an XMPP network | domainpart that will be communicated over the wire on an XMPP network | |||
| (however, instead of converting the label, there are legitimate | (however, instead of converting the label, there are legitimate | |||
| reasons why an application might instead refuse the input altogether | reasons why an application might instead refuse the input altogether | |||
| and return an error to the entity that provided the offending data). | and return an error to the entity that provided the offending data). | |||
| In the terms of IDNA2008 [IDNA-DEFS], the domainpart of a JID is a | In the terms of IDNA2008 [IDNA-DEFS], the domainpart of a JID is a | |||
| "domain name slot". | "domain name slot". | |||
| 2.3. Localpart | 4.3. Localpart | |||
| The LOCALPART of a JID is an optional identifier placed before the | The LOCALPART of a JID is an optional identifier placed before the | |||
| domainpart and separated from the latter by the '@' character. | domainpart and separated from the latter by the '@' character. | |||
| Typically a localpart uniquely identifies the entity requesting and | Typically a localpart uniquely identifies the entity requesting and | |||
| using network access provided by a server (i.e., a local account), | using network access provided by a server (i.e., a local account), | |||
| although it can also represent other kinds of entities (e.g., a chat | although it can also represent other kinds of entities (e.g., a chat | |||
| room associated with a multi-user chat service). The entity | room associated with a multi-user chat service). The entity | |||
| represented by an XMPP localpart is addressed within the context of a | represented by an XMPP localpart is addressed within the context of a | |||
| specific domain. | specific domain. | |||
| A localpart MUST NOT be zero bytes in length and MUST NOT be more | A localpart MUST NOT be zero bytes in length and MUST NOT be more | |||
| than 1023 bytes in length. | than 1023 bytes in length. | |||
| A localpart MUST be formatted such that the Nodeprep profile of | A localpart MUST be formatted such that the Nodeprep profile of | |||
| [STRINGPREP] can be applied without failing (see Appendix A). Before | [STRINGPREP] can be applied without failing (see Appendix A). Before | |||
| comparing two localparts, an application MUST first ensure that the | comparing two localparts, an application MUST first ensure that the | |||
| Nodeprep profile has been applied to each identifier (the profile | Nodeprep profile has been applied to each identifier (the profile | |||
| need not be applied each time a comparison is made, as long as it has | need not be applied each time a comparison is made, as long as it has | |||
| been applied before comparison). | been applied before comparison). | |||
| 2.4. Resourcepart | 4.4. Resourcepart | |||
| The resourcepart of a JID is an optional identifier placed after the | The resourcepart of a JID is an optional identifier placed after the | |||
| domainpart and separated from the latter by the '/' character. A | domainpart and separated from the latter by the '/' character. A | |||
| resourcepart can modify either a <localpart@domainpart> address or a | resourcepart can modify either a <localpart@domainpart> address or a | |||
| mere <domainpart> address. Typically a resourcepart uniquely | mere <domainpart> address. Typically a resourcepart uniquely | |||
| identifies a specific connection (e.g., a device or location) or | identifies a specific connection (e.g., a device or location) or | |||
| object (e.g., an occupant in a multi-user chat room) belonging to the | object (e.g., an occupant in a multi-user chat room) belonging to the | |||
| entity associated with an XMPP localpart at a local domain. | entity associated with an XMPP localpart at a local domain. | |||
| When an XMPP address does not include a resourcepart (i.e., when it | When an XMPP address does not include a resourcepart (i.e., when it | |||
| is of the form <domainpart> or <localpart@domainpart>), it is | is of the form <domainpart> or <localpart@domainpart>), it is | |||
| referred to as a BARE JID. When an XMPP address includes a | referred to as a BARE JID. When an XMPP address includes a | |||
| resourcepart (i.e., when it is of the form <domain/resource> or | resourcepart (i.e., when it is of the form <domainpart/resourcepart> | |||
| <localpart@domain/resource>), is referred to as a FULL JID. | or <localpart@domainpart/resourcepart>), is referred to as a FULL | |||
| JID. | ||||
| A resourcepart MUST NOT be zero bytes in length and MUST NOT be more | A resourcepart MUST NOT be zero bytes in length and MUST NOT be more | |||
| than 1023 bytes in length. | than 1023 bytes in length. | |||
| A resourcepart MUST be formatted such that the Resourceprep profile | A resourcepart MUST be formatted such that the Resourceprep profile | |||
| of [STRINGPREP] can be applied without failing (see Appendix B). | of [STRINGPREP] can be applied without failing (see Appendix B). | |||
| Before comparing two resourceparts, an application MUST first ensure | Before comparing two resourceparts, an application MUST first ensure | |||
| that the Resourceprep profile has been applied to each identifier | that the Resourceprep profile has been applied to each identifier | |||
| (the profile need not be applied each time a comparison is made, as | (the profile need not be applied each time a comparison is made, as | |||
| long as it has been applied before comparison). | long as it has been applied before comparison). | |||
| Note: For historical reasons, the term "resource identifier" is | Informational Note: For historical reasons, the term "resource | |||
| often used in XMPP to refer to the optional portion of an XMPP | identifier" is often used in XMPP to refer to the optional portion | |||
| address that follows the domainpart and the "/" separator | of an XMPP address that follows the domainpart and the "/" | |||
| character; to help prevent confusion between an XMPP "resource | separator character; to help prevent confusion between an XMPP | |||
| identifier" and the meanings of "resource" and "identifier" | "resource identifier" and the meanings of "resource" and | |||
| provided in Section 1.1 of [URI], this specification uses the term | "identifier" provided in Section 1.1 of [URI], this specification | |||
| "resourcepart" instead of "resource identifier" (as in RFC 3920). | uses the term "resourcepart" instead of "resource identifier" (as | |||
| in RFC 3920). | ||||
| XMPP entities SHOULD consider resourceparts to be opaque strings and | XMPP entities SHOULD consider resourceparts to be opaque strings and | |||
| SHOULD NOT impute meaning to any given resourcepart. In particular: | SHOULD NOT impute meaning to any given resourcepart. In particular: | |||
| o Use of the '/' character as a separator between the domainpart and | o Use of the '/' character as a separator between the domainpart and | |||
| the resourcepart does not imply that XMPP addresses are | the resourcepart does not imply that XMPP addresses are | |||
| hierarchical in the way that, say, HTTP addresses are | hierarchical in the way that, say, HTTP addresses are | |||
| hierarchical; thus for example an XMPP address of the form | hierarchical; thus for example an XMPP address of the form | |||
| <localpart@domain/foo/bar> does not identify a resource "bar" that | <localpart@domainpart/foo/bar> does not identify a resource "bar" | |||
| exists below a resource "foo" in a hierarchy of resources | that exists below a resource "foo" in a hierarchy of resources | |||
| associated with the entity "localpart@domain". | associated with the entity "localpart@domain". | |||
| o The '@' character is allowed in the resourcepart, and is often | o The '@' character is allowed in the resourcepart, and is often | |||
| used in the "nick" shown in XMPP chatrooms. For example, the JID | used in the "nick" shown in XMPP chatrooms. For example, the JID | |||
| <room@chat.example.com/user@host> describes an entity who is an | <room@chat.example.com/user@host> describes an entity who is an | |||
| occupant of the room <room@chat.example.com> with an (asserted) | occupant of the room <room@chat.example.com> with an (asserted) | |||
| nick of <user@host>. However, chatroom services do not | nick of <user@host>. However, chatroom services do not | |||
| necessarily check such an asserted nick against the occupant's | necessarily check such an asserted nick against the occupant's | |||
| real JID. | real JID. | |||
| 3. Internationalization Considerations | 5. Internationalization Considerations | |||
| XMPP servers MUST, and XMPP clients SHOULD, support [IDNA2003] for | XMPP servers MUST, and XMPP clients SHOULD, support [IDNA2003] for | |||
| domainparts (including the [NAMEPREP] profile of [STRINGPREP]), the | domainparts (including the [NAMEPREP] profile of [STRINGPREP]), the | |||
| Nodeprep (Appendix A) profile of [STRINGPREP] for localparts, and the | Nodeprep (Appendix A) profile of [STRINGPREP] for localparts, and the | |||
| Resourceprep (Appendix B) profile of [STRINGPREP] for resourceparts; | Resourceprep (Appendix B) profile of [STRINGPREP] for resourceparts; | |||
| this enables XMPP addresses to include a wide variety of characters | this enables XMPP addresses to include a wide variety of characters | |||
| outside the US-ASCII range. Rules for enforcement of the XMPP | outside the US-ASCII range. Rules for enforcement of the XMPP | |||
| address format are provided in [rfc3920bis]. | address format are provided in [XMPP]. | |||
| 4. Security Considerations | 6. Security Considerations | |||
| 4.1. Reuse of Stringprep | 6.1. Reuse of Stringprep | |||
| The security considerations described in [STRINGPREP] apply to the | The security considerations described in [STRINGPREP] apply to the | |||
| Nodeprep (Appendix A) and Resourceprep (Appendix B) profiles defined | Nodeprep (Appendix A) and Resourceprep (Appendix B) profiles defined | |||
| in this document for XMPP localparts and resourceparts. The security | in this document for XMPP localparts and resourceparts. The security | |||
| considerations described in [STRINGPREP] and [NAMEPREP] apply to the | considerations described in [STRINGPREP] and [NAMEPREP] apply to the | |||
| Nameprep profile that is re-used here for XMPP domainparts. | Nameprep profile that is re-used here for XMPP domainparts. | |||
| 4.2. Reuse of Unicode | 6.2. Reuse of Unicode | |||
| The security considerations described in [UNICODE-SEC] apply to the | The security considerations described in [UNICODE-SEC] apply to the | |||
| use of Unicode characters in XMPP addresses. | use of Unicode characters in XMPP addresses. | |||
| 4.3. Confusable Characters | 6.3. Address Spoofing | |||
| The Unicode and ISO/IEC 10646 repertoires have many characters that | ||||
| look similar (so-called "confusable characters"). In many cases, | ||||
| users of security protocols might perform visual matching, such as | ||||
| when comparing the names of trusted third parties. Because it is | ||||
| impossible to map similar-looking characters without a great deal of | ||||
| context (such as knowing the fonts used), stringprep does nothing to | ||||
| map similar-looking characters together, nor to prohibit some | ||||
| characters because they look like others. Some specific suggestions | ||||
| about identification and handling of confusable characters appear in | ||||
| the Unicode Security Considerations [UNICODE-SEC]. | ||||
| A localpart can be employed as one part of an entity's address in | ||||
| XMPP. One common usage is as the username of an instant messaging | ||||
| user; another is as the name of a multi-user chat room; and many | ||||
| other kinds of entities could use localparts as part of their | ||||
| addresses. The security of such services could be compromised based | ||||
| on different interpretations of the internationalized localpart; for | ||||
| example, a user entering a single internationalized localpart could | ||||
| access another user's account information, or a user could gain | ||||
| access to a hidden or otherwise restricted chat room or service. | ||||
| A resourcepart can be employed as one part of an entity's address in | ||||
| XMPP. One common usage is as the name for an instant messaging | ||||
| user's connected resource; another is as the nickname of a user in a | ||||
| multi-user chat room; and many other kinds of entities could use | ||||
| resourceparts as part of their addresses. The security of such | ||||
| services could be compromised based on different interpretations of | ||||
| the internationalized resourcepart; for example, a user could attempt | ||||
| to initiate multiple connections with the same name, or a user could | ||||
| send a message to someone other than the intended recipient in a | ||||
| multi-user chat room. | ||||
| 4.4. Address Spoofing | ||||
| There are two forms of address spoofing: forging and mimicking. | There are two forms of address spoofing: forging and mimicking. | |||
| 4.4.1. Address Forging | 6.3.1. Address Forging | |||
| In the context of XMPP technologies, address forging occurs when an | In the context of XMPP technologies, address forging occurs when an | |||
| entity is able to generate an XML stanza whose 'from' address does | entity is able to generate an XML stanza whose 'from' address does | |||
| not correspond to the account credentials with which the entity | not correspond to the account credentials with which the entity | |||
| authenticated onto the network (or an authorization identity provided | authenticated onto the network (or an authorization identity provided | |||
| during SASL negotiation). For example, address forging occurs if an | during SASL negotiation). For example, address forging occurs if an | |||
| entity that authenticated as "juliet@im.example.com" is able to send | entity that authenticated as "juliet@im.example.com" is able to send | |||
| XML stanzas from "nurse@im.example.com" or "romeo@example.net". | XML stanzas from "nurse@im.example.com" or "romeo@example.net". | |||
| Address forging is difficult in XMPP systems, given the requirement | Address forging is difficult in XMPP systems, given the requirement | |||
| for sending servers to stamp 'from' addresses and for receiving | for sending servers to stamp 'from' addresses and for receiving | |||
| servers to verify sending domains via server-to-server authentication | servers to verify sending domains via server-to-server authentication | |||
| (see [rfc3920bis]). However, address forging is not impossible, | (see [XMPP]). However, address forging is not impossible, since a | |||
| since a rogue server could forge JIDs at the sending domain by | rogue server could forge JIDs at the sending domain by ignoring the | |||
| ignoring the stamping requirement. Therefore, an entity outside the | stamping requirement. Therefore, an entity outside the security | |||
| security perimeter of a particular server cannot reliably distinguish | perimeter of a particular server cannot reliably distinguish between | |||
| between bare JIDs of the form <localpart@domainpart> at that server | bare JIDs of the form <localpart@domainpart> at that server and thus | |||
| and thus can authenticate only the domainpart of such JIDs with any | can authenticate only the domainpart of such JIDs with any level of | |||
| level of assurance. This specification does not define methods for | assurance. This specification does not define methods for | |||
| discovering or counteracting such rogue servers. | discovering or counteracting such rogue servers. | |||
| Furthermore, it is possible for an attacker to forge JIDs at other | Furthermore, it is possible for an attacker to forge JIDs at other | |||
| domains by means of a DNS poisoning attack if DNS security extensions | domains by means of a DNS poisoning attack if DNS security extensions | |||
| [DNSSEC] are not used. | [DNSSEC] are not used. | |||
| 4.4.2. Address Mimicking | 6.3.2. Address Mimicking | |||
| Address mimicking occurs when an entity provides legitimate | Address mimicking occurs when an entity provides legitimate | |||
| authentication credentials for and sends XML stanzas from an account | authentication credentials for and sends XML stanzas from an account | |||
| whose JID appears to a human user to be the same as another JID. For | whose JID appears to a human user to be the same as another JID. For | |||
| example, in some XMPP clients the address "paypa1@example.org" | example, in some XMPP clients the address "ju1iet@example.org" | |||
| (spelled with the number one as the final character of the localpart) | (spelled with the number one as the third character of the localpart) | |||
| might appear to be the same as "paypal@example.org (spelled with the | might appear to be the same as "juliet@example.org (spelled with the | |||
| lower-case version of the letter "L"), especially on casual visual | lower-case version of the letter "L"), especially on casual visual | |||
| inspection; this phenomenon is sometimes called "typejacking". A | inspection; this phenomenon is sometimes called "typejacking". A | |||
| more sophisticated example of address mimicking might involve the use | more sophisticated example of address mimicking might involve the use | |||
| of characters from outside the US-ASCII range, such as the Cherokee | of characters from outside the familiar Latin extended-A block of | |||
| characters U+13DA U+13A2 U+13B5 U+13AC U+13A2 U+13AC U+13D2 instead | Unicode code points, such as the characters U+13DA U+13A2 U+13B5 | |||
| of the US-ASCII characters "STPETER". | U+13AC U+13A2 U+13AC U+13D2 from the Cherokee block instead of the | |||
| similar-looking US-ASCII characters "STPETER". | ||||
| In some examples of address mimicking, it is unlikely that the | In some examples of address mimicking, it is unlikely that the | |||
| average user could tell the difference between the real JID and the | average user could tell the difference between the real JID and the | |||
| fake JID. (Indeed, there is no way to distinguish with full | fake JID. (Indeed, there is no programmatic way to distinguish with | |||
| certainty which is the fake JID and which is the real JID; in some | full certainty which is the fake JID and which is the real JID; in | |||
| communication contexts, the JID with Cherokee characters might be the | some communication contexts, the JID formed of Cherokee characters | |||
| real JID and the JID with US-ASCII characters might thus appear to be | might be the real JID and the JID formed of US-ASCII characters might | |||
| the fake JID.) Because JIDs can contain almost any Unicode | thus appear to be the fake JID.) Because JIDs can contain almost any | |||
| character, it can be relatively easy to mimic some JIDs in XMPP | properly-encoded Unicode code point, it can be relatively easy to | |||
| systems. The possibility of address mimicking introduces security | mimic some JIDs in XMPP systems. The possibility of address | |||
| vulnerabilities of the kind that have also plagued the World Wide | mimicking introduces security vulnerabilities of the kind that have | |||
| Web, specifically the phenomenon known as phishing. | also plagued the World Wide Web, specifically the phenomenon known as | |||
| phishing. | ||||
| As noted in [IDNA-DEFS], "there are no comprehensive technical | These problems arise because Unicode and ISO/IEC 10646 repertoires | |||
| solutions to the problems of confusable characters". Mimicked JIDs | have many characters that look similar (so-called "confusable | |||
| that involve characters from only one character set or from the | characters" or "confusables"). In many cases, XMPP users might | |||
| character set typically employed by a particular user are not easy to | perform visual matching, such as when comparing the JIDs of | |||
| combat (e.g., the simple typejacking attack previously described, | communication partners. Because it is impossible to map similar- | |||
| which relies on a surface similarity between the characters "1" and | looking characters without a great deal of context (such as knowing | |||
| "l" in some presentations). However, mimicked addresses that involve | the fonts used), stringprep and stringprep-based technologies such as | |||
| characters from more than one character set, or from a character set | Nameprep, Nodeprep, and Resourceprep do nothing to map similar- | |||
| not typically employed by a particular user, can be mitigated | looking characters together, nor do they prohibit some characters | |||
| somewhat through intelligent presentation. In particular, every | because they look like others. As a result, XMPP localparts and | |||
| human user of an XMPP technology presumably has a preferred language | resourceparts could contain confusable characters, producing JIDs | |||
| (or, in some cases, a small set of preferred languages), which an | that appear to mimic other JIDs and thus leading to security | |||
| XMPP application SHOULD gather either explicitly from the user or | vulnerabilities such as the following: | |||
| implicitly via the operating system of the user's device. | ||||
| Furthermore, every language has a range (or a small set of ranges) of | o A localpart can be employed as one part of an entity's address in | |||
| characters normally used to represent that language in textual form. | XMPP. One common usage is as the username of an instant messaging | |||
| Therefore, an XMPP application SHOULD warn the user when presenting a | user; another is as the name of a multi-user chat room; and many | |||
| JID that mixes characters from more than one character set or that | other kinds of entities could use localparts as part of their | |||
| uses characters outside the normal range of the user's preferred | addresses. The security of such services could be compromised | |||
| language(s). This recommendation is not intended to discourage | based on different interpretations of the internationalized | |||
| communication across language communities; instead, it recognizes the | localpart; for example, a user entering a single internationalized | |||
| existence of such language communities and encourages due caution | localpart could access another user's account information, or a | |||
| when presenting unfamiliar character sets to human users. | user could gain access to a hidden or otherwise restricted chat | |||
| room or service. | ||||
| 5. IANA Considerations | o A resourcepart can be employed as one part of an entity's address | |||
| in XMPP. One common usage is as the name for an instant messaging | ||||
| user's connected resource; another is as the nickname of a user in | ||||
| a multi-user chat room; and many other kinds of entities could use | ||||
| resourceparts as part of their addresses. The security of such | ||||
| services could be compromised based on different interpretations | ||||
| of the internationalized resourcepart; for example, a user could | ||||
| attempt to bind multiple resources with the same name, or a user | ||||
| could send a message to someone other than the intended recipient | ||||
| in a multi-user chat room. | ||||
| Despite the fact that some specific suggestions about identification | ||||
| and handling of confusable characters appear in the Unicode Security | ||||
| Considerations [UNICODE-SEC], it is also true (as noted in | ||||
| [IDNA-DEFS]) that "there are no comprehensive technical solutions to | ||||
| the problems of confusable characters". Mimicked JIDs that involve | ||||
| characters from only one script, or from the script typically | ||||
| employed by a particular user or community of language users, are not | ||||
| easy to combat (e.g., the simple typejacking attack previously | ||||
| described, which relies on a surface similarity between the | ||||
| characters "1" and "l" in some presentations). However, mimicked | ||||
| addresses that involve characters from more than one script, or from | ||||
| a script not typically employed by a particular user or community of | ||||
| language users, can be mitigated somewhat through the application of | ||||
| appropriate registration policies at XMPP services and presentation | ||||
| policies in XMPP client software. Therefore the following policies | ||||
| are encouraged: | ||||
| 1. Because an XMPP service that allows registration of XMPP user | ||||
| accounts (localparts) plays a role similar to that of a registry | ||||
| for DNS domain names, such a service SHOULD establish a policy | ||||
| about the scripts or blocks of characters it will allow in | ||||
| localparts at the service. Such a policy is likely to be | ||||
| informed by the languages and scripts that are used to write | ||||
| registered account names; in particular, to reduce confusion, the | ||||
| service MAY forbid registration of XMPP localparts that contain | ||||
| characters from more than one script and to restrict | ||||
| registrations to characters drawn from a very small number of | ||||
| scripts (e.g., scripts that are well-understood by the | ||||
| administrators of the service). For related considerations in | ||||
| the context of domain name registration, refer to Section 4.3 of | ||||
| [IDNA-PROTO] and Section 3.2 of [IDNA-RATIONALE]. Note well that | ||||
| methods for enforcing such restrictions are out of scope for this | ||||
| document. | ||||
| 2. Because every human user of an XMPP client presumably has a | ||||
| preferred language (or, in some cases, a small set of preferred | ||||
| languages), an XMPP client SHOULD gather that information either | ||||
| explicitly from the user or implicitly via the operating system | ||||
| of the user's device. Furthermore, because most languages are | ||||
| typically represented by a single script (or a small set of | ||||
| scripts) and most scripts are typically contained in one or more | ||||
| blocks of characters, an XMPP client SHOULD warn the user when | ||||
| presenting a JID that mixes characters from more than one script | ||||
| or block, or that uses characters outside the normal range of the | ||||
| user's preferred language(s). This recommendation is not | ||||
| intended to discourage communication across different communities | ||||
| of language users; instead, it recognizes the existence of such | ||||
| communities and encourages due caution when presenting unfamiliar | ||||
| scripts or characters to human users. | ||||
| 7. IANA Considerations | ||||
| The following sections update the registrations provided in | The following sections update the registrations provided in | |||
| [RFC3920]. | [RFC3920]. | |||
| 5.1. Nodeprep Profile of Stringprep | 7.1. Nodeprep Profile of Stringprep | |||
| The Nodeprep profile of stringprep is defined under Nodeprep | The Nodeprep profile of stringprep is defined under Nodeprep | |||
| (Appendix A). The IANA has registered Nodeprep in the stringprep | (Appendix A). The IANA has registered Nodeprep in the stringprep | |||
| profile registry. | profile registry. | |||
| Name of this profile: | Name of this profile: | |||
| Nodeprep | Nodeprep | |||
| RFC in which the profile is defined: | RFC in which the profile is defined: | |||
| XXXX | XXXX | |||
| Indicator whether or not this is the newest version of the profile: | Indicator whether or not this is the newest version of the profile: | |||
| This is the first version of Nodeprep | This is the first version of Nodeprep | |||
| 5.2. Resourceprep Profile of Stringprep | 7.2. Resourceprep Profile of Stringprep | |||
| The Resourceprep profile of stringprep is defined under Resourceprep | The Resourceprep profile of stringprep is defined under Resourceprep | |||
| (Appendix B). The IANA has registered Resourceprep in the stringprep | (Appendix B). The IANA has registered Resourceprep in the stringprep | |||
| profile registry. | profile registry. | |||
| Name of this profile: | Name of this profile: | |||
| Resourceprep | Resourceprep | |||
| RFC in which the profile is defined: | RFC in which the profile is defined: | |||
| XXXX | XXXX | |||
| Indicator whether or not this is the newest version of the profile: | Indicator whether or not this is the newest version of the profile: | |||
| This is the first version of Resourceprep | This is the first version of Resourceprep | |||
| 6. Conformance Requirements | 8. Conformance Requirements | |||
| This section describes a protocol feature set that summarizes the | This section describes a protocol feature set that summarizes the | |||
| conformance requirements of this specification. This feature set is | conformance requirements of this specification. This feature set is | |||
| appropriate for use in software certification, interoperability | appropriate for use in software certification, interoperability | |||
| testing, and implementation reports. For each feature, this section | testing, and implementation reports. For each feature, this section | |||
| provides the following information: | provides the following information: | |||
| o A human-readable name | o A human-readable name | |||
| o An informational description | o An informational description | |||
| skipping to change at page 12, line 44 | skipping to change at page 13, line 44 | |||
| formats proposed by Larry Masinter within the IETF's NEWTRK Working | formats proposed by Larry Masinter within the IETF's NEWTRK Working | |||
| Group in 2005, as captured in [INTEROP]. Although this feature set | Group in 2005, as captured in [INTEROP]. Although this feature set | |||
| is more detailed than called for by [REPORTS], it provides a suitable | is more detailed than called for by [REPORTS], it provides a suitable | |||
| basis for the generation of implementation reports to be submitted in | basis for the generation of implementation reports to be submitted in | |||
| support of advancing this specification from Proposed Standard to | support of advancing this specification from Proposed Standard to | |||
| Draft Standard in accordance with [PROCESS]. | Draft Standard in accordance with [PROCESS]. | |||
| Feature: address-domain-length | Feature: address-domain-length | |||
| Description: Ensure that the domainpart of an XMPP address is at | Description: Ensure that the domainpart of an XMPP address is at | |||
| least one byte in length and at most 1023 bytes in length. | least one byte in length and at most 1023 bytes in length. | |||
| Section: Section 2.2 | Section: Section 4.2 | |||
| Roles: Both MUST. | Roles: Both MUST. | |||
| Feature: address-domain-prep | Feature: address-domain-prep | |||
| Description: Ensure that the domainpart of an XMPP address conforms | Description: Ensure that the domainpart of an XMPP address conforms | |||
| to the Nameprep profile of Stringprep. | to the Nameprep profile of Stringprep. | |||
| Section: Section 2.2 | Section: Section 4.2 | |||
| Roles: Client SHOULD, Server MUST. | Roles: Client SHOULD, Server MUST. | |||
| Feature: address-localpart-length | Feature: address-localpart-length | |||
| Description: Ensure that the localpart of an XMPP address is at | Description: Ensure that the localpart of an XMPP address is at | |||
| least one byte in length and at most 1023 bytes in length. | least one byte in length and at most 1023 bytes in length. | |||
| Section: Section 2.3 | Section: Section 4.3 | |||
| Roles: Both MUST. | Roles: Both MUST. | |||
| Feature: address-localpart-prep | Feature: address-localpart-prep | |||
| Description: Ensure that the localpart of an XMPP address conforms | Description: Ensure that the localpart of an XMPP address conforms | |||
| to the Nodeprep profile of Stringprep. | to the Nodeprep profile of Stringprep. | |||
| Section: Section 2.3 | Section: Section 4.3 | |||
| Roles: Client SHOULD, Server MUST. | Roles: Client SHOULD, Server MUST. | |||
| Feature: address-resource-length | Feature: address-resource-length | |||
| Description: Ensure that the resourcepart of an XMPP address is at | Description: Ensure that the resourcepart of an XMPP address is at | |||
| least one byte in length and at most 1023 bytes in length. | least one byte in length and at most 1023 bytes in length. | |||
| Section: Section 2.4 | Section: Section 4.4 | |||
| Roles: Both MUST. | Roles: Both MUST. | |||
| Feature: address-resource-prep | Feature: address-resource-prep | |||
| Description: Ensure that the resourcepart of an XMPP address | Description: Ensure that the resourcepart of an XMPP address | |||
| conforms to the Resourceprep profile of Stringprep. | conforms to the Resourceprep profile of Stringprep. | |||
| Section: Section 2.2 | Section: Section 4.2 | |||
| Roles: Client SHOULD, Server MUST. | Roles: Client SHOULD, Server MUST. | |||
| 7. References | 9. References | |||
| 7.1. Normative References | 9.1. Normative References | |||
| [ABNF] Crocker, D. and P. Overell, "Augmented BNF for Syntax | [ABNF] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", STD 68, RFC 5234, January 2008. | Specifications: ABNF", STD 68, RFC 5234, January 2008. | |||
| [IDNA2003] | [IDNA2003] | |||
| Faltstrom, P., Hoffman, P., and A. Costello, | Faltstrom, P., Hoffman, P., and A. Costello, | |||
| "Internationalizing Domain Names in Applications (IDNA)", | "Internationalizing Domain Names in Applications (IDNA)", | |||
| RFC 3490, March 2003. | RFC 3490, March 2003. | |||
| See Section 1 for an explanation of why the normative | See Section 1 for an explanation of why the normative | |||
| skipping to change at page 14, line 13 | skipping to change at page 15, line 13 | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [NAMEPREP] | [NAMEPREP] | |||
| Hoffman, P. and M. Blanchet, "Nameprep: A Stringprep | Hoffman, P. and M. Blanchet, "Nameprep: A Stringprep | |||
| Profile for Internationalized Domain Names (IDN)", | Profile for Internationalized Domain Names (IDN)", | |||
| RFC 3491, March 2003. | RFC 3491, March 2003. | |||
| See Section 1 for an explanation of why the normative | See Section 1 for an explanation of why the normative | |||
| reference to an obsoleted specification is needed. | reference to an obsoleted specification is needed. | |||
| [rfc3920bis] | ||||
| Saint-Andre, P., "Extensible Messaging and Presence | ||||
| Protocol (XMPP): Core", draft-ietf-xmpp-3920bis-17 (work | ||||
| in progress), October 2010. | ||||
| [STRINGPREP] | [STRINGPREP] | |||
| Hoffman, P. and M. Blanchet, "Preparation of | Hoffman, P. and M. Blanchet, "Preparation of | |||
| Internationalized Strings ("stringprep")", RFC 3454, | Internationalized Strings ("stringprep")", RFC 3454, | |||
| December 2002. | December 2002. | |||
| [UNICODE] The Unicode Consortium, "The Unicode Standard, Version | [UNICODE] The Unicode Consortium, "The Unicode Standard, Version | |||
| 3.2.0", 2000. | 3.2.0", 2000. | |||
| The Unicode Standard, Version 3.2.0 is defined by The | The Unicode Standard, Version 3.2.0 is defined by The | |||
| Unicode Standard, Version 3.0 (Reading, MA, Addison- | Unicode Standard, Version 3.0 (Reading, MA, Addison- | |||
| skipping to change at page 14, line 41 | skipping to change at page 15, line 36 | |||
| Standard Annex #28: Unicode 3.2 | Standard Annex #28: Unicode 3.2 | |||
| (http://www.unicode.org/reports/tr28/). | (http://www.unicode.org/reports/tr28/). | |||
| [UNICODE-SEC] | [UNICODE-SEC] | |||
| The Unicode Consortium, "Unicode Technical Report #36: | The Unicode Consortium, "Unicode Technical Report #36: | |||
| Unicode Security Considerations", 2008. | Unicode Security Considerations", 2008. | |||
| [UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO | [UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO | |||
| 10646", STD 63, RFC 3629, November 2003. | 10646", STD 63, RFC 3629, November 2003. | |||
| 7.2. Informative References | [XMPP] Saint-Andre, P., "Extensible Messaging and Presence | |||
| Protocol (XMPP): Core", draft-ietf-xmpp-3920bis-17 (work | ||||
| in progress), October 2010. | ||||
| 9.2. Informative References | ||||
| [DNS] Mockapetris, P., "Domain names - implementation and | [DNS] Mockapetris, P., "Domain names - implementation and | |||
| specification", STD 13, RFC 1035, November 1987. | specification", STD 13, RFC 1035, November 1987. | |||
| [DNSSEC] Arends, R., Austein, R., Larson, M., Massey, D., and S. | [DNSSEC] Arends, R., Austein, R., Larson, M., Massey, D., and S. | |||
| Rose, "DNS Security Introduction and Requirements", | Rose, "DNS Security Introduction and Requirements", | |||
| RFC 4033, March 2005. | RFC 4033, March 2005. | |||
| [IDNA-DEFS] | [IDNA-DEFS] | |||
| Klensin, J., "Internationalized Domain Names for | Klensin, J., "Internationalized Domain Names for | |||
| Applications (IDNA): Definitions and Document Framework", | Applications (IDNA): Definitions and Document Framework", | |||
| RFC 5890, August 2010. | RFC 5890, August 2010. | |||
| [IDNA-PROTO] | [IDNA-PROTO] | |||
| Klensin, J., "Internationalized Domain Names in | Klensin, J., "Internationalized Domain Names in | |||
| Applications (IDNA): Protocol", RFC 5891, August 2010. | Applications (IDNA): Protocol", RFC 5891, August 2010. | |||
| [IDNA-RATIONALE] | ||||
| Klensin, J., "Internationalized Domain Names for | ||||
| Applications (IDNA): Background, Explanation, and | ||||
| Rationale", RFC 5894, August 2010. | ||||
| [INTEROP] Masinter, L., "Formalizing IETF Interoperability | [INTEROP] Masinter, L., "Formalizing IETF Interoperability | |||
| Reporting", draft-ietf-newtrk-interop-reports-00 (work in | Reporting", draft-ietf-newtrk-interop-reports-00 (work in | |||
| progress), October 2005. | progress), October 2005. | |||
| [IRI] Duerst, M. and M. Suignard, "Internationalized Resource | [IRI] Duerst, M. and M. Suignard, "Internationalized Resource | |||
| Identifiers (IRIs)", RFC 3987, January 2005. | Identifiers (IRIs)", RFC 3987, January 2005. | |||
| [PROCESS] Bradner, S., "The Internet Standards Process -- Revision | [PROCESS] Bradner, S., "The Internet Standards Process -- Revision | |||
| 3", BCP 9, RFC 2026, October 1996. | 3", BCP 9, RFC 2026, October 1996. | |||
| skipping to change at page 15, line 46 | skipping to change at page 16, line 50 | |||
| [XEP-0029] | [XEP-0029] | |||
| Kaes, C., "Definition of Jabber Identifiers (JIDs)", XSF | Kaes, C., "Definition of Jabber Identifiers (JIDs)", XSF | |||
| XEP 0029, October 2003. | XEP 0029, October 2003. | |||
| [XEP-0030] | [XEP-0030] | |||
| Hildebrand, J., Millard, P., Eatmon, R., and P. Saint- | Hildebrand, J., Millard, P., Eatmon, R., and P. Saint- | |||
| Andre, "Service Discovery", XSF XEP 0030, June 2008. | Andre, "Service Discovery", XSF XEP 0030, June 2008. | |||
| [XEP-0045] | [XEP-0045] | |||
| Saint-Andre, P., "Multi-User Chat", XSF XEP 0045, | Saint-Andre, P., "Multi-User Chat", XSF XEP 0045, | |||
| January in progress, last updated 2010. | July 2008. | |||
| [XEP-0060] | [XEP-0060] | |||
| Millard, P., Saint-Andre, P., and R. Meijer, "Publish- | Millard, P., Saint-Andre, P., and R. Meijer, "Publish- | |||
| Subscribe", XSF XEP 0060, September 2008. | Subscribe", XSF XEP 0060, September 2008. | |||
| [XEP-0165] | ||||
| Saint-Andre, P., "Best Practices to Discourage JID | ||||
| Mimicking", XSF XEP 0045, December 2007. | ||||
| [XML] Paoli, J., Maler, E., Sperberg-McQueen, C., Yergeau, F., | [XML] Paoli, J., Maler, E., Sperberg-McQueen, C., Yergeau, F., | |||
| and T. Bray, "Extensible Markup Language (XML) 1.0 (Fourth | and T. Bray, "Extensible Markup Language (XML) 1.0 (Fourth | |||
| Edition)", World Wide Web Consortium Recommendation REC- | Edition)", World Wide Web Consortium Recommendation REC- | |||
| xml-20060816, August 2006, | xml-20060816, August 2006, | |||
| <http://www.w3.org/TR/2006/REC-xml-20060816>. | <http://www.w3.org/TR/2006/REC-xml-20060816>. | |||
| [XMPP-URI] | [XMPP-URI] | |||
| Saint-Andre, P., "Internationalized Resource Identifiers | Saint-Andre, P., "Internationalized Resource Identifiers | |||
| (IRIs) and Uniform Resource Identifiers (URIs) for the | (IRIs) and Uniform Resource Identifiers (URIs) for the | |||
| Extensible Messaging and Presence Protocol (XMPP)", | Extensible Messaging and Presence Protocol (XMPP)", | |||
| End of changes. 46 change blocks. | ||||
| 180 lines changed or deleted | 236 lines changed or added | |||
This html diff was produced by rfcdiff 1.38. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||