RFC 3384

Lightweight Directory Access Protocol (version 3) Replication Requirements

๐Ÿ“… published October 2002, from ietf

RFC 3384: Lightweight Directory Access Protocol (version 3) Replication Requirements โœจ

Okay bestie, let's get into it! ๐Ÿ’– This is RFC 3384, written in October 2002 by four people: E. Stokes from IBM, R. Weiser from Digital Signature Trust, R. Moats from Lemur Networks, and R. Huber from AT&T Laboratories. It's an Informational doc, which means it shares information with the Internet community and doesn't set any Internet standard. ๐Ÿฆ‹ The title block doesn't list any RFCs it obsoletes or updates, so it's standing all on its own.


Status of This Memo

This memo is here to give info to the Internet community ๐ŸŒธ. It is not a standard of any kind. Anyone can distribute it freely, with no limits.

Copyright (C) The Internet Society (2002). All Rights Reserved. ๐Ÿ’…

Abstract

This doc talks about the basic requirements for replicating data that you can reach through LDAPv3 (the Lightweight Directory Access Protocol, version 3) ๐Ÿ“š. Think of it as a meeting spot for the general replication requirements that let informational directories work together smoothly ๐Ÿซถ.

Table of Contents

1    Introduction...................................................2
2    Terminology....................................................3
3    The Models.....................................................5
4    Requirements...................................................7
4.1  General........................................................7
4.2  Model..........................................................8
4.3  Protocol.......................................................9
4.4  Schema........................................................10
4.5  Single Master.................................................10
4.6  Multi-Master..................................................11
4.7  Administration and Management.................................11
4.8  Security......................................................12
5    Security Considerations.......................................13
6    Acknowledgements..............................................13
7    References....................................................13
A    Appendix A - Usage Scenarios..................................15
A.1  Extranet Example..............................................15
A.2  Consolidation Example.........................................15
A.3  Replication Heterogeneous Deployment Example..................16
A.4  Shared Name Space Example.....................................16
A.5  Supplier Initiated Replication................................16
A.6  Consumer Initiated Replication................................17
A.7  Prioritized attribute replication.............................17
A.8  Bandwidth issues..............................................17
A.9  Interoperable Administration and Management...................18
A.10 Enterprise Directory Replication Mesh.........................18
A.11 Failure of the Master in a Master-Slave Replicated Directory..19
A.12 Failure of a Directory Holding Critical Service Information...19
B    Appendix B - Rationale........................................20
B.1  Meta-Data Implications........................................20
B.2  Order of Transfer for Replicating Data........................20
B.3  Schema Mismatches and Replication.............................21
B.4  Detecting and Repairing Inconsistencies Among Replicas........22
B.5  Some Test Cases for Conflict Resolution in Multi-Master
     Replication...................................................23
B.6  Data Confidentiality and Data Integrity During Replication....27
B.7  Failover in Single-Master Systems.............................27
B.8  Including Operational Attributes in Atomic Operations.........29
     Authors' Addresses............................................30
     Full Copyright Statement......................................31

1. Introduction ๐ŸŒˆ

Okay so, spreading directory info across the network is a total win for two reasons ๐Ÿ’œ: (1) it makes the directory more reliable through fault tolerance, and (2) it puts the directory content closer to the clients who actually use it. LDAP has become so popular as a way to access directory info that people now want to spread LDAP directory content around, both inside enterprises and across the Internet ๐Ÿ”ฅ. Right now, though, LDAP doesn't define a replication mechanism. It only briefly mentions LDAP shadow servers (see [RFC2251]). A standard way to replicate directories across multiple vendors is basically essential if LDAP wants to keep winning in the market ๐Ÿ‘‘.

This doc lays out the requirements for replication between multiple LDAP servers ๐ŸŽ€. RFC 2251 and RFC 2252 [RFC2252] already set the standards for how LDAP clients and servers talk to each other, but server-to-server communication needs extra requirements too. Some of those are covered here ๐Ÿงš.

First, this doc explains the terminology it uses, and then it introduces the different replication models being considered. After that come the requirements, followed by security considerations. The reasoning behind the requirements lives in the Appendices, which keeps the requirements cleanly separate from their justification โœจ.

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119] ๐Ÿซถ.

2. Terminology ๐Ÿ“–

