1 2 3 4 5 6 7 Independent Submission K. Zeilenga 8 Request for Comments: 5805 Isode Limited 9 Category: Experimental March 2010 10 ISSN: 2070-1721 11 12 13 Lightweight Directory Access Protocol (LDAP) Transactions 14 15 Abstract 16 17 Lightweight Directory Access Protocol (LDAP) update operations, such 18 as Add, Delete, and Modify operations, have atomic, consistency, 19 isolation, durability (ACID) properties. Each of these update 20 operations act upon an entry. It is often desirable to update two or 21 more entries in a single unit of interaction, a transaction. 22 Transactions are necessary to support a number of applications 23 including resource provisioning. This document extends LDAP to 24 support transactions. 25 26 Status of This Memo 27 28 This document is not an Internet Standards Track specification; it is 29 published for examination, experimental implementation, and 30 evaluation. 31 32 This document defines an Experimental Protocol for the Internet 33 community. This is a contribution to the RFC Series, independently 34 of any other RFC stream. The RFC Editor has chosen to publish this 35 document at its discretion and makes no statement about its value for 36 implementation or deployment. Documents approved for publication by 37 the RFC Editor are not a candidate for any level of Internet 38 Standard; see Section 2 of RFC 5741. 39 40 Information about the current status of this document, any errata, 41 and how to provide feedback on it may be obtained at 42 http://www.rfc-editor.org/info/rfc5805. 43 44 Copyright Notice 45 46 Copyright (c) 2010 IETF Trust and the persons identified as the 47 document authors. All rights reserved. 48 49 This document is subject to BCP 78 and the IETF Trust's Legal 50 Provisions Relating to IETF Documents 51 (http://trustee.ietf.org/license-info) in effect on the date of 52 publication of this document. Please review these documents 53 carefully, as they describe your rights and restrictions with respect 54 to this document. 55 56 57 58 Zeilenga Experimental [Page 1] 59 61 RFC 5805 LDAP Transactions March 2010 62 63 64 1. Overview 65 66 This document extends the Lightweight Directory Access Protocol 67 (LDAP) [RFC4510] to allow clients to relate a number of update 68 operations [RFC4511] and have them performed as one unit of 69 interaction, a transaction. As with distinct update operations, each 70 transaction has atomic, consistency, isolation, and durability (ACID) 71 properties [ACID]. 72 73 This extension consists of two extended operations, one control, and 74 one unsolicited notification message. The Start Transaction 75 operation is used to obtain a transaction identifier. This 76 identifier is then attached to multiple update operations to indicate 77 that they belong to the transaction using the Transaction 78 Specification control. The End Transaction is used to settle (commit 79 or abort) the transaction. The Aborted Transaction Notice is 80 provided by the server to notify the client that the server is no 81 longer willing or able to process an outstanding transaction. 82 83 1.1. Conventions and Terminology 84 85 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 86 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 87 document are to be interpreted as described in RFC 2119 [RFC2119]. 88 89 Protocol elements are described using ASN.1 [X.680] with implicit 90 tags. The term "BER-encoded" means the element is to be encoded 91 using the Basic Encoding Rules [X.690] under the restrictions 92 detailed in Section 5.1 of [RFC4511]. 93 94 DSA stands for "Directory System Agent" (a server). DSE stands for 95 "DSA-specific entry". 96 97 2. Elements of an LDAP Transaction 98 99 2.1. Start Transaction Request and Response 100 101 A Start Transaction Request is an LDAPMessage of CHOICE extendedReq 102 where the requestName is 1.3.6.1.1.21.1 and the requestValue is 103 absent. 104 105 A Start Transaction Response is an LDAPMessage of CHOICE extendedRes 106 sent in response to a Start Transaction Request. Its responseName is 107 absent. When the resultCode is success (0), responseValue is present 108 and contains a transaction identifier. Otherwise, the responseValue 109 is absent. 110 111 112 113 114 115 Zeilenga Experimental [Page 2] 116 118 RFC 5805 LDAP Transactions March 2010 119 120 121 2.2. Transaction Specification Control 122 123 A Transaction Specification Control is an LDAPControl where the 124 controlType is 1.3.6.1.1.21.2, the criticality is TRUE, and the 125 controlValue is a transaction identifier. The control is appropriate 126 for update requests including Add, Delete, Modify, and ModifyDN 127 (Rename) requests [RFC4511], as well as the Password Modify requests 128 [RFC3062]. 129 130 As discussed in Section 4, the Transaction Specification control can 131 be used in conjunction with request controls appropriate for the 132 update request. 133 134 2.3. End Transactions Request and Response 135 136 An End Transaction Request is an LDAPMessage of CHOICE extendedReq 137 where the requestName is 1.3.6.1.1.21.3 and the requestValue is 138 present and contains a BER-encoded txnEndReq. 139 140 txnEndReq ::= SEQUENCE { 141 commit BOOLEAN DEFAULT TRUE, 142 identifier OCTET STRING } 143 144 A commit value of TRUE indicates a request to commit the transaction 145 identified by the identifier. A commit value of FALSE indicates a 146 request to abort the identified transaction. 147 148 An End Transaction Response is an LDAPMessage sent in response to a 149 End Transaction Request. Its response name is absent. The 150 responseValue when present contains a BER-encoded txnEndRes. 151 152 txnEndRes ::= SEQUENCE { 153 messageID MessageID OPTIONAL, 154 -- msgid associated with non-success resultCode 155 updatesControls SEQUENCE OF updateControls SEQUENCE { 156 messageID MessageID, 157 -- msgid associated with controls 158 controls Controls 159 } OPTIONAL 160 } 161 -- where MessageID and Controls are as specified in RFC 4511 162 163 The txnEndRes.messageID provides the message id of the update request 164 associated with a non-success response. txnEndRes.messageID is 165 absent when resultCode of the End Transaction Response is success 166 (0). 167 168 169 170 171 172 Zeilenga Experimental [Page 3] 173 175 RFC 5805 LDAP Transactions March 2010 176 177 178 The txnEndRes.updatesControls provides a facility for returning 179 response controls that normally (i.e., in the absence of 180 transactions) would be returned in an update response. The 181 updateControls.messageID provides the message id of the update 182 request associated with the response controls provided in 183 updateControls.controls. 184 185 The txnEndRes.updatesControls is absent when there are no update 186 response controls to return. 187 188 If both txnEndRes.messageID and txnEndRes.updatesControl are absent, 189 the responseValue of the End Transaction Response is absent. 190 191 2.4. Aborted Transaction Notice 192 193 The Aborted Transaction Notice is an Unsolicited Notification message 194 where the responseName is 1.3.6.1.1.21.4 and responseValue is present 195 and contains a transaction identifier. 196 197 3. An LDAP Transaction 198 199 3.1. Extension Discovery 200 201 To allow clients to discover support for this extension, servers 202 implementing this specification SHOULD publish 1.3.6.1.1.21.1 and 203 1.3.6.1.1.21.3 as values of the 'supportedExtension' attribute 204 [RFC4512] within the Root DSE, and publish the 1.3.6.1.1.21.2 as a 205 value of the 'supportedControl' attribute [RFC4512] of the Root DSE. 206 207 A server MAY choose to advertise this extension only when the client 208 is authorized to use it. 209 210 3.2. Starting a Transaction 211 212 A client wishing to perform a sequence of directory updates as a 213 transaction issues a Start Transaction Request. A server that is 214 willing and able to support transactions responds to this request 215 with a Start Transaction Response providing a transaction identifier 216 and with a resultCode of success (0). Otherwise, the server responds 217 with a Start Transaction Response with a resultCode other than 218 success indicating the nature of the failure. 219 220 The transaction identifier provided upon successful start of a 221 transaction is used in subsequent protocol messages to identify this 222 transaction. 223 224 225 226 227 228 229 Zeilenga Experimental [Page 4] 230 232 RFC 5805 LDAP Transactions March 2010 233 234 235 3.3. Specification of a Transaction 236 237 The client then can issue one or more update requests, each with a 238 Transaction Specification control containing the transaction 239 identifier indicating the updates are to be processed as part of the 240 transaction. Each of these update requests MUST have a different 241 MessageID value. If the server is unwilling or unable to attempt to 242 process the requested update operation as part of the transaction, 243 the server immediately returns the appropriate response to the 244 request with a resultCode indicating the nature of the failure. 245 Otherwise, the server immediately returns a resultCode of success (0) 246 and the defers further processing of the operation is then deferred 247 until settlement. 248 249 If the server becomes unwilling or unable to continue the 250 specification of a transaction, the server issues an Aborted 251 Transaction Notice with a non-success resultCode indicating the 252 nature of the failure. All operations that were to be processed as 253 part of the transaction are implicitly abandoned. Upon receipt of an 254 Aborted Transaction Notice, the client is to discontinue all use of 255 the transaction identifier as the transaction is null and void. Any 256 future use of identifier by the client will result in a response 257 containing a non-success resultCode. 258 259 3.4. Transaction Settlement 260 261 A client requests settlement of transaction by issuing an End 262 Transaction Request for the transaction indicating whether it desires 263 the transaction to be committed or aborted. 264 265 Upon receipt of a request to abort the transaction, the server is to 266 abort the identified transaction (abandoning all operations that are 267 part of the transaction) and indicate that it has done so by 268 returning an End Transaction Response with a resultCode of success 269 (0). 270 271 Upon receipt of a request to commit the transaction, the server 272 processes all update operations of the transaction as one atomic, 273 durable, isolated, and consistent action with each requested update 274 being processed in turn. Either all of the requested updates are to 275 be successfully applied or none of the requested are to be applied. 276 The server returns an End Transaction Response with a resultCode of 277 success (0) and no responseValue to indicate all the requested 278 updates were applied. Otherwise, the server returns an End 279 Transaction Response with a non-success resultCode indicating the 280 nature of the failure. If the failure is associated with a 281 282 283 284 285 286 Zeilenga Experimental [Page 5] 287 289 RFC 5805 LDAP Transactions March 2010 290 291 292 particular update request, the txnEndRes.messageID in the 293 responseValue is the message id of this update request. If the 294 failure was not associated with any particular update request, no 295 txnEnd.messageID is provided. 296 297 There is no requirement that a server serialize transactions or 298 updates requested outside of a transaction. That is, a server MAY 299 process multiple commit requests (from one or more clients) acting 300 upon different sets of entries concurrently. A server MUST avoid 301 deadlock. 302 303 3.5. Miscellaneous Issues 304 305 Transactions cannot be nested. 306 307 Each LDAP transaction should be initiated, specified, and settled 308 within a stable security context. Between the Start Request and the 309 End Response, the peers SHOULD avoid negotiating new security 310 associations and/or layers. 311 312 Upon receipt of a Bind or Unbind request, the server SHALL abort any 313 and all outstanding transactions without notice and nullify their 314 identifiers. 315 316 4. Interaction with Other Extensions 317 318 The LDAP Transaction extension may be used with many but not all LDAP 319 control extensions designed to extend update (and possibly other) 320 operations. The subsections that follow discuss interaction with a 321 number of control extensions. Interaction with other control 322 extensions may be discussed in other documents, in particular in 323 control extension specifications. 324 325 4.1. Assertion Control 326 327 The Assertion [RFC4528] control is appropriate for use with update 328 requests specified as part of a transaction. The evaluation of the 329 assertion is performed as part of the transaction. 330 331 The Assertion control is inappropriate for use with either the Start 332 or End Transaction Extended operations. 333 334 4.2. ManageDsaIT Control 335 336 The ManageDsaIT [RFC3296] control is appropriate for use with update 337 requests specified as part of a transaction. 338 339 340 341 342 343 Zeilenga Experimental [Page 6] 344 346 RFC 5805 LDAP Transactions March 2010 347 348 349 The ManageDsaIT control is inappropriate for use with either the 350 Start or End Transaction Extended operations. 351 352 4.4. Proxied Authorization Control 353 354 The Proxied Authorization [RFC4370] control is appropriate for use 355 with the Start Transaction Extended operation, but not the End 356 Transaction Extended operation or any update request specified as 357 part of a transaction. 358 359 To request that a transaction be performed under a different 360 authorization, the client provides a Proxied Authorization control 361 with the Transaction Start Request. If the client is not authorized 362 to assume the requested authorization identity, the server is to 363 return the authorizationDenied (123) resultCode in its response. 364 Otherwise, further processing of the request and transaction is 365 performed under the requested authorization identity. 366 367 Any proxied authorization request attached to an update request 368 specified as part of a transaction, or attached to a Transaction End 369 Request, is to be regarded as a protocol error. 370 371 4.5. Read Entry Controls 372 373 The Pre- and Post-Read Entry [RFC4527] request control are 374 appropriate for use with update requests specified as part of a 375 transaction. 376 377 The response control produced in response to a Pre- or Post-Read 378 Entry request control is returned in the txnEndRes.updatesControls 379 field of responseValue of the End Transaction Response. 380 381 The Pre- and Post-Read Entry controls are inappropriate for use in 382 the LDAPMessage.controls field of the Transaction Start and End 383 Request and Response messages. 384 385 5. Distributed Directory Considerations 386 387 The LDAP/X.500 models provide for distributed directory operations, 388 including server-side chaining and client-side chasing of referrals. 389 390 This document does not preclude servers from chaining operations that 391 are part of a transaction. However, if a server does attempt such 392 chaining, it MUST ensure that transaction semantics are provided. 393 394 The mechanism defined by this document does not support client-side 395 chasing. Transaction identifiers are specific to a particular LDAP 396 association (as established via the LDAP Bind operation). 397 398 399 400 Zeilenga Experimental [Page 7] 401 403 RFC 5805 LDAP Transactions March 2010 404 405 406 The LDAP/X.500 models provide for a single-master/multiple-shadow 407 replication architecture. There is no requirement that changes made 408 to the directory based upon processing a transaction be replicated as 409 one atomic action. Hence, clients SHOULD NOT assume tight data 410 consistency nor fast data convergence of shadow copies unless they 411 have prior knowledge that these properties are provided. Note that 412 DontUseCopy control [DONTUSECOPY] may be used in conjunction with the 413 LDAP search request to ask for the return of the authoritative copy 414 of the entry. 415 416 6. Security Considerations 417 418 Transaction mechanisms may be the target of denial-of-service 419 attacks, especially where implementations lock shared resources for 420 the duration of a transaction. 421 422 General security considerations [RFC4510], especially those 423 associated with update operations [RFC4511], apply to this extension. 424 425 7. IANA Considerations 426 427 The Internet Assigned Numbers Authority (IANA) has made the following 428 assignments. 429 430 7.1. Object Identifier 431 432 IANA has assigned an LDAP Object Identifier (21) [RFC4520] to 433 identify the protocol elements specified in this document. 434 435 Subject: Request for LDAP Object Identifier Registration 436 Person & email address to contact for further information: 437 Kurt Zeilenga <Kurt.Zeilenga (a] Isode.COM> 438 Specification: RFC 5805 439 Author/Change Controller: Kurt Zeilenga <Kurt.Zeilenga (a] Isode.COM> 440 Comments: Identifies protocol elements for LDAP Transactions 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 Zeilenga Experimental [Page 8] 458 460 RFC 5805 LDAP Transactions March 2010 461 462 463 7.2. LDAP Protocol Mechanism 464 465 IANA has registered the protocol mechanisms [RFC4520] specified in 466 this document. 467 468 Subject: Request for LDAP Protocol Mechanism Registration 469 Object Identifier: see table 470 Description: see table 471 Person & email address to contact for further information: 472 Kurt Zeilenga <Kurt.Zeilenga (a] Isode.COM> 473 Specification: RFC 5805 474 Author/Change Controller: Kurt Zeilenga <Kurt.Zeilenga (a] Isode.COM> 475 Comments: 476 477 Object Identifier Type Description 478 ------------------- ---- ---------------------------------- 479 1.3.6.1.1.21.1 E Start Transaction Extended Request 480 1.3.6.1.1.21.2 C Transaction Specification Control 481 1.3.6.1.1.21.3 E End Transaction Extended Request 482 1.3.6.1.1.21.4 N Aborted Transaction Notice 483 484 Legend 485 ------------------------ 486 C => supportedControl 487 E => supportedExtension 488 N => Unsolicited Notice 489 490 8. Acknowledgments 491 492 The author gratefully acknowledges the contributions made by Internet 493 Engineering Task Force participants. 494 495 9. References 496 497 9.1. Normative References 498 499 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 500 Requirement Levels", BCP 14, RFC 2119, March 1997. 501 502 [RFC3062] Zeilenga, K., "LDAP Password Modify Extended 503 Operation", RFC 3062, February 2001. 504 505 [RFC3296] Zeilenga, K., "Named Subordinate References in 506 Lightweight Directory Access Protocol (LDAP) 507 Directories", RFC 3296, July 2002. 508 509 510 511 512 513 514 Zeilenga Experimental [Page 9] 515 517 RFC 5805 LDAP Transactions March 2010 518 519 520 [RFC4370] Weltman, R., "Lightweight Directory Access Protocol 521 (LDAP) Proxied Authorization Control", RFC 4370, 522 February 2006. 523 524 [RFC4510] Zeilenga, K., Ed., "Lightweight Directory Access 525 Protocol (LDAP): Technical Specification Road Map", RFC 526 4510, June 2006. 527 528 [RFC4511] Sermersheim, J., Ed., "Lightweight Directory Access 529 Protocol (LDAP): The Protocol", RFC 4511, June 2006. 530 531 [RFC4512] Zeilenga, K., Ed., "Lightweight Directory Access 532 Protocol (LDAP): Directory Information Models", RFC 533 4512, June 2006. 534 535 [RFC4527] Zeilenga, K., "Lightweight Directory Access Protocol 536 (LDAP) Read Entry Controls", RFC 4527, June 2006. 537 538 [RFC4528] Zeilenga, K., "Lightweight Directory Access Protocol 539 (LDAP) Assertion Control", RFC 4528, June 2006. 540 541 [X.680] International Telecommunication Union - 542 Telecommunication Standardization Sector, "Abstract 543 Syntax Notation One (ASN.1) - Specification of Basic 544 Notation", X.680(2002) (also ISO/IEC 8824-1:2002). 545 546 [X.690] International Telecommunication Union - 547 Telecommunication Standardization Sector, 548 "Specification of ASN.1 encoding rules: Basic Encoding 549 Rules (BER), Canonical Encoding Rules (CER), and 550 Distinguished Encoding Rules (DER)", X.690(2002) (also 551 ISO/IEC 8825-1:2002). 552 553 9.2. Informative References 554 555 [RFC4520] Zeilenga, K., "Internet Assigned Numbers Authority 556 (IANA) Considerations for the Lightweight Directory 557 Access Protocol (LDAP)", BCP 64, RFC 4520, June 2006. 558 559 [ACID] "Information technology -- Open Systems Interconnection 560 -- Distributed Transaction Processing -- Part 1: OSI TP 561 Model", Section 4, ISO/IEC 10026-1:1992. 562 563 [DONTUSECOPY] Zeilenga, K., "The LDAP Don't Use Copy Control", Work 564 in Progress, December 2009. 565 566 567 568 569 570 571 Zeilenga Experimental [Page 10] 572 574 RFC 5805 LDAP Transactions March 2010 575 576 577 Author's Address 578 579 Kurt D. Zeilenga 580 Isode Limited 581 582 EMail: Kurt.Zeilenga (a] Isode.COM 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 Zeilenga Experimental [Page 11] 629 631