xref: /netbsd-src/external/bsd/openldap/dist/doc/drafts/draft-zeilenga-ldap-c-api-concurrency-xx.txt (revision d11b170b9000ada93db553723522a63d5deac310)
1INTERNET-DRAFT                                        Kurt D. Zeilenga
2Intended Category: Standards Track                 OpenLDAP Foundation
3Extends: draft-ietf-ldapext-ldap-c-api-03.txt
4Expires: 28 March 2000
5                                                     28 September 1999
6
7                    LDAP C API Concurrency Extensions
8              <draft-zeilenga-ldap-c-api-concurrency-00.txt>
9
101.   Status of this Memo
11
12  This document is an Internet-Draft and is in full conformance with all
13  provisions of Section 10 of RFC2026.
14
15  This draft document will be submitted to the RFC Editor as a Standards
16  Track document. Distribution of this memo is unlimited.  Technical
17  discussion of this document will take place on the IETF LDAP Extension
18  Working Group mailing list <ietf-ldapext@netscape.com>.  Please send
19  editorial comments directly to the author <Kurt@OpenLDAP.org>.
20
21  Internet-Drafts are working documents of the Internet Engineering Task
22  Force (IETF), its areas, and its working groups.  Note that other
23  groups may also distribute working documents as Internet-Drafts.
24
25  Internet-Drafts are draft documents valid for a maximum of six months
26  and may be updated, replaced, or obsoleted by other documents at any
27  time.  It is inappropriate to use Internet-Drafts as reference
28  material or to cite them other than as "work in progress."
29
30  The list of current Internet-Drafts can be accessed at
31  http://www.ietf.org/ietf/1id-abstracts.txt
32
33  The list of Internet-Draft Shadow Directories can be accessed at
34  http://www.ietf.org/shadow.html.
35
36  Copyright 1999, The Internet Society.  All Rights Reserved.
37
38  Please see the Copyright section near the end of this document for
39  more information.
40
412.   Abstract
42
43  This document defines extensions to the LDAP C API to support use in
44  concurrent execution environments.  The document describes and defines
45
46Zeilenga                                                        [Page 1]
47
48INTERNET-DRAFT      LDAP C API Concurrency Extensions  28 September 1999
49
50  requirements for multiple concurrency levels: thread safe, session
51  thread safe, and operation thread safe.
52
53  The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
54  "SHOULD", "SHOULD NOT", "RECOMMENDED",  and "MAY" in this document are
55  to be interpreted as described in RFC 2119 [KEYW].
56
573.   Introduction
58
59  This document extends the LDAP C API [CAPI] specification to support
60  use in concurrent execution environments.  The extensions add powerful
61  concurrent processing capabilities to the simple to use CAPI.  This
62  document provides an overview of different levels of concurrent
63  execution support and offers a number of CAPI "features" to provide
64  capabilities at these levels.
65
66  The remainder of this section describes three levels of concurrent
67  execution: thread safe, session thread safe, operation thread safe
68  APIs.
69
703.1. Thread Safe
71
72  An implementation which allows applications to safely execute in
73  concurrent execution environments where the application provides
74  necessary synchronization to ensure serialization of CAPI usage is
75  considered to be "thread safe."   Applications may execute non-CAPI
76  calls in concurrent execution contexts when using thread safe
77  implementations.
78
793.2. Session Thread Safe
80
81  A "thread safe" implementation which allows CAPI calls associated with
82  different LDAP sessions to proceed asychronously is considered to be
83  "session thread safe."
84
853.3. Operation Thread Safe
86
87  A "session thread safe" implementation which allows CAPI calls
88  associated with different LDAP operations to proceed asychronously is
89  considered to be "operation thread safe".
90
914.   Basic Thread Safe Feature
92
93Zeilenga                                                        [Page 2]
94
95INTERNET-DRAFT      LDAP C API Concurrency Extensions  28 September 1999
96
97  This section details requirements for the thread safe CAPI feature.
98  Implementations fulfilling these requirements are said to support the
99  LDAP_API_FEATURE_THREAD_SAFE feature and SHOULD advertise this support
100  as detailed below.  This feature SHOULD be provided by
101  implementations.
102
103  Implementations of this feature MUST implement the LDAP error handling
104  extension [ERRNO].
105
106  Implementations of this feature MUST allow non-CAPI calls to proceed
107  asynchronously.
108
109  Implementations of this feature MUST NOT use any non-thread safe call
110  or mechanism provided by C environment or operating system.  An
111  example of non-reentrant calls is the UNIX strtok() function.  Example
112  of a non-reentrant mechanism is global (i.e.: non-thread specific)
113  errno.
114
1155.   Session Thread Safe Feature
116
117  This section details requirements for the session thread safe CAPI
118  feature.  Implementations fulfilling these requirements are said to
119  support the LDAP_API_FEATURE_SESSION_THREAD_SAFE feature and SHOULD
120  advertise this support as detailed below.  This feature is
121  RECOMMENDED.
122
1235.1. Prerequisite Features
124
125  Implementations providing this feature MUST provide and advertise both
126  LDAP_API_FEATURE_CONTEXT_SPECIFIC_ERRNO [ERRNO] and
127  LDAP_API_FEATURE_THREAD_SAFE.
128
1295.2. Atomic Session Handles
130
131  Implementations providing this feature SHOULD ensure that operations
132  upon a given session handle are atomic.  Implementations which provide
133  atomic session handles SHOULD advertise the feature
134  LDAP_API_FEATURE_ATOMIC_SESSION_HANDLES.
135
1365.3. Concurrency Requirements
137
138  Implementations providing this feature MUST not restrict CAPI calls
139  acting upon a given LDAP session to a particular execution context.
140  Applications MAY use a session handle on any thread.  Applications
141
142Zeilenga                                                        [Page 3]
143
144INTERNET-DRAFT      LDAP C API Concurrency Extensions  28 September 1999
145
146  MUST NOT assume that operations upon a session are atomic.
147
148  Implementations providing this feature MUST allow CAPI calls acting
149  upon different LDAP sessions to safely proceed asynchronously.
150
151  Implementations providing this feature MUST allow CAPI calls not
152  acting upon an LDAP session to safely proceed asynchronously.
153
1546.   Operation Thread Safe Feature
155
156  This section details requirements for the operation thread safe CAPI
157  feature based upon a duplicate session handles mechanism.
158
159  Implementations fulfilling these requirements are said to support the
160  LDAP_API_FEATURE_DUPLICATE_SESSION_HANDLES feature and SHOULD
161  advertise this support as detailed below.  This feature is OPTIONAL.
162
1636.1. Prerequisite Features
164
165  Implementations of this feature MUST provide and advertise
166  LDAP_API_FEATURE_CONTEXT_SPECIFIC_ERRNO [ERRNO],
167  LDAP_API_FEATURE_THREAD_SAFE, LDAP_API_FEATURE_SESSION_THREAD_SAFE,
168  and LDAP_API_FEATURE_ATOMIC_SESSION_HANDLES.
169
1706.2. Duplicated Session Handles
171
172  Implementations of this feature MUST support duplicated session
173  handles.
174
175  As defined in CAPI, a session handle refers to an LDAP session
176  encompassing connections with one or more servers, associated message
177  results, a set of properties (options), and state information.  This
178  feature provides a mechanism for a handle to be duplicated.  A session
179  handle and its duplicates are considered siblings.  Each sibling
180  session handle refers to the same LDAP session and message results.
181  Some properties and state are specific to a handle and others shared
182  between siblings as detailed below.
183
184  CAPI calls made on a handle are atomic.  Calls made on sibling (or
185  other) handles MAY proceed asynchronously.
186
187  Session handles are duplicated using ldap_dup() and destroyed using
188  ldap_destroy().  Use of duplicated session handles with CAPI calls
189  have the following semantics detailed in the sections below.
190
191Zeilenga                                                        [Page 4]
192
193INTERNET-DRAFT      LDAP C API Concurrency Extensions  28 September 1999
194
1956.2.1.    Creating and Destroying duplicated sessions
196
197  Implementations of this feature are required to provide two new
198  routines:      LDAP *ldap_dup( ld );      int ldap_destroy( ld );
199
200  Parameters are:      ld      The session handle
201
202  The ldap_dup() function returns a duplicate of a session handle.  The
203  returned session handle may be used concurrently with the original
204  session handle as described below. ldap_dup returns NULL if it is not
205  able to duplicate the session handle and sets LDAP_OPT_ERROR_NUMBER
206  and ldap_errno indicating the nature of the failure.
207
208  The ldap_destroy() function destroys the session handle.  If the
209  session handle has no siblings, ldap_destroy behaves exactly like
210  ldap_unbind.  If the session handle has siblings, the resources
211  assocated with the handle are released and the siblings remain valid.
212  ldap_destroy() returns LDAP_SUCCESS or an error number indicating the
213  nature of failure.  Regardless of returned value, the handle SHOULD be
214  considered invalid and MUST not be used in subsequent calls.  Attempts
215  to use a destroyed session handle MUST NOT result in
216  LDAP_INVALID_SESSION error being reported.  Implementations SHOULD
217  report LDAP_PARAM_ERROR in such cases.
218
2196.2.2.    ldap_unbind and siblings
220
221  When ldap_unbind() is called on a session handle with siblings, the
222  siblings become invalid.  The siblings must be destroyed using
223  ldap_destroy().  All attempts to obtain the siblings'
224  LDAP_OPT_ERROR_NUMBER will return LDAP_INVALID_SESSION.  Any use other
225  than ldap_destroy() or reading LDAP_OPT_ERROR_NUMBER will fail with an
226  LDAP_INVALID_SESSION error being reported.
227
2286.2.3.    ldap_result()
229
230  Message queues are shared between siblings.  Results of operations on
231  a duplicated session handles are accessible to all sibling session
232  handles.
233
234  Applications desiring results associated with a specific operation
235  SHOULD provide the appropriate msgid to ldap_result().  Applications
236  SHOULD avoid calling ldap_result() with LDAP_RES_ANY as such may
237  "steal" and return results which an operation on a sibling requires to
238  complete.
239
240Zeilenga                                                        [Page 5]
241
242INTERNET-DRAFT      LDAP C API Concurrency Extensions  28 September 1999
243
2446.2.4.    Session Options
245
246  The following CAPI options access values shared between siblings:
247
248       LDAP_OPT_API_INFO      LDAP_OPT_DESC      LDAP_OPT_REFERRALS
249       LDAP_OPT_PROTOCOL_VERSION      LDAP_OPT_API_FEATURE_INFO
250       LDAP_OPT_HOST_NAME
251
252  The following CAPI options access values specific to a sibling:
253
254       LDAP_OPT_DEREF      LDAP_OPT_SIZELIMIT      LDAP_OPT_TIMELIMIT
255       LDAP_OPT_RESTART      LDAP_OPT_CLIENT_CONTROLS
256       LDAP_OPT_SERVER_CONTROLS      LDAP_OPT_ERROR_NUMBER
257       LDAP_OPT_ERROR_STRING      LDAP_OPT_MATCHED_DN
258
2596.2.4.1.  LDAP_OPT_SESSION_REFCNT
260
261  In addition, implementations MUST provide the READ-ONLY, shared
262  LDAP_OPT_SESSION_REFCNT option.  LDAP_OPT_SESSION_REFCNT returns the
263  reference count associated with the supplied session handle argument.
264  The session handle argument is required. The outvalue argument should
265  be a pointer to an integer.  Example use:
266
267      int refcount(LDAP *ld) {
268
269      #ifdef LDAP_OPT_SESSION_REFCNT
270
271        if(ld != NULL) {
272          int refcnt, rc;
273          rc = ldap_get_option(ld,
274              LDAP_OPT_SESSION_REFCNT, &refcnt);
275
276          if(rc == LDAP_OPT_SUCCESS) {
277            return refcnt;
278          }
279        }
280
281      #endif
282
283        return -1;
284      }
285
2867.   Advertising Features
287
288  This document REQUIRES that supported features with the name in the
289  form LDAP_API_FEATURE_x be advertised to consumers of the CAPI as
290
291Zeilenga                                                        [Page 6]
292
293INTERNET-DRAFT      LDAP C API Concurrency Extensions  28 September 1999
294
295  follows:
296
297       SHOULD provide the macro LDAP_API_FEATURE_x with the value
298       of 1000 + revision number of this draft (i.e.: 1000+0 for
299       this 0 revision of the draft).
300
301       MUST provide the CAPI extension "x" when returning API
302       information upon LDAP_OPT_API_INFO option access, and
303
304       MUST provide feature info for "x" via LDAP_OPT_FEATURE_INFO
305       option mechanism.  The feature version provided MUST      match
306  the value LDAP_API_FEATURE_x macro
307
308  where x is replaced appropriately.
309
310  As implementations may not provide macros for all features,
311  applications SHOULD use LDAP_OPT_API_INFO to determine which features
312  are provided by a given implementation.
313
3148.   Changes to the C API specification
315
3168.1. New Symbols
317
318  This extension introduces the following macros:
319
320       LDAP_API_FEATURE_ATOMIC_SESSION_HANDLES
321       LDAP_API_FEATURE_DUPLICATE_SESSION_HANDLES
322       LDAP_API_FEATURE_SESSION_THREAD_SAFE
323       LDAP_API_FEATURE_THREAD_SAFE
324       LDAP_API_FEATURE_OPERATION_THREAD_SAFE      LDAP_INVALID_SESSION
325       LDAP_OPT_SESSION_REFCNT
326
327  This extension introduces these new functions:
328
329       ldap_destroy()      ldap_dup()
330
331  This extension introduces no new typedefs nor structure names.
332
3338.2. Duplicated Session Handles
334
335  This extension introduces duplicated session handles and requirements
336  for handling duplicated session handles.  Semantics of non-duplicated
337  session handles are not affected by this introduction.  However, the
338  semantics of calls upon duplicate session handles differs as described
339  in the extension.
340
341Zeilenga                                                        [Page 7]
342
343INTERNET-DRAFT      LDAP C API Concurrency Extensions  28 September 1999
344
3459.   Security Considerations
346
347  None taken, none given.
348
34910.  Copyright
350
351  Copyright 1999, The Internet Society.  All Rights Reserved.
352
353  This document and translations of it may be copied and furnished to
354  others, and derivative works that comment on or otherwise explain it
355  or assist in its implementation may be prepared, copied, published and
356  distributed, in whole or in part, without restriction of any kind,
357  provided that the above copyright notice and this paragraph are
358  included on all such copies and derivative works.  However, this
359  document itself may not be modified in any way, such as by removing
360  the copyright notice or references to the Internet Society or other
361  Internet organizations, except as needed for the  purpose of
362  developing Internet standards in which case the procedures for
363  copyrights defined in the Internet Standards process must be followed,
364  or as required to translate it into languages other than English.
365
366  The limited permissions granted above are perpetual and will not be
367  revoked by the Internet Society or its successors or assigns.
368
369  This document and the information contained herein is provided on an
370  "AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE INTERNET
371  ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
372  INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
373  INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
374  WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
375
37611.  Bibliography
377
378  [CAPI]  M. Smith, T. Howes, A. Herron, M. Wahl, A. Anantha,      "The
379  C LDAP Application Program Interface", INTERNET-DRAFT,      <draft-
380  ietf-ldapext-ldap-c-api-03.txt> + LDAPext discussions,      June 1999.
381
382  [ERRNO] K. Zeilenga, "LDAP C API Error Reporting Extension",
383       INTERNET-DRAFT, <draft-zeilenga-ldap-c-api-errno-00.txt>,
384       June 1999.
385
386  [KEYW]  S. Bradner, "Key words for use in RFCs to Indicate
387       Requirement Levels", RFC 2119, March 1997.
388
389Zeilenga                                                        [Page 8]
390
391INTERNET-DRAFT      LDAP C API Concurrency Extensions  28 September 1999
392
393  [LDAP]  M. Wahl, T. Howes, S. Kille, "Lightweight Directory
394       Access Protocol (v3)", RFC 2251, December 1997.
395
39613.  Author's Address
397
398  Kurt D. Zeilenga
399  OpenLDAP Foundation
400  <Kurt@OpenLDAP.org>
401
402  This document expires on 28 March 2000.
403
404Zeilenga                                                        [Page 9]
405
406    ---------------------------------------------------------------------
407
408INTERNET-DRAFT                                        Kurt D. Zeilenga
409Intended Category: Standards Track                 OpenLDAP Foundation
410Extends: draft-ietf-ldapext-ldap-c-api-03.txt
411Expires: 28 March 2000
412                                                     28 September 1999
413
414                   LDAP C API Error Reporting Extension
415                 <draft-zeilenga-ldap-c-api-errno-00.txt>
416
4171.   Status of this Memo
418
419  This document is an Internet-Draft and is in full conformance with all
420  provisions of Section 10 of RFC2026.
421
422  This draft document will be submitted to the RFC Editor as a Standards
423  Track document. Distribution of this memo is unlimited.  Technical
424  discussion of this document will take place on the IETF LDAP Extension
425  Working Group mailing list <ietf-ldapext@netscape.com>.  Please send
426  editorial comments directly to the author <Kurt@OpenLDAP.org>.
427
428  Internet-Drafts are working documents of the Internet Engineering Task
429  Force (IETF), its areas, and its working groups.  Note that other
430  groups may also distribute working documents as Internet-Drafts.
431
432  Internet-Drafts are draft documents valid for a maximum of six months
433  and may be updated, replaced, or obsoleted by other documents at any
434  time.  It is inappropriate to use Internet-Drafts as reference
435  material or to cite them other than as ``work in progress.''
436
437  The list of current Internet-Drafts can be accessed at
438  http://www.ietf.org/ietf/1id-abstracts.txt
439
440  The list of Internet-Draft Shadow Directories can be accessed at
441  http://www.ietf.org/shadow.html.
442
443  Copyright 1999, The Internet Society.  All Rights Reserved.
444
445  Please see the Copyright section near the end of this document for
446  more information.
447
4482.   Abstract
449
450  This document defines a manatory extension to the LDAP C API to
451  provide error reporting for all API calls.  The mechanism is
452  nonintrusive and can, optionally, support concurrent execution
453  environments.
454
455Zeilenga                                                        [Page 1]
456
457INTERNET-DRAFT    LDAP C API Error Reporting Extension 28 September 1999
458
459  The key words ``MUST'', ``MUST NOT'', ``REQUIRED'', ``SHALL'', ``SHALL
460  NOT'', ``SHOULD'', ``SHOULD NOT'', ``RECOMMENDED'',  and ``MAY'' in
461  this document are to be interpreted as described in RFC 2119 [KEYW].
462
4633.   Background and Intent of Use
464
465  The LDAP [LDAP] C API [CAPI] provides an interface which (due to
466  legacy compatibiity issues) does not provide a consistent mechanism
467  for reporting errors.  A large number of the calls within the
468  specification have no mechanism to indicate the nature of a failure.
469  The usefulness of a CAPI without a consistent, easy to use, error
470  reporting mechanism is limited.
471
472  This document defines an mandatory extension to the CAPI.  All
473  implementations of the CAPI MUST provide this extension.
474
475  The extension details additional requirements for error reporting.
476  Implementations MUST fulfill all other CAPI error reporting
477  requirements.
478
4794.   Error Handling Extension
480
481  This extension provides a mechanism that applications MAY use to
482  obtain an LDAP error number indicating the nature of the failure
483  associated with the last failed CAPI call.
484
485  Implementations MUST provide access to an LDAP error number (CAPI,
486  Section 9) resulting from the last failed CAPI call via the symbol
487  ldap_errno.  The last failed CAPI call may be within the global
488  context or within the current execution context.
489
490  The ldap_errno MUST evaluate to a modifiable lvalue that has type
491  'int', the value of which is set to a LDAP error number.  It is
492  unspecified whether ldap_errno is a macro or an identifier declared
493  with external linkage.  If a macro definition is suppressed in order
494  to access an actual object, or a program defines an identifier with
495  the name ldap_errno, the behavior is undefined.
496
497  Applications MUST access ldap_errno within the same concurrent
498  execution context, commonly a thread, in which the failure occurred.
499  The value of ldap_errno is LDAP_SUCCESS (0) if no API failure has
500  occurred within the supported context and the user has not assigned a
501  value within the supported context.
502
503Zeilenga                                                        [Page 2]
504
505INTERNET-DRAFT    LDAP C API Error Reporting Extension 28 September 1999
506
507  Implementations SHALL NOT update the ldap_errno value upon successful
508  CAPI call completion.
509
510  Implementations providing a current execution context specific
511  ldap_errno MUST advertise the feature LDAP_API_CONTEXT_SPECIFIC_ERRNO
512  as described in Section 6.  Implementation of
513  LDAP_API_CONTEXT_SPECIFIC_ERRNO is RECOMMENDED.
514
5154.1. Reporting Server Errors
516
517  It is not a CAPI failure for a server to return an error number.
518  Implementations SHALL NOT assign error results returned by servers to
519  ldap_errno.
520
5214.2. Implementation Specific Reporting
522
523  The CAPI specification stated that the caller may obtain an indication
524  of failure of certain calls (see listed below) using implementation
525  specific and/or operating system specific requirements.
526  Implementations are NOT REQUIRED to support any implementation
527  specific and/or operating system mechanism for ANY call detailed by
528  the CAPI specification or its extensions.
529
530  Affected calls include ldap_init(), ldap_open(), and ber_*().
531
5324.3. Example
533
534  The following is an example showing how an application may obtain the
535  error information resulting from a failed CAPI calls:
536
537    int msgid;
538    LDAP *ld = ldap_init("localhost", 389);
539
540    if(ld == NULL) {
541      printf("ldap_init failed, ldap_errno=%d (%s)\n",
542        ldap_errno, ldap_err2string(ldap_errno));
543
544      printf("unable to initialize LDAP session\n");
545      return -1;
546    }
547
548    msgid = ldap_simple_bind(ld, NULL, NULL);
549
550    if(msgid == -1) {
551      int err = ldap_errno;
552
553      if (err != LDAP_SUCCESS ) {
554
555Zeilenga                                                        [Page 3]
556
557INTERNET-DRAFT    LDAP C API Error Reporting Extension 28 September 1999
558
559        /* API failure */
560        printf("ldap_simple_bind failure: ldap_errno=%d (%s)\n",
561          err, ldap_err2string(err));
562
563      } else {
564        int lderr, rc;
565
566        printf("ldap_simple_bind failed\n");
567
568        rc = ldap_get_option(ld,
569          LDAP_OPT_ERROR_NUMBER, &lderr);
570
571        if(rc == LDAP_OPT_SUCCESS) {
572          printf("  reason=%d (%s)\n",
573            lderr, ldap_err2string(lderr));
574
575        } else {
576          printf("ldap_get_option failed, ldap_errno=%d (%s)\n",
577            ldap_errno, ldap_err2string(ldap_errno));        }
578      }
579
580      goto unbind;
581    }
582
583    /* ... */
584
585    unbind: if(ldap_unbind(ld) != 0) {
586      printf("ldap_unbind failed, ldap_errno=%d (%s)\n",
587        ldap_errno, ldap_error2str(ldap_errno));
588
589      return -1;
590    }
591    return 0;
592
5935.   Advertising Features
594
595  This document REQUIRES that supported features with the name in the
596  form LDAP_API_FEATURE_x be advertised to consumers of the CAPI as
597  follows:
598
599       SHOULD provide the macro LDAP_API_FEATURE_x with the value
600       of 1000 + revision number of this draft (i.e.: 1000+0 for
601       this 0 revision of the draft).
602
603       MUST provide the CAPI extension "x" when returning API
604       information upon LDAP_OPT_API_INFO option access, and
605
606Zeilenga                                                        [Page 4]
607
608INTERNET-DRAFT    LDAP C API Error Reporting Extension 28 September 1999
609
610       MUST provide feature info for "x" via LDAP_OPT_FEATURE_INFO
611       option mechanism.  The feature version provided MUST      match
612  the value LDAP_API_FEATURE_x macro
613
614  where x is replaced appropriately.
615
616  As implementations may not provide macros for all features,
617  applications SHOULD use LDAP_OPT_API_INFO to determine which features
618  are provided by a given implementation.
619
6206.   Changes to the LDAP C API
621
622  This section provides a summary of changes to the CAPI specification.
623
6246.1. LDAP_API_VERSION
625
626  LDAP_API_VERSION should be set to the RFC number of this extension if
627  and when it is published as a Standards Track RFC.  (see purpose of
628  this draft above).
629
630  Until such time as this document is published as an RFC,
631  implementations should use the value specified by CAPI plus 100 + 10 *
632  the number of this draft.
633
634  For the third draft of CAPI and this 0 revision of draft, the value of
635  2103 ((2000+3) + (100+10*0)) should be used.
636
6376.2. New Symbols
638
639  This extension introduces two new symbols:
640       LDAP_API_FEATURE_CONTEXT_SPECIFIC_ERRNO      ldap_errno
641
642  LDAP_API_FEATURE_CONTEXT_SPECIFIC_ERRNO is a macro.  ldap_errno MAY be
643  a MACRO.
644
645  This extension indroductes no new functions, typedefs, or structure
646  names.
647
6486.3. Implementation/System Specific Error Handling
649
650  This extensions removes any requirements that implementations to use
651  implementation and/or operating system specific error reporting
652  mechanisms.
653
654Zeilenga                                                        [Page 5]
655
656INTERNET-DRAFT    LDAP C API Error Reporting Extension 28 September 1999
657
6587.   Security Considerations
659
660  None taken, none given.
661
6628.   Copyright
663
664  Copyright 1999, The Internet Society.  All Rights Reserved.
665
666  This document and translations of it may be copied and furnished to
667  others, and derivative works that comment on or otherwise explain it
668  or assist in its implementation may be prepared, copied, published and
669  distributed, in whole or in part, without restriction of any kind,
670  provided that the above copyright notice and this paragraph are
671  included on all such copies and derivative works.  However, this
672  document itself may not be modified in any way, such as by removing
673  the copyright notice or references to the Internet Society or other
674  Internet organizations, except as needed for the  purpose of
675  developing Internet standards in which case the procedures for
676  copyrights defined in the Internet Standards process must be followed,
677  or as required to translate it into languages other than English.
678
679  The limited permissions granted above are perpetual and will not be
680  revoked by the Internet Society or its successors or assigns.
681
682  This document and the information contained herein is provided on an
683  "AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE INTERNET
684  ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
685  INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
686  INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
687  WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
688
6899.   Bibliography
690
691  [CAPI]  M. Smith, T. Howes, A. Herron, M. Wahl, A. Anantha,
692          "The C LDAP Application Program Interface", INTERNET-DRAFT,
693          <draft-ietf-ldapext-ldap-c-api-03.txt> + LDAPext discussions,
694       June 1999.
695
696  [KEYW]  S. Bradner, "Key words for use in RFCs to Indicate
697          Requirement Levels", RFC 2119, March 1997.
698
699  [LDAP]  M. Wahl, T. Howes, S. Kille, "Lightweight Directory
700          Access Protocol (v3)", RFC 2251, December 1997.
701
702Zeilenga                                                        [Page 6]
703
704INTERNET-DRAFT    LDAP C API Error Reporting Extension 28 September 1999
705
70610.  Author's Address
707
708  Kurt D. Zeilenga
709  OpenLDAP Foundation
710  <Kurt@OpenLDAP.org>
711
712  This document expires on 28 March 2000.
713
714Zeilenga                                                        [Page 7]
715