Here are the terms this doc uses, bestie. Learn these and you'll be fluent in replication ๐Ÿ’…:

  • Anonymous Replication - Replication where the endpoints know who each other are, but nobody authenticates anyone. Also called "unauthenticated replication" ๐Ÿ™ˆ.
  • Area of replication - A whole chunk or part of a Directory Information Tree (DIT) that forms one distinct unit of data to replicate. An area of replication is defined by a replication base entry and includes all or some of the depending entries inside it, on a single server. It splits directory data into partitions whose propagation behavior can be configured separately from other partitions. Areas of replication can overlap or be nested. This is a subset of the definition of a "replicated area" in X.525 [X.525] ๐ŸŒธ.
  • Atomic operation - A set of changes to directory data that the LDAP standards guarantee will be treated as one unit: either all the changes get made, or all of them fail ๐Ÿ’–.
  • Atomicity Information - Info about atomic operations that gets passed along as part of replication ๐Ÿงš.
  • Conflict - A situation that happens when the same directory data gets changed on different directory servers before replication can sync them up. When the servers finally sync, their data doesn't match, and that mismatch is the conflict ๐Ÿ’ฅ.
  • Conflict resolution - Deterministic procedures used to settle change information conflicts that might pop up during replication โญ.
  • Critical OID - Attributes or object classes that the replication agreement marks as critical to how the system runs. Changes that touch critical OIDs immediately kick off a replica cycle. A password or certificate is a good example ๐Ÿ”.
  • Fractional replication - The ability to filter a subset of attributes for replication ๐Ÿฆ‹.
  • Incremental Update - An update that only includes the attributes or entries that changed ๐ŸŒˆ.
  • Master Replica - A replica that LDAP operations can update directly. In a Master-Slave Replication system, the Master Replica is the only directly updatable replica in the replica-group ๐Ÿ‘‘.
  • Master-Slave, or Single Master Replication - A replication model that assumes only one server, the master, gets LDAP write access to the replicated data. Master-Slave replication can be seen as a proper subset of multi-master replication ๐ŸŽ€.
  • Meta-Data - Data the replication system collects that describes the status or state of replication ๐Ÿ“Š.
  • Multi-Master Replication - A replication model where entries can be written and updated on any of several master replica copies, without having to talk to the other master replicas before the write or update happens ๐Ÿ”ฅ.
  • One-way Replication - Synchronization in a single direction, where the authoritative source info gets handed over to a replica ๐Ÿš€.
  • Partial Replication - Partial Replication is Fractional Replication, Sparse Replication, or both ๐Ÿ“.
  • Propagation Behavior - How the synchronization process between a consumer and a supplier behaves ๐Ÿ’ซ.
  • Replica - An instance of an area of replication on a server ๐ŸŒธ.
  • Replica-Group - The servers that hold instances of a particular area of replication. A server can belong to several replica-groups ๐Ÿซ‚.
  • Replica (or Replication) Cycle - The interval during which update info gets exchanged between two or more replicas. It starts when someone tries to push data to, or pull data from, another replica or set of replicas, and it ends when the data has been exchanged successfully or an error shows up ๐Ÿ”.
  • Replication - The process of syncing data spread across directory servers and sorting out update conflicts ๐Ÿ’œ.
  • Replication Agreement - A collection of info describing the parameters of replication between two or more servers in a replica-group ๐Ÿ“.
  • Replication Base Entry - The distinguished name of the root vertex of a replicated area ๐ŸŒณ.
  • Replication Initiation Conflict - A situation where two sources want to update the same replica at the same time. It's a whole drama ๐Ÿ˜ญ.
  • Replication Session - A session set up between two servers in a replica-group to pass update info as part of a replica cycle ๐Ÿค.
  • Slave (or Read-Only) Replica - A replica that LDAP requests can't update directly. Changes can only come in through replication from a master replica. Read-only replicas can show up in both single-master and multi-master systems ๐Ÿชž.
  • Sparse Replication - The ability to filter some subset of entries (other than the complete collection) in an area of replication ๐ŸŒ™.
  • Topology - The shape of the directed graph that describes the relationships between replicas ๐Ÿ—บ๏ธ.
  • Two-way Replication - Synchronization where change info flows in both directions between two replicas โ†”๏ธ.
  • Unauthenticated Replication - See Anonymous Replication ๐Ÿ™‹.
  • Update Propagation - The protocol-based process by which directory replicas get reconciled ๐Ÿ’….

3 The Models โœจ

okay so the whole goal here ๐ŸŽฏ is an interoperable LDAPv3 directory synchronization protocol that is simple, efficient, and flexible ๐Ÿ’…. it has to support both multi-master and master-slave replication, and it has to work for the Internet and for enterprise environments ๐ŸŒˆ.

there are five data consistency models ๐Ÿซถ

Model 1: Transactional Consistency -- environments that exhibit all four of the ACID properties (Atomicity, Consistency, Isolation, Durability) [ACID].

Model 2: Eventual (or Transient) Consistency -- environments where definite knowledge of the topology is provided through predetermined replication agreements. examples include X.500 Directories (the X.500 model is single-master only) [X.501, X.525], Bayou [XEROX], and NDS (Novell Directory Services) [NDS]. in this model, every update propagates to every replica that it can reach via a path of stepwise eventual connectivity ๐Ÿฆ‹

Model 3: Limited Effort Eventual (or Probabilistic) Consistency -- environments that provide a statistical probability of convergence with knowledge of topology. an example is the Xerox Clearinghouse [XEROX2]. this model is similar to "Eventual Consistency", except where replicas may purge updates. purging drops propagation changes when some replica time boundary is exceeded, so some changes end up replicated to only a portion of the topology ๐Ÿ™ˆ. transactional consistency is not preserved, though some weaker constraints on consistency are available.

Model 4: Loosest Consistency -- environments where information is provided from an opportunistic or simple cache until stale. complete knowledge of topology may not be shared among all replicas.

Model 5: Ad hoc -- a copy of a data store where no follow up checks are made for the accuracy/freshness of the data ๐Ÿ’€

consistency models 1, 2 and 3 involve the use of prearranged replication agreements among servers. model 1 may simplify support for atomicity in multi-master systems, but the added complexity of the distributed 2-phase commit required for Model 1 is significant. therefore, model 1 will not be considered at this time. models 4 and 5 involve unregistered replicas that "pull" updates from another directory server without that server's knowledge. these models violate a directory's security policies ๐Ÿšจ

models 2 and 3 illustrate two replication scenarios that must be handled: policy configuration through security management parameters (model 2), and hosting relatively static data and address information as in white-pages applications (model 3). so replication requirements are presented for models 2 and 3 โœจ

interoperability among directories using LDAP replication may be limited for implementations that add semantics beyond those specified by the LDAP core documents (RFC 2251-2256, 2829, 2830). also, the "core" specifications include numerous features that are not mandatory-to-implement (e.g., RECOMMENDED or OPTIONAL). there are also numerous elective extensions. so LDAP replication interoperability between independent implementations that support different options may be limited ๐Ÿฅฒ. use of applicability statements to improve interoperability in particular application spaces is RECOMMENDED ๐ŸŽ€

4 Requirements ๐Ÿ’œ

4.1 General

G1. LDAP Replication MUST support models 2 (Eventual Consistency) and 3 (Limited Effort Eventual Consistency) above.

G2. LDAP Replication SHOULD NOT preclude support for model 1 (Transactional Consistency) in the future.

G3. LDAP replication SHOULD have minimal impact on system performance.

G4. The LDAP Replication Standard SHOULD NOT limit the replication transaction rate.

G5. The LDAP replication standard SHOULD NOT limit the size of an area of replication or a replica.

G6. Meta-data collected by the LDAP replication mechanism MUST NOT grow without bound.

G7. All policy and state data pertaining to replication MUST be accessible via LDAP.

G8. LDAP replication MUST be capable of replicating the following:

  • all userApplication attribute types
  • all directoryOperation and distributedOperation attribute types defined in the LDAP "core" specifications (RFCs 2251-2256, 2829-2830)
  • attribute subtypes
  • attribute description options (e.g., ";binary" and Language Tags [RFC2596])

G9. LDAP replication SHOULD support replication of directoryOperation and distributedOperation attribute types defined in standards track LDAP extensions.

G10. LDAP replication MUST NOT support replication of dsaOperation attribute types, as such attributes are DSA-specific ๐Ÿ™…โ€โ™€๏ธ

G11. The LDAP replication system should limit impact on the network by minimizing the number of messages and the amount of traffic sent.

4.2 Model

M1. The model MUST support the following triggers for initiation of a replica cycle:

  • a) A configurable set of scheduled times
  • b) Periodically, with a configurable period between replica cycles
  • c) A configurable maximum amount of time between replica cycles
  • d) A configurable number of accumulated changes
  • e) Change in the value of a critical OID
  • f) As the result of an automatic rescheduling after a replication initiation conflict
  • g) A manual request for immediate replication

with the exception of manual request, the specific trigger(s) and related parameters for a given server MUST be identified in a well-known place defined by the standard, e.g., the Replication Agreement(s).

M2. The replication model MUST support both master-slave and multi-master relationships.

M3. An attribute in an entry MUST eventually converge to the same set of values in every replica holding that entry.

M4. LDAP replication MUST encompass schema definitions, attribute names and values, access control information, knowledge information, and name space information.

M5. LDAP replication MUST NOT require that all copies of the replicated information be complete, but MAY require that at least one copy be complete. the model MUST support Partial Replicas ๐Ÿงฉ

M6. The determination of which OIDs are critical MUST be configurable in the replication agreement.

M7. The parameters of the replication process among the members of the replica-group, including access parameters, necessary authentication credentials, assurances of confidentiality (encryption), and area(s) of replication, MUST be defined in a standard location (e.g., the replication agreements).

M8. The replication agreements SHOULD accommodate multiple servers receiving the same area of replication under a single predefined agreement.

M9. LDAP replication MUST provide scalability to both enterprise and Internet environments, e.g., an LDAP server must be able to provide replication services to replicas within an enterprise as well as across the Internet ๐ŸŒ

M10. While different directory implementations can support different/extended schema, schema mismatches between two replicating servers MUST be handled. one way of handling such mismatches might be to raise an error condition.

M11. There MUST be a facility that can update, or totally refresh, a replica-group from a standard data format, such as LDIF format [RFC2849].

M12. An update received by a consumer more than once MUST NOT produce a different outcome than if the update were received only once ๐Ÿ”

4.3 Protocol

P1. The replication protocol MUST provide for recovery and rescheduling of a replication session due to replication initiation conflicts (e.g., consumer busy replicating with other servers) and or loss of connection (e.g., supplier cannot reach a replica).

P2. LDUP replication SHOULD NOT send an update to a consumer if the consumer has previously acknowledged that update.

P3. The LDAP replication protocol MUST allow for full update to facilitate replica initialization and reset loading, utilizing a standardized format such as LDIF [RFC2849] format.

P4. Incremental replication MUST be allowed.

P5. The replication protocol MUST allow either a master or slave replica to initiate the replication process.

P6. The protocol MUST preserve atomicity of LDAP operations as defined in RFC2251 [RFC2251]. in a multi-master environment this may lead to an unresolvable conflict. MM5 and MM6 discuss how to handle this situation ๐Ÿ˜ฌ

P7. The protocol MUST support a mechanism to report schema mismatches between replicas discovered during a replication session.

4.4 Schema

SC1. A standard way to determine what replicas are held on a server MUST be defined.

SC2. A standard schema for representing replication agreements MUST be defined.

SC3. The semantics associated with modifying the attributes of replication agreements MUST be defined.

SC4. A standard method for determining the location of replication agreements MUST be defined.

SC5. A standard schema for publishing state information about a given replica MUST be defined.

SC6. A standard method for determining the location of replica state information MUST be defined.

SC7. It MUST be possible for appropriately authorized administrators, regardless of their network location, to access replication agreements in the DIT.

SC8. Replication agreements of all servers containing replicated information MUST be accessible via LDAP.

SC9. An entry MUST be uniquely identifiable throughout its lifetime ๐Ÿชช

4.5 Single Master

SM1. A Single Master system SHOULD provide a fast method of promoting a slave replica to become the master replica ๐Ÿ‘‘

SM2. The master replica in a Single Master system SHOULD send all changes to read-only replicas in the order in which the master applied them.

4.6. Multi-Master ๐Ÿฆ‹

okay so multi-master is where it gets spicy ๐ŸŒถ๏ธ because EVERY server can be a boss, and that means we need rules so nobody's fighting over the same entry. here's the vibe:

MM1. The replication protocol SHOULD NOT saturate the network with redundant or unnecessary entry replication. ๐Ÿ™…โ€โ™€๏ธ no spam, bestie.

MM2. The initiator MUST be allowed to determine whether it will become a consumer or supplier during the synchronization startup process. ๐ŸŽ€ you get to pick your role!

MM3. During a replica cycle, it MUST be possible for the two servers to switch between the consumer and supplier roles. ๐Ÿ”„ role swap, iconic.

MM4. When multiple master replicas want to start a replica cycle with the same replica at the same time, the model MUST have an automatic and deterministic mechanism for resolving or avoiding replication initiation conflict. ๐Ÿšฆ when two people try to start a sync at the same time, there has to be a built-in way to sort it out, no drama.

MM5. Multi-master replication MUST NOT lose information during replication. ๐Ÿ˜ญ this one is SERIOUS. If conflict resolution would result in the loss of directory information, the replication process MUST store that information, notify the administrator of the nature of the conflict and the information that was lost, and provide a mechanism for possible override by the administrator. so nothing gets quietly deleted, the admin gets told, and they can override it if they need to.

MM6. Multi-master replication MUST support convergence of the values of attributes and entries. โœจ everyone ends up agreeing eventually. Convergence may result in an event as described in MM5.

MM7. Multi-master conflict resolution MUST NOT depend on the in-order arrival of changes at a replica to assure eventual convergence. ๐ŸŒ€ changes can show up out of order and it still has to work out.

MM8. Multi-master replication MUST support read-only replicas as well as read-write replicas. ๐Ÿ“–๐Ÿ‘€ both kinds of replicas get a seat at the table.

4.7. Administration and Management ๐Ÿงš

the admin side is giving organized. here's what the admins can count on:

AM1. Replication agreements MUST allow the initiation of a replica cycle to be administratively postponed to a more convenient period. โฐ hit snooze when it's not a good time.

AM2. Each copy of a replica MUST maintain audit history information of which servers it has replicated with and which servers have replicated with it. ๐Ÿ“’ receipts for everything, always.

AM3. Access to replication agreements, topologies, and policy attributes MUST be provided through LDAP. ๐Ÿ—๏ธ

AM4. The capability to check the differences between two replicas for the same information SHOULD be provided. ๐Ÿ” spot the difference, but make it official.

AM5. A mechanism to fix differences between replicas without triggering new replica cycles SHOULD be provided. ๐Ÿ› ๏ธ fix it without starting the whole thing over again.

AM6. The sequence of updates to access control information (ACI) and the data controlled by that ACI MUST be maintained by replication. ๐Ÿ” the order of permission changes and the data they guard has to stay in sync.

AM7. It MUST be possible to add a 'blank' replica to a replica-group, and force a full update from (one of) the Master(s), for the purpose of adding a new directory server to the system. ๐Ÿ†• new server joins the squad, and it gets a full copy from one of the Masters.

AM8. Vendors SHOULD provide tools to audit schema compatibility within a potential replica-group. ๐Ÿงฐ vendors, please bring the tools to check that everyone's schema is compatible before they join.

4.8. Security ๐Ÿ”’

this part is SO important, bestie. no cap. ๐Ÿ’€

The terms "data confidentiality" and "data integrity" are defined in the Internet Security Glossary [RFC2828]. ๐Ÿ“š go check the glossary if you want the exact meanings.

S1. The protocol MUST support mutual authentication of the source and the replica directories during initialization of a replication session. ๐Ÿค both sides prove who they are.

S2. The protocol MUST support mutual verification of authorization of the source to send and the replica to receive replicated data during initialization of a replication session. ๐Ÿชช both sides also check that the other is allowed to send or receive.

S3. The protocol MUST also support the initialization of anonymous replication sessions. ๐Ÿ‘ป anonymous sessions have to be possible too.

S4. The replication protocol MUST support transfer of data with data integrity and data confidentiality. ๐Ÿ” the data arrives unchanged and private.

S5. The replication protocol MUST support the ability during initialization of a replication session for an authenticated source and replica to mutually decide to disable data integrity and data confidentiality within the context of and for the duration of that particular replication session. ๐Ÿ™ˆ two authenticated buddies can agree to turn off integrity and confidentiality, but only for that one session.

S6. To promote interoperability, there MUST be a mandatory-to-implement data confidentiality mechanism. ๐Ÿค everyone has to support at least one confidentiality mechanism so they can talk to each other.

S7. The transport for administrative access MUST permit assurance of the integrity and confidentiality of all data transferred. ๐Ÿšš admin traffic has to be protected too.

S8. To support data integrity, there must be a mandatory-to-implement data integrity mechanism. ๐Ÿงพ same deal for integrity: there has to be one mechanism everyone implements.

5. Security Considerations ๐Ÿ’€

this part is dramatic, and it's giving "pay attention" ๐Ÿšจ

This document includes security requirements (listed in section 4.8 above) for the replication model and protocol. As noted in Section 3, interoperability may be impacted when replicating among servers that implement non-standard extensions to basic LDAP semantics. ๐Ÿงฉ if your server adds its own weird LDAP extensions, it can break interop, so don't do that without a reason.

Security-related and general LDAP interoperability will be significantly impacted by the degree of consistency with which implementations support existing and future standards detailing LDAP security models, such as a future standard LDAP access control model. ๐Ÿ”— the more consistently everyone follows the standards, the safer and more compatible everything is.

6. Acknowledgements ๐Ÿซถ

This document is based on input from IETF members interested in LDUP Replication. ๐Ÿ’œ thank you to everyone who helped out!

7. References ๐Ÿ“š

[ACID] T. Haerder, A. Reuter, "Principles of Transaction-Oriented Database Recovery", Computing Surveys, Vol. 15, No. 4 (December 1983), pp. 287-317.

[NDS] Novell, "NDS Technical Overview", 104-000223-001, http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h6tvg4z7.html, September, 2000.

[RFC2119] Bradner, S., "Key Words for Use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC2251] Wahl, M., Howes, T. and S. Kille, "Lightweight Directory Access Protocol", RFC 2251, December 1997.

[RFC2252] Wahl, M., Coulbeck, A., Howes, T. and S. Kille, "Lightweight Directory Access Protocol (v3): Attribute Syntax Definitions", RFC 2252, December 1997.

[RFC2253] Kille, S., Wahl, M. and T. Howes, "Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names", RFC 2253, December 1997.

[RFC2254] Howes, T., "The String Representation of LDAP Search Filters", RFC 2254, December 1997.

[RFC2255] Howes, T. and M. Smith, "The LDAP URL Format", RFC 2255, December 1997.

[RFC2256] Wahl, M., "A Summary of the X.500(96) User Schema for use with LDAPv3", RFC 2256, December 1997.

[RFC2596] Wahl, M. and T. Howes, "Use of Language Codes in LDAP", RFC 2596, May 1999.

[RFC2828] Shirey, R. "Internet Security Glossary", FYI 36, RFC 2828, May 2000.

[RFC2829] Wahl, M., Alvestrand, H., Hodges, J. and R. Morgan, "Authentication Methods for LDAP", RFC 2829, May 2000.

[RFC2830] Hodges, J., Morgan, R. and M. Wahl, "Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security", RFC 2830, May 2000.

[RFC2849] Good, G., "The LDAP Data Interchange Format (LDIF)", RFC 2849, June 2000.

[X.501] ITU-T Recommendation X.501 (1993), | ISO/IEC 9594-2: 1993, Information Technology - Open Systems Interconnection - The Directory: Models.

[X.525] ITU-T Recommendation X.525 (1997), | ISO/IEC 9594-9: 1997, Information Technology - Open Systems Interconnection - The Directory: Replication.

[XEROX] C. Hauser, "Managing update conflicts in Bayou, a weakly connected replicated storage system". Palo Alto, CA: Xerox PARC, Computer Science Laboratory; 1995 August; CSL-95-4.

[XEROX2] Alan D. Demers, Mark Gealy, Daniel Greene, Carl Hauser, Wesley Irish, John Larson, Sue Manning, Scott Shenker, Howard Sturgis, Daniel Swinehart, Douglas Terry, Don Woods, "Epidemic Algorithms for Replicated Database Maintenance". Palo Alto, CA, Xerox PARC, January 1989.

A. APPENDIX A - Usage Scenarios ๐ŸŒˆ

The following directory deployment examples are intended to validate our replication requirements. A heterogeneous set of directory implementations is assumed for all the cases below. This material is intended as background; no requirements are presented in this Appendix. ๐Ÿง  this part is just story time to show the requirements in action.

A.1. Extranet Example ๐Ÿค

A company has a trading partner with whom it wishes to share directory information. This information may be as simple as a corporate telephone directory, or as complex as an extranet workflow application. For performance reasons, the company wishes to place a replica of its directory within the Partner Company, rather than exposing its directory beyond its firewall. ๐Ÿงฑ

The requirements that follow from this scenario are:

  • One-way replication, single mastered.
  • Authentication of clients.
  • Common access control and access control identification.
  • Secure transmission of updates.
  • Selective attribute replication (Fractional Replication), so that only partial entries can be replicated.

A.2. Consolidation Example ๐Ÿข

Company A acquires company B. Each company has an existing directory.

During the transition period, as the organizations are merged, both directory services must coexist. Company A may wish to attach company B's directory to its own. ๐Ÿซ‚

The requirements that follow from this scenario are:

  • Multi-Master replication.
  • Common access control model. Access control model identification.
  • Secure transmission of updates.
  • Replication between DITs with potentially differing schema.

A.3. Replication Heterogeneous Deployment Example ๐ŸŽจ

An organization may choose to deploy directory implementations from multiple vendors, to enjoy the distinguishing benefits of each. ๐Ÿ›๏ธ

In this case, multi-master replication is required to ensure that the multiple replicas of the DIT are synchronized. Some vendors may provide directory clients, which are tied to their own directory service.

The requirements that follow from this scenario are:

  • Multi-Master replication
  • Common access control model and access control model identification.
  • Secure transmission of updates.
  • Replication among DITs with potentially differing schemas.

A.4. Shared Name Space Example ๐Ÿคœ๐Ÿค›

Two organizations may choose to cooperate on some venture and need a shared name space to manage their operation. Both organizations will require administrative rights over the shared name space. ๐ŸŒธ

The requirements that follow from this scenario are:

  • Multi-Master replication.
  • Common access control model and access control model identification.
  • Secure transmission of updates.

A.5. Supplier Initiated Replication ๐Ÿ“ค

This is a single master environment that maintains a number of replicas of the DIT by pushing changes based on a defined schedule. ๐Ÿ—“๏ธ

The requirements that follow from this scenario are:

  • Single-master environment.
  • Supplier-initiated replication.
  • Secure transmission of updates.

A.6. Consumer Initiated Replication ๐Ÿ’ป

Again a single mastered replication topology, but the slave replica initiates the replication exchange rather than the master. An example of this is a replica that resides on a laptop computer that may run disconnected for a period of time. ๐Ÿ”Œ

The requirements that follow from this scenario are:

  • Single-master environment.
  • Consumer initiated replication.
  • Open scheduling (anytime).

A.7. Prioritized attribute replication โœจ

Okay, the password attribute is the perfect example for why we need prioritized attribute replication ๐Ÿ”. A user is working in Utah, and the administrator is in California. The user forgets his password, so he calls or emails the admin to ask for a new one ๐Ÿ˜ญ. The admin sends the updated password, which counts as a change.

Normally the directory replicates to a bunch of different locations overnight ๐ŸŒ™. But corporate security policy says passwords are critical, so the new value has to be available immediately (e.g., shortly) after any change. Replication needs to happen right away for critical attributes/entries. No waiting until morning, bestie ๐Ÿ’….

The requirements that follow from this scenario are:

  • Incremental replication of changes.
  • Immediate replication on change of certain attributes.
  • Replicate based on time/attribute semantics.

A.8. Bandwidth issues ๐Ÿ“ก

Server (A) holds R/W replica (a) in Kathmandu, and it's connected to Paris by a dial-up phone link ๐Ÿ“ž. Server (B) in Paris has its own R/W replica of (a). Server (C) also has an R/W replica of (a), and it's hooked up to server (B) by a T1 connection. Every connection has its own performance characteristics, so it's giving "different speeds, different vibes" ๐Ÿขโšก.

The requirements that follow from this scenario are:

  • Minimize repetitive updates when replicating from multiple replication paths.
  • Incremental replication of changes.
  • Provide replication cycles to delay and/or retry when connections cannot be reached.
  • Allowances for consumer initiated or supplier initiated replication.

A.9. Interoperable Administration and Management ๐Ÿ› ๏ธ

The admin with administrative authority over the corporate directory is the main character here ๐Ÿ‘‘. The directory is replicated across numerous geographically dispersed LDAP servers from different vendors. He notices that replication isn't finishing correctly, because the change log keeps growing and/or error messages keep popping up ๐Ÿšจ.

He uses his $19.95 RepCo LDAP directory replication diagnostic tools to check Root DSE replica knowledge on server 17. That's when he finds out server 42, made by LDAP'RUS Inc., isn't replicating properly because of an object conflict. So he connects to server 42 with his Repco Remote repair tools and resolves the conflict right on the remote server ๐Ÿซถ.

The requirements that follow from this scenario are:

  • Provide replication audit history.
  • Provide mechanisms for managing conflict resolution.
  • Provide LDAP access to predetermined agreements, topology and policy attributes.
  • Provide operations for comparing replica's content for validity.
  • Provide LDAP access to status and audit information.

A.10. Enterprise Directory Replication Mesh ๐Ÿ•ธ๏ธ

A Corporation builds a mesh of directory servers across the enterprise, using LDAP servers from various vendors. Five servers hold the same area of replication. The predetermined replication agreement(s) for this enterprise mesh are under a single management, and the security domain lets one predetermined replication agreement manage replication for all 5 servers. Very organized, very iconic ๐Ÿ’œ.

The requirements that follow from this scenario are:

  • One predefined replication agreement that manages a single area of replication that is held on numerous servers.
  • Common support of replication management knowledge across vendor implementation.
  • Rescheduling and continuation of a replication cycle when one server in a replica-group is busy and/or unavailable.

A.11. Failure of the Master in a Master-Slave Replicated Directory ๐Ÿ“ฌ

A company has a corporate directory that the corporate email system depends on. The directory lives on a mesh of servers from several vendors. Then a corporate relocation means the location holding the master copy of the directory is closing ๐Ÿ˜ฌ. Employee information (such as mailbox locations and employee certificate information) has to stay up to date, or mail can't be delivered. Not ideal, not ideal ๐Ÿ’€.

The requirements that follow from this scenario are:

  • An existing slave replica must be "promote-able" to become the new master.
  • The "promotion" must be done without significant downtime, since updates to the directory will continue.

A.12. Failure of a Directory Holding Critical Service Information ๐ŸŒ

An ISP runs a policy management system that uses a directory as its policy data repository. The directory is replicated across several sites on different vendors' products, so there aren't any single points of failure ๐Ÿ™Œ. It's imperative that the directory stays available and updateable even when one site is disconnected from the network. Changes to the data must be traceable, and it must be possible to work out how changes made at different sites interacted ๐Ÿ”.

The requirements that follow from this scenario are:

  • Multi-master replication.
  • Ability to reschedule replication sessions.
  • Support for manual review and override of replication conflict resolution.

B. APPENDIX B - Rationale ๐Ÿง 

This Appendix gives some of the background behind the requirements. It's here to help protocol designers understand the thinking behind some of the requirements, and to point out some issues that should be considered during design ๐Ÿ’ก. Except for section B.8, which contains a suggested requirement for the update to RFC 2251, this Appendix doesn't state any formal requirements ๐ŸŽ€.


B.1. Meta-Data Implications ๐Ÿ—‚๏ธ

Requirement G4 states that meta-data must not grow without bound. That means meta-data must, at some point, be purged from the system. This raises stability concerns, though ๐Ÿ˜ฐ. Purging meta-data before all replicas have been updated may lead to incomplete replication of change information and inconsistencies among replicas. So care must be taken when setting up the rules for purging meta-data, while still making sure meta-data won't grow forever. It's a balancing act, babe โš–๏ธ.


B.2. Order of Transfer for Replicating Data ๐Ÿšš

Sometimes it would be helpful to replicate data out-of-order (e.g., send data to consumer replicas in a different order than it was processed at the supplier replica) ๐Ÿ”€. One case might be a big bulk load on the master server in a single-master environment, followed by one change to a critical OID (a password change, for example). Instead of waiting for all the bulk data to reach the replicas, the password change might jump to the head of the queue and get sent before the bulk data finishes transferring ๐Ÿƒโ€โ™€๏ธ. Other cases worth considering are schema changes or changes to critical policy data stored in the directory.

Out-of-order transfer has practical benefits, but there are downsides too. Once out-of-order transfers are permitted, all receiving replicas must be prepared to deal with data and schema conflicts that might come up ๐Ÿ˜ฌ.

For example, say schema changes are critical and must move to the front of the replication queue. Now imagine a schema change deletes an attribute for some object class. Some of the operations queued ahead of that schema change might be operations to delete values of the soon-to-be-deleted attribute, so the schema change can go through with no problems. If the schema change jumps to the head of the queue, the consumer servers might have to delete an attribute that still has values, and then receive requests to delete values of an attribute that is no longer defined ๐Ÿ’€.

In the multi-master case, similar situations can come up when simultaneous changes are made to different replicas. So multi-master systems must have conflict resolution algorithms in place to handle such situations ๐Ÿค. In the single-master case, conflict resolution isn't needed unless the master is allowed to send data out-of-order. That's the reasoning behind requirement SM2, which recommends that data always be sent in order in single-master replication ๐Ÿ“‹.

Even with this restriction, the concept of a critical OID is still useful in single-master replication. You can see an example of its usefulness in section A.7 โœจ.


B.3. Schema Mismatches and Replication ๐Ÿงฉ

Multi-vendor environments are the main area of interest for LDAP replication standards ๐ŸŒ. That means we have to pay attention to schema mismatches, since they can easily happen when vendors ship slightly different base schemas with their directory products. Even when both products meet the requirements of the standards [RFC2252], vendors may have added extra attributes or object classes. When two different vendors' products try to replicate, those additions can cause schema mismatches. Another possible cause of schema mismatches is discussed in section A.3 ๐Ÿค“.

There are only a few possible responses when a mismatch is discovered:

  • Raise an error condition and ignore the data. This should always be allowed and is the basis for requirement P8 and the comment on M10.
  • Map/convert the data to the form required by the consuming replica. A system may choose this course; requirement M10 is intended to allow this option. The extent of the conversion is up to the implementation; in the extreme it could support use of the replication protocol in meta-directories.
  • Quietly ignore (do not store on the consumer replica and do not raise an error condition) any data that does not conform to the schema at the consumer.

Requirement M10 is intended to exclude the last option ๐Ÿšซ.

Requirement AM8 suggests that vendors should provide tools to help discover schema mismatches when replication is being set up. But schema will change after the initial setup, so the replication system must be ready to handle unexpected mismatches ๐Ÿ”ง.

Normal IETF practice in protocol implementation suggests being strict in what you send and flexible in what you receive ๐Ÿ’–. In this case, that means a supplier should be prepared to receive an error notification for any schema mismatch, but a consumer may choose to do a conversion instead.

Another option is fractional replication. If replication is set up so only the common attributes are replicated, mismatches can be avoided ๐Ÿ“.

One more thing to think about is replication of the schema itself. M4 requires that it be possible to replicate schema. If a consumer replica is doing conversion, extreme care should be taken if schema elements are replicated, since some attributes are intended to have different definitions on different replicas ๐Ÿ˜ตโ€๐Ÿ’ซ.

For fractional replication, protocol designers and implementors should give careful consideration to how they handle schema replication. Some options for schema replication include:

  • All schema elements are replicated.
  • Schema elements are replicated only if they are used by attributes that are being replicated.
  • Schema are manually configured on the servers involved in fractional replication; schema elements are not replicated via the protocol.

B.4. Detecting and Repairing Inconsistencies Among Replicas โœจ

Okay so, even with the best efforts of designers, implementors, and operators, inconsistencies will sometimes pop up among replicas in production directories ๐Ÿ˜ญ Tools will be needed to detect them and to correct them.

A special client can do the detecting by running periodic comparisons of replicas ๐Ÿ” It would typically read two replicas of the same replication base entry and compare the answers. It could do this by BINDing to each of the two replicas it wants to compare and reading them both. In cases where the directory automatically reroutes some requests (for example, chaining), mechanisms to force access to a particular replica should be supplied.

Another option is for the server to support a special request for this situation ๐Ÿ’… A client would invoke an operation at some server. That server would extract the contents from some other server it has a replication agreement with, and report the differences back to the client as the result.

If an inconsistency is found, it needs to be repaired ๐Ÿ› ๏ธ To figure out the right repair, the administrator will need access to the replication history. That way they can work out how the inconsistency happened and what the correct repair should be.

When a repair is made, it should be restricted to the replica that needs fixing, and the repair should not cause new replication events to be started. This may need special tools that change the local data store without triggering replication, which is a total main character move ๐Ÿฆ‹

Requirements AM2, AM4, and AM5 address these needs.

B.5. Some Test Cases for Conflict Resolution in Multi-Master Replication ๐ŸŽ€

Okay, bestie, using multi-master replication inevitably means incompatible changes might get made at the same time on different servers. When that happens, conflict resolution algorithms must be applied.

The guiding principle here is that conflict resolution should avoid surprising the user ๐Ÿซถ One way to do that is to go with the idea that, as much as possible, conflict resolution should mimic what would have happened if there were a single server handling all the requests.

That's a super useful guideline, but there are some situations where it's just impossible to pull off ๐Ÿ’€ We'll look at some of those cases in this section. In particular, there are cases where data will be "lost" in multi-master replication that would NOT be lost in a single-server setup. Lowkey heartbreaking, honestly.

In the examples below, assume there are three replicas, A, B, and C, and all three are updateable. Changes are made to replicas A and B before replication lets either replica see the change made on the other. In the multi-master cases, we assume that the change to A takes precedence, using whatever rules are in force for conflict resolution ๐Ÿ‘‘

B.5.1. Create-Create ๐ŸŒธ

A user creates a new entry with distinguished name DN on A. At the same time, a different user adds an entry with the same distinguished name on B.

In the single-server case, one of the create operations would have happened before the other, and the second request would have failed.

In the multi-master case, each create was successful on its originating server. The problem doesn't get detected until replication takes place. When a replication request to create a DN that already exists arrives at one of the servers, conflict resolution gets invoked. (Note that the two requests can still be told apart even though they have the same DN, because every entry has some sort of unique identifier per requirement SC9. โœจ)

As noted above, in these discussions we assume the change from replica A has priority based on the conflict resolution algorithm. No matter which change arrives first, requirement MM6 says the values from replica A must be the ones in place on all replicas at the end of the replication cycle. Requirement MM5 states that the system cannot quietly ignore the values from replica B. ๐Ÿ™…โ€โ™€๏ธ

The values from replica B might be logged with some notice to the administrators, or they might be added to the DIT with a machine generated DN (again, with notice to the administrators). If they're stored under a machine generated DN, that same DN must be used on all servers in the replica-group, otherwise requirement M3 would be violated. Also, if the entry in question is a container, storing it under a machine generated DN gives a place where descendent entries can be kept if any descendants were generated before the replication cycle finished. Very thoughtful, ngl ๐Ÿงš

Either way, some mechanism must be provided so the administrator can reverse the conflict resolution algorithm and force the values originally created on B into place on all replicas if they want to ๐Ÿ’–

B.5.2. Rename-Rename ๐Ÿฆ‹

On replica A, an entry with distinguished name DN1 is renamed to DN. At the same time, on replica B, an entry with distinguished name DN2 is renamed to DN.

In the single-server case, one rename operation would happen before the other, and the second would fail since the target name already exists.

In the multi-master case, each rename was successful on its originating server. Assuming the change on A has priority in the conflict resolution sense, DN will be left with the values from DN1 in all replicas, and DN1 will no longer exist in any replica. The question is what happens to DN2 and its original values ๐Ÿค”

Requirement MM5 says these values must be stored somewhere. They might be logged, they might be left in the DIT as the values of DN2, or they might be left in the DIT as the values of some machine generated DN. Leaving them as the values of DN2 is attractive because it matches the single-server case, but if a new DN2 has already been created before the replica cycle finishes, there are some very complex cases to sort out ๐Ÿ˜ญ Any of the solutions in this paragraph would be consistent with requirement MM5.

B.5.3. Locking Based on Atomicity of ModifyRequest ๐Ÿ”

There's an entry with distinguished name DN that contains attributes X, Y, and Z. The value of X is 1. On replica A, a ModifyRequest is processed that includes modifications to change the value of X from 1 to 0 and to set the value of Y to "USER1". At the same time, replica B processes a ModifyRequest that includes modifications to change the value of X from 1 to 0, set the value of Y to "USER2", and set the value of Z to 42. The application here is using X as a lock and is depending on the atomic nature of ModifyRequests to provide mutual exclusion for lock access.

In the single-server case, the two operations would have happened sequentially. Since a ModifyRequest is atomic, the entire first operation succeeds. The second ModifyRequest fails, since the value of X would be 0 when it was attempted, so the modification changing X from 1 to 0 fails. The atomicity rule means all the other modifications in that ModifyRequest fail as well.

In the multi-master case, it's inevitable that at least some of the changes will be reversed despite the lock. Assuming the changes from A have priority under the conflict resolution algorithm, the value of X should be 0 and the value of Y should be "USER1". The interesting question is the value of Z at the end of the replication cycle. If it's 42, the atomicity constraint on the change from B has been violated. But for it to revert to its previous value, grouping information would have to be retained, and it isn't clear when that information can be safely thrown away. So, requirement G6 may be violated ๐Ÿ˜ฌ

B.5.4. General Principles ๐Ÿ’œ

With multi-master replication, there are a number of cases where a user or application completes a sequence of operations with a server, but those actions are later "undone" because someone else completed a conflicting set of operations at another server.

To some extent, this can happen in any multi-user system. If a user changes the value of an attribute and later reads it back, intervening operations by another user may have changed the value. In the multi-master case, the problem gets worse, since the techniques used to fix it in the single-server case don't work, as shown in the examples above.

The major question here is one of intended use. In LDAP standards work, it has long been said that replication provides "loose consistency" among replicas. At several IETF meetings and on the mailing list, usage examples from finance where locking is required have been declared poor uses for LDAP. Requirement G1 is consistent with that history. But if loose consistency is the goal, the locking example above is an inappropriate use of LDAP, at least in a replicated environment ๐Ÿ™ˆ

B.5.5. Avoiding the Problem ๐Ÿ“

The examples above cover some of the trickiest problems that can come up in multi-master replication. They can be dealt with, but dealing with them is hard and can lead to situations that are pretty confusing for applications and users.

The common characteristics of the examples are:

  • Several directory users/applications are changing the same data.
  • They are changing the data before previous changes have replicated.
  • They are using different directory servers to make these changes.
  • They are changing data that are parts of a distinguished name, or they are using ModifyRequest to both read and write a given attribute value in a single atomic request.

If any one of these conditions is reversed, the types of problems described above won't occur. There are plenty of useful multi-master directory applications where at least one of the above conditions doesn't happen. For cases where all four do happen, application designers should be aware of the possible consequences โญ

B.6. Data Confidentiality and Data Integrity During Replication ๐Ÿ”

okay so directories hold SO much proprietary stuff ๐Ÿ˜ญ policy info, name and address details, customer lists, all of it. that data absolutely has to be protected against being intercepted or modified during replication ๐Ÿซถ

BUT ngl not every setup needs that. sometimes the network is already private and gives enough confidentiality and integrity for the app ๐Ÿ  and sometimes the directory data is public anyway so there's nothing to guard ๐ŸŒธ that's why confidentiality and integrity were not made requirements for ALL replication sessions. however, a whole bunch of apps DO need them for replication, so there's a requirement (S4) that the protocol allows for data confidentiality and integrity in the cases where they're needed ๐Ÿ”ฅ typically the policy on whether to use these measures lives in the replication agreement, per requirement M7 ๐Ÿ’…

now the big question: which mechanism do we actually use? ๐Ÿค” that's ultimately a design and implementation decision, but here's the tea ๐Ÿต replicating across different vendors' directory products is a huge goal of the LDAP replication work at the IETF. if every vendor picks a different confidentiality and integrity mechanism, the whole point of a standard replication protocol goes out the window ๐Ÿ’€ so there's a requirement (S6) for mandatory-to-implement data confidentiality and integrity mechanisms ๐Ÿ‘‘

and anonymous replication (requirement S3) is still supported ๐Ÿฆ‹ because it can be useful in the same kinds of situations where you don't need integrity or confidentiality protection at all โœจ

B.7. Failover in Single-Master Systems ๐Ÿงš

okay in a single-master system, ALL modifications have to start at the master ๐Ÿ˜ฌ which means the master is a single point of failure for modifications. if high availability matters for your directory, that's a whole vibe-check moment ๐Ÿ’€

one way to soften that is a failover process that turns a slave replica into the master when the original master fails ๐Ÿ”„ but then the time that failover takes becomes a huge deal for how available the whole system is โฐ

here are the things designers and implementors should be thinking about when they do failover ๐Ÿ“

  • if the master holds control information or meta-data that the slave replicas don't have, that info has to get inserted into the slave being "promoted" to master during failover ๐ŸŽ€ and since the old master is probably unavailable by then, getting that data can be a struggle ๐Ÿ˜ญ for example, if the master knows the status of every replica but each slave only knows its own status, the new master would need to collect everyone's status, probably from those replicas themselves ๐Ÿซ  similar problems can pop up for replication agreements if the master is the only one with the full set ๐Ÿ™ˆ
  • if data privacy mechanisms (like encryption) are being used during replication, the new master needs the right key information to talk to all of the slave replicas ๐Ÿ”‘
  • it's not just the new master that needs reconfiguring ๐Ÿ’… the slaves need their configs updated too, so they know where updates should come from and where they should send modifications ๐Ÿ“ฌ
  • the failover mechanism should be able to handle the situation where the old master is "broken" but not "dead" ๐ŸงŸ the slave replicas should ignore updates from the old master once failover has been initiated ๐Ÿšซ
  • the old master will eventually get fixed and rejoin the replica-group ๐Ÿ› ๏ธ it might come back as a slave and pick up the changes it "missed" from the new master, or there might be a mechanism to sync it with the new master and then let it take over as master again ๐Ÿ‘‘ either way, some resynchronization mechanism will be needed ๐Ÿ”
  • availability gets maxed out if the whole failover process can be automated ๐Ÿค– for example, an external system could start failover when it determines the original master isn't functioning properly โœจ

B.8. Including Operational Attributes in Atomic Operations ๐Ÿ’œ

okay so LDAPv3 [RFC2251] says some operations are atomic ๐Ÿงฑ like all of the modifications in a single ModifyRequest. it also defines operational attributes that track when changes happen to the directory (createTimestamp, etc.) and which ID was responsible for a change (modifiersName, etc.) ๐Ÿ“… but here's the gap ๐Ÿ‘€ there's no statement in RFC2251 requiring that changes to those operational attributes be atomic with the changes to the actual data.

so it is RECOMMENDED that this requirement gets added during the revision of RFC2251 ๐ŸŒˆ in the meantime, replication SHOULD treat these operations as though that requirement were already in place ๐Ÿซถ


Authors' Addresses ๐Ÿ“ฎ

Russel F. Weiser Digital Signature Trust Co. 1095 East 2100 South Suite #201 Salt Lake City, UT 84106

Phone: +1 801 326 5421 Fax: +1 801 326 5421 EMail: rweiser@trustdst.com

Ellen J. Stokes IBM 11400 Burnet Rd. Austin, TX 78758

Phone: +1 512 436 9098 Fax: +1 512 436 1193 EMail: stokese@us.ibm.com

Ryan D. Moats Lemur Networks 15621 Drexel Circle Omaha, NE 68135

Phone: +1 402 894 9456 EMail: rmoats@lemurnetworks.net

Richard V. Huber Room C3-3B30 AT&T Laboratories 200 Laurel Avenue South Middletown, NJ 07748

Phone: +1 732 420 2632 Fax: +1 732 368 1690 EMail: rvh@att.com

Copyright (C) The Internet Society (2002). All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement ๐ŸŽ€

Funding for the RFC Editor function is currently provided by the Internet Society.

๐Ÿ“ฆ where this page comes from