4bc793b9cc241f003ce8d9a6563118c7dfc3c5a8
[kamenim/samba.git] / source4 / lib / ldb / include / ldb.h
1 /* 
2    ldb database library
3
4    Copyright (C) Andrew Tridgell  2004
5    Copyright (C) Stefan Metzmacher  2004
6    Copyright (C) Simo Sorce  2005-2006
7
8      ** NOTE! The following LGPL license applies to the ldb
9      ** library. This does NOT imply that all of Samba is released
10      ** under the LGPL
11    
12    This library is free software; you can redistribute it and/or
13    modify it under the terms of the GNU Lesser General Public
14    License as published by the Free Software Foundation; either
15    version 3 of the License, or (at your option) any later version.
16
17    This library is distributed in the hope that it will be useful,
18    but WITHOUT ANY WARRANTY; without even the implied warranty of
19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20    Lesser General Public License for more details.
21
22    You should have received a copy of the GNU Lesser General Public
23    License along with this library; if not, see <http://www.gnu.org/licenses/>.
24 */
25
26 /*
27  *  Name: ldb
28  *
29  *  Component: ldb header
30  *
31  *  Description: defines for base ldb API
32  *
33  *  Author: Andrew Tridgell
34  *  Author: Stefan Metzmacher
35  */
36
37 /**
38    \file ldb.h Samba's ldb database
39
40    This header file provides the main API for ldb.
41 */
42
43 #ifndef _LDB_H_
44
45 /*! \cond DOXYGEN_IGNORE */
46 #define _LDB_H_ 1
47 /*! \endcond */
48
49 #include <stdbool.h>
50 #include <talloc.h>
51 #include <tevent.h>
52 #include "ldb_errors.h"
53
54 /*
55   major restrictions as compared to normal LDAP:
56
57      - each record must have a unique key field
58      - the key must be representable as a NULL terminated C string and may not 
59        contain a comma or braces
60
61   major restrictions as compared to tdb:
62
63      - no explicit locking calls, but we have transactions when using ldb_tdb
64
65 */
66
67 #ifndef ldb_val
68 /**
69    Result value
70
71    An individual lump of data in a result comes in this format. The
72    pointer will usually be to a UTF-8 string if the application is
73    sensible, but it can be to anything you like, including binary data
74    blobs of arbitrary size.
75
76    \note the data is null (0x00) terminated, but the length does not
77    include the terminator. 
78 */
79 struct ldb_val {
80         uint8_t *data; /*!< result data */
81         size_t length; /*!< length of data */
82 };
83 #endif
84
85 /*! \cond DOXYGEN_IGNORE */
86 #ifndef PRINTF_ATTRIBUTE
87 #define PRINTF_ATTRIBUTE(a,b)
88 #endif
89
90 #ifndef _DEPRECATED_
91 #if (__GNUC__ >= 3) && (__GNUC_MINOR__ >= 1 )
92 #define _DEPRECATED_ __attribute__ ((deprecated))
93 #else
94 #define _DEPRECATED_
95 #endif
96 #endif
97 /*! \endcond */
98
99 /* opaque ldb_dn structures, see ldb_dn.c for internals */
100 struct ldb_dn_component;
101 struct ldb_dn;
102
103 /**
104  There are a number of flags that are used with ldap_modify() in
105  ldb_message_element.flags fields. The LDB_FLAGS_MOD_ADD,
106  LDB_FLAGS_MOD_DELETE and LDB_FLAGS_MOD_REPLACE flags are used in
107  ldap_modify() calls to specify whether attributes are being added,
108  deleted or modified respectively.
109 */
110 #define LDB_FLAG_MOD_MASK  0x3
111
112 /**
113   use this to extract the mod type from the operation
114  */
115 #define LDB_FLAG_MOD_TYPE(flags) ((flags) & LDB_FLAG_MOD_MASK)
116
117 /**
118    Flag value used in ldap_modify() to indicate that attributes are
119    being added.
120
121    \sa LDB_FLAG_MOD_MASK
122 */
123 #define LDB_FLAG_MOD_ADD     1
124
125 /**
126    Flag value used in ldap_modify() to indicate that attributes are
127    being replaced.
128
129    \sa LDB_FLAG_MOD_MASK
130 */
131 #define LDB_FLAG_MOD_REPLACE 2
132
133 /**
134    Flag value used in ldap_modify() to indicate that attributes are
135    being deleted.
136
137    \sa LDB_FLAG_MOD_MASK
138 */
139 #define LDB_FLAG_MOD_DELETE  3
140
141 /**
142     flag bits on an element usable only by the internal implementation
143 */
144 #define LDB_FLAG_INTERNAL_MASK 0xFFFFFFF0
145
146 /**
147   OID for logic AND comaprison.
148
149   This is the well known object ID for a logical AND comparitor.
150 */
151 #define LDB_OID_COMPARATOR_AND  "1.2.840.113556.1.4.803"
152
153 /**
154   OID for logic OR comparison.
155
156   This is the well known object ID for a logical OR comparitor.
157 */
158 #define LDB_OID_COMPARATOR_OR   "1.2.840.113556.1.4.804"
159
160 /**
161   results are given back as arrays of ldb_message_element
162 */
163 struct ldb_message_element {
164         unsigned int flags;
165         const char *name;
166         unsigned int num_values;
167         struct ldb_val *values;
168 };
169
170
171 /**
172   a ldb_message represents all or part of a record. It can contain an arbitrary
173   number of elements. 
174 */
175 struct ldb_message {
176         struct ldb_dn *dn;
177         unsigned int num_elements;
178         struct ldb_message_element *elements;
179 };
180
181 enum ldb_changetype {
182         LDB_CHANGETYPE_NONE=0,
183         LDB_CHANGETYPE_ADD,
184         LDB_CHANGETYPE_DELETE,
185         LDB_CHANGETYPE_MODIFY
186 };
187
188 /**
189   LDIF record
190
191   This structure contains a LDIF record, as returned from ldif_read()
192   and equivalent functions.
193 */
194 struct ldb_ldif {
195         enum ldb_changetype changetype; /*!< The type of change */
196         struct ldb_message *msg;  /*!< The changes */
197 };
198
199 enum ldb_scope {LDB_SCOPE_DEFAULT=-1, 
200                 LDB_SCOPE_BASE=0, 
201                 LDB_SCOPE_ONELEVEL=1,
202                 LDB_SCOPE_SUBTREE=2};
203
204 struct ldb_context;
205 struct tevent_context;
206
207 /* debugging uses one of the following levels */
208 enum ldb_debug_level {LDB_DEBUG_FATAL, LDB_DEBUG_ERROR, 
209                       LDB_DEBUG_WARNING, LDB_DEBUG_TRACE};
210
211 /**
212   the user can optionally supply a debug function. The function
213   is based on the vfprintf() style of interface, but with the addition
214   of a severity level
215 */
216 struct ldb_debug_ops {
217         void (*debug)(void *context, enum ldb_debug_level level, 
218                       const char *fmt, va_list ap) PRINTF_ATTRIBUTE(3,0);
219         void *context;
220 };
221
222 /**
223   The user can optionally supply a custom utf8 functions,
224   to handle comparisons and casefolding.
225 */
226 struct ldb_utf8_fns {
227         void *context;
228         char *(*casefold)(void *context, TALLOC_CTX *mem_ctx, const char *s, size_t n);
229 };
230
231 /**
232    Flag value for database connection mode.
233
234    If LDB_FLG_RDONLY is used in ldb_connect, then the database will be
235    opened read-only, if possible.
236 */
237 #define LDB_FLG_RDONLY 1
238
239 /**
240    Flag value for database connection mode.
241
242    If LDB_FLG_NOSYNC is used in ldb_connect, then the database will be
243    opened without synchronous operations, if possible.
244 */
245 #define LDB_FLG_NOSYNC 2
246
247 /**
248    Flag value to specify autoreconnect mode.
249
250    If LDB_FLG_RECONNECT is used in ldb_connect, then the backend will
251    be opened in a way that makes it try to auto reconnect if the
252    connection is dropped (actually make sense only with ldap).
253 */
254 #define LDB_FLG_RECONNECT 4
255
256 /**
257    Flag to tell backends not to use mmap
258 */
259 #define LDB_FLG_NOMMAP 8
260
261 /**
262    Flag to tell ldif handlers not to force encoding of binary
263    structures in base64   
264 */
265 #define LDB_FLG_SHOW_BINARY 16
266
267 /**
268    Flags to enable ldb tracing
269 */
270 #define LDB_FLG_ENABLE_TRACING 32
271
272 /*
273    structures for ldb_parse_tree handling code
274 */
275 enum ldb_parse_op { LDB_OP_AND=1, LDB_OP_OR=2, LDB_OP_NOT=3,
276                     LDB_OP_EQUALITY=4, LDB_OP_SUBSTRING=5,
277                     LDB_OP_GREATER=6, LDB_OP_LESS=7, LDB_OP_PRESENT=8,
278                     LDB_OP_APPROX=9, LDB_OP_EXTENDED=10 };
279
280 struct ldb_parse_tree {
281         enum ldb_parse_op operation;
282         union {
283                 struct {
284                         struct ldb_parse_tree *child;
285                 } isnot;
286                 struct {
287                         const char *attr;
288                         struct ldb_val value;
289                 } equality;
290                 struct {
291                         const char *attr;
292                         int start_with_wildcard;
293                         int end_with_wildcard;
294                         struct ldb_val **chunks;
295                 } substring;
296                 struct {
297                         const char *attr;
298                 } present;
299                 struct {
300                         const char *attr;
301                         struct ldb_val value;
302                 } comparison;
303                 struct {
304                         const char *attr;
305                         int dnAttributes;
306                         char *rule_id;
307                         struct ldb_val value;
308                 } extended;
309                 struct {
310                         unsigned int num_elements;
311                         struct ldb_parse_tree **elements;
312                 } list;
313         } u;
314 };
315
316 struct ldb_parse_tree *ldb_parse_tree(TALLOC_CTX *mem_ctx, const char *s);
317 char *ldb_filter_from_tree(TALLOC_CTX *mem_ctx, struct ldb_parse_tree *tree);
318
319 /**
320    Encode a binary blob
321
322    This function encodes a binary blob using the encoding rules in RFC
323    2254 (Section 4). This function also escapes any non-printable
324    characters.
325
326    \param mem_ctx the memory context to allocate the return string in.
327    \param val the (potentially) binary data to be encoded
328
329    \return the encoded data as a null terminated string
330
331    \sa <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>.
332 */
333 char *ldb_binary_encode(TALLOC_CTX *mem_ctx, struct ldb_val val);
334
335 /**
336    Encode a string
337
338    This function encodes a string using the encoding rules in RFC 2254
339    (Section 4). This function also escapes any non-printable
340    characters.
341
342    \param mem_ctx the memory context to allocate the return string in.
343    \param string the string to be encoded
344
345    \return the encoded data as a null terminated string
346
347    \sa <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>.
348 */
349 char *ldb_binary_encode_string(TALLOC_CTX *mem_ctx, const char *string);
350
351 /*
352   functions for controlling attribute handling
353 */
354 typedef int (*ldb_attr_handler_t)(struct ldb_context *, TALLOC_CTX *mem_ctx, const struct ldb_val *, struct ldb_val *);
355 typedef int (*ldb_attr_comparison_t)(struct ldb_context *, TALLOC_CTX *mem_ctx, const struct ldb_val *, const struct ldb_val *);
356
357 /*
358   attribute handler structure
359
360   attr                  -> The attribute name
361   ldif_read_fn          -> convert from ldif to binary format
362   ldif_write_fn         -> convert from binary to ldif format
363   canonicalise_fn       -> canonicalise a value, for use by indexing and dn construction
364   comparison_fn         -> compare two values
365 */
366
367 struct ldb_schema_syntax {
368         const char *name;
369         ldb_attr_handler_t ldif_read_fn;
370         ldb_attr_handler_t ldif_write_fn;
371         ldb_attr_handler_t canonicalise_fn;
372         ldb_attr_comparison_t comparison_fn;
373 };
374
375 struct ldb_schema_attribute {
376         const char *name;
377         unsigned flags;
378         const struct ldb_schema_syntax *syntax;
379 };
380
381 const struct ldb_schema_attribute *ldb_schema_attribute_by_name(struct ldb_context *ldb,
382                                                                 const char *name);
383
384 struct ldb_dn_extended_syntax {
385         const char *name;
386         ldb_attr_handler_t read_fn;
387         ldb_attr_handler_t write_clear_fn;
388         ldb_attr_handler_t write_hex_fn;
389 };
390
391 const struct ldb_dn_extended_syntax *ldb_dn_extended_syntax_by_name(struct ldb_context *ldb,
392                                                                     const char *name);
393
394 /**
395    The attribute is not returned by default
396 */
397 #define LDB_ATTR_FLAG_HIDDEN       (1<<0) 
398
399 /* the attribute handler name should be freed when released */
400 #define LDB_ATTR_FLAG_ALLOCATED    (1<<1) 
401
402 /**
403    The attribute is supplied by the application and should not be removed
404 */
405 #define LDB_ATTR_FLAG_FIXED        (1<<2) 
406
407 /*
408   when this is set, attempts to create two records which have the same
409   value for this attribute will return LDB_ERR_ENTRY_ALREADY_EXISTS
410  */
411 #define LDB_ATTR_FLAG_UNIQUE_INDEX (1<<3)
412
413 /*
414   when this is set, attempts to create two attribute values for this attribute on a single DN will return LDB_ERR_CONSTRAINT_VIOLATION
415  */
416 #define LDB_ATTR_FLAG_SINGLE_VALUE (1<<4)
417
418 /**
419   LDAP attribute syntax for a DN
420
421   This is the well-known LDAP attribute syntax for a DN.
422
423   See <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>, Section 4.3.2 
424 */
425 #define LDB_SYNTAX_DN                   "1.3.6.1.4.1.1466.115.121.1.12"
426
427 /**
428   LDAP attribute syntax for a Directory String
429
430   This is the well-known LDAP attribute syntax for a Directory String.
431
432   \sa <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>, Section 4.3.2 
433 */
434 #define LDB_SYNTAX_DIRECTORY_STRING     "1.3.6.1.4.1.1466.115.121.1.15"
435
436 /**
437   LDAP attribute syntax for an integer
438
439   This is the well-known LDAP attribute syntax for an integer.
440
441   See <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>, Section 4.3.2 
442 */
443 #define LDB_SYNTAX_INTEGER              "1.3.6.1.4.1.1466.115.121.1.27"
444
445 /**
446   LDAP attribute syntax for a boolean
447
448   This is the well-known LDAP attribute syntax for a boolean.
449
450   See <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>, Section 4.3.2 
451 */
452 #define LDB_SYNTAX_BOOLEAN              "1.3.6.1.4.1.1466.115.121.1.7"
453
454 /**
455   LDAP attribute syntax for an octet string
456
457   This is the well-known LDAP attribute syntax for an octet string.
458
459   See <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>, Section 4.3.2 
460 */
461 #define LDB_SYNTAX_OCTET_STRING         "1.3.6.1.4.1.1466.115.121.1.40"
462
463 /**
464   LDAP attribute syntax for UTC time.
465
466   This is the well-known LDAP attribute syntax for a UTC time.
467
468   See <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>, Section 4.3.2 
469 */
470 #define LDB_SYNTAX_UTC_TIME             "1.3.6.1.4.1.1466.115.121.1.53"
471
472 #define LDB_SYNTAX_OBJECTCLASS          "LDB_SYNTAX_OBJECTCLASS"
473
474 /* sorting helpers */
475 typedef int (*ldb_qsort_cmp_fn_t) (void *v1, void *v2, void *opaque);
476
477 /* Individual controls */
478
479 /**
480   OID for getting and manipulating attributes from the ldb
481   without interception in the operational module.
482   It can be used to access attribute that used to be stored in the sam 
483   and that are now calculated.
484 */
485 #define LDB_CONTROL_BYPASSOPERATIONAL_OID "1.3.6.1.4.1.7165.4.3.13"
486
487 /**
488   OID for recalculate SD control. This control force the
489   dsdb code to recalculate the SD of the object as if the
490   object was just created.
491
492 */
493 #define LDB_CONTROL_RECALCULATE_SD_OID "1.3.6.1.4.1.7165.4.3.5"
494
495 /**
496    REVEAL_INTERNALS is used to reveal internal attributes and DN
497    components which are not normally shown to the user
498 */
499 #define LDB_CONTROL_REVEAL_INTERNALS "1.3.6.1.4.1.7165.4.3.6"
500
501 /**
502    LDB_CONTROL_AS_SYSTEM is used to skip access checks on operations
503    that are performed by the system, but with a user's credentials, e.g.
504    updating prefix map
505 */
506 #define LDB_CONTROL_AS_SYSTEM_OID "1.3.6.1.4.1.7165.4.3.7"
507
508 /* AD controls */
509
510 /**
511    OID for the paged results control. This control is included in the
512    searchRequest and searchResultDone messages as part of the controls
513    field of the LDAPMessage, as defined in Section 4.1.12 of
514    LDAP v3. 
515
516    \sa <a href="http://www.ietf.org/rfc/rfc2696.txt">RFC 2696</a>.
517 */
518 #define LDB_CONTROL_PAGED_RESULTS_OID   "1.2.840.113556.1.4.319"
519
520 /**
521    OID for specifying the returned elements of the ntSecurityDescriptor
522
523    \sa <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ldap/ldap/ldap_server_sd_flags_oid.asp">Microsoft documentation of this OID</a>
524 */
525 #define LDB_CONTROL_SD_FLAGS_OID        "1.2.840.113556.1.4.801"
526
527 /**
528    OID for specifying an advanced scope for the search (one partition)
529
530    \sa <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ldap/ldap/ldap_server_domain_scope_oid.asp">Microsoft documentation of this OID</a>
531 */
532 #define LDB_CONTROL_DOMAIN_SCOPE_OID    "1.2.840.113556.1.4.1339"
533
534 /**
535    OID for specifying an advanced scope for a search
536
537    \sa <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ldap/ldap/ldap_server_search_options_oid.asp">Microsoft documentation of this OID</a>
538 */
539 #define LDB_CONTROL_SEARCH_OPTIONS_OID  "1.2.840.113556.1.4.1340"
540
541 /**
542    OID for notification
543
544    \sa <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ldap/ldap/ldap_server_notification_oid.asp">Microsoft documentation of this OID</a>
545 */
546 #define LDB_CONTROL_NOTIFICATION_OID    "1.2.840.113556.1.4.528"
547
548 /**
549    OID for performing subtree deletes
550
551    \sa <a href="http://msdn.microsoft.com/en-us/library/aa366991(v=VS.85).aspx">Microsoft documentation of this OID</a>
552 */
553 #define LDB_CONTROL_TREE_DELETE_OID     "1.2.840.113556.1.4.805"
554
555 /**
556    OID for getting deleted objects
557
558    \sa <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ldap/ldap/ldap_server_show_deleted_oid.asp">Microsoft documentation of this OID</a>
559 */
560 #define LDB_CONTROL_SHOW_DELETED_OID    "1.2.840.113556.1.4.417"
561
562 /**
563    OID for getting recycled objects
564
565    \sa <a href="http://msdn.microsoft.com/en-us/library/dd304621(PROT.13).aspx">Microsoft documentation of this OID</a>
566 */
567 #define LDB_CONTROL_SHOW_RECYCLED_OID         "1.2.840.113556.1.4.2064"
568
569 /**
570    OID for getting deactivated linked attributes
571
572    \sa <a href="http://msdn.microsoft.com/en-us/library/dd302781(PROT.13).aspx">Microsoft documentation of this OID</a>
573 */
574 #define LDB_CONTROL_SHOW_DEACTIVATED_LINK_OID "1.2.840.113556.1.4.2065"
575
576 /**
577    OID for extended DN
578
579    \sa <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ldap/ldap/ldap_server_extended_dn_oid.asp">Microsoft documentation of this OID</a>
580 */
581 #define LDB_CONTROL_EXTENDED_DN_OID     "1.2.840.113556.1.4.529"
582
583 /**
584    OID for LDAP server sort result extension.
585
586    This control is included in the searchRequest message as part of
587    the controls field of the LDAPMessage, as defined in Section 4.1.12
588    of LDAP v3. The controlType is set to
589    "1.2.840.113556.1.4.473". The criticality MAY be either TRUE or
590    FALSE (where absent is also equivalent to FALSE) at the client's
591    option.
592
593    \sa <a href="http://www.ietf.org/rfc/rfc2891.txt">RFC 2891</a>.
594 */
595 #define LDB_CONTROL_SERVER_SORT_OID     "1.2.840.113556.1.4.473"
596
597 /**
598    OID for LDAP server sort result response extension.
599
600    This control is included in the searchResultDone message as part of
601    the controls field of the LDAPMessage, as defined in Section 4.1.12 of
602    LDAP v3.
603
604    \sa <a href="http://www.ietf.org/rfc/rfc2891.txt">RFC 2891</a>.
605 */
606 #define LDB_CONTROL_SORT_RESP_OID       "1.2.840.113556.1.4.474"
607
608 /**
609    OID for LDAP Attribute Scoped Query extension.
610
611    This control is included in SearchRequest or SearchResponse
612    messages as part of the controls field of the LDAPMessage.
613 */
614 #define LDB_CONTROL_ASQ_OID             "1.2.840.113556.1.4.1504"
615
616 /**
617    OID for LDAP Directory Sync extension. 
618
619    This control is included in SearchRequest or SearchResponse
620    messages as part of the controls field of the LDAPMessage.
621 */
622 #define LDB_CONTROL_DIRSYNC_OID         "1.2.840.113556.1.4.841"
623
624
625 /**
626    OID for LDAP Virtual List View Request extension.
627
628    This control is included in SearchRequest messages
629    as part of the controls field of the LDAPMessage.
630 */
631 #define LDB_CONTROL_VLV_REQ_OID         "2.16.840.1.113730.3.4.9"
632
633 /**
634    OID for LDAP Virtual List View Response extension.
635
636    This control is included in SearchResponse messages
637    as part of the controls field of the LDAPMessage.
638 */
639 #define LDB_CONTROL_VLV_RESP_OID        "2.16.840.1.113730.3.4.10"
640
641 /**
642    OID to let modifies don't give an error when adding an existing
643    attribute with the same value or deleting an nonexisting one attribute
644
645    \sa <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ldap/ldap/ldap_server_permissive_modify_oid.asp">Microsoft documentation of this OID</a>
646 */
647 #define LDB_CONTROL_PERMISSIVE_MODIFY_OID       "1.2.840.113556.1.4.1413"
648
649 /** 
650     OID to allow the server to be more 'fast and loose' with the data being added.  
651
652     \sa 
653
654 */
655 #define LDB_CONTROL_SERVER_LAZY_COMMIT   "1.2.840.113556.1.4.619"
656
657 /**
658    OID for LDAP Extended Operation FAST_BIND
659
660    This Extended operations is used to perform a fast bind.
661 */
662 #define LDB_EXTENDED_FAST_BIND_OID      "1.2.840.113556.1.4.1781"
663
664 /**
665    OID for LDAP Extended Operation START_TLS.
666
667    This Extended operation is used to start a new TLS channel on top of a clear
668    text channel.
669 */
670 #define LDB_EXTENDED_START_TLS_OID      "1.3.6.1.4.1.1466.20037"
671
672 /**
673    OID for LDAP Extended Operation DYNAMIC_REFRESH.
674
675    This Extended operation is used to create and maintain objects which exist
676    only a specific time, e.g. when a certain client or a certain person is
677    logged in. Data refreshes have to be periodically sent in a specific
678    interval. Otherwise the entry is going to be removed.
679 */
680 #define LDB_EXTENDED_DYNAMIC_OID        "1.3.6.1.4.1.1466.101.119.1"
681
682 /* Other standardised controls */
683
684 /**
685    OID for the allowing client to request temporary relaxed
686    enforcement of constraints of the x.500 model.
687
688    \sa <a href="http://opends.dev.java.net/public/standards/draft-zeilenga-ldap-managedit.txt">draft managedit</a>.
689 */
690 #define LDB_CONTROL_RELAX_OID "1.3.6.1.4.1.4203.666.5.12"
691
692 /**
693    control for RODC join
694    See [MS-ADTS] section 3.1.1.3.4.1.23
695 */
696 #define LDB_CONTROL_RODC_DCPROMO_OID "1.2.840.113556.1.4.1341"
697
698 /*
699    OID for LDAP Extended Operation PASSWORD_CHANGE.
700
701    This Extended operation is used to allow user password changes by the user
702    itself.
703 */
704 #define LDB_EXTENDED_PASSWORD_CHANGE_OID        "1.3.6.1.4.1.4203.1.11.1"
705
706
707 struct ldb_sd_flags_control {
708         /*
709          * request the owner    0x00000001
710          * request the group    0x00000002
711          * request the DACL     0x00000004
712          * request the SACL     0x00000008
713          */
714         unsigned secinfo_flags;
715 };
716
717 /*
718  * DOMAIN_SCOPE         0x00000001
719  * this limits the search to one partition,
720  * and no referrals will be returned.
721  * (Note this doesn't limit the entries by there
722  *  objectSid belonging to a domain! Builtin and Foreign Sids
723  *  are still returned)
724  *
725  * PHANTOM_ROOT         0x00000002
726  * this search on the whole tree on a domain controller
727  * over multiple partitions without referrals.
728  * (This is the default behavior on the Global Catalog Port)
729  */
730
731 #define LDB_SEARCH_OPTION_DOMAIN_SCOPE 0x00000001
732 #define LDB_SEARCH_OPTION_PHANTOM_ROOT 0x00000002
733
734 struct ldb_search_options_control {
735         unsigned search_options;
736 };
737
738 struct ldb_paged_control {
739         int size;
740         int cookie_len;
741         char *cookie;
742 };
743
744 struct ldb_extended_dn_control {
745         int type;
746 };
747
748 struct ldb_server_sort_control {
749         const char *attributeName;
750         const char *orderingRule;
751         int reverse;
752 };
753
754 struct ldb_sort_resp_control {
755         int result;
756         char *attr_desc;
757 };
758
759 struct ldb_asq_control {
760         int request;
761         char *source_attribute;
762         int src_attr_len;
763         int result;
764 };
765
766 struct ldb_dirsync_control {
767         int flags;
768         int max_attributes;
769         int cookie_len;
770         char *cookie;
771 };
772
773 struct ldb_vlv_req_control {
774         int beforeCount;
775         int afterCount;
776         int type;
777         union {
778                 struct {
779                         int offset;
780                         int contentCount;
781                 } byOffset;
782                 struct {
783                         int value_len;
784                         char *value;
785                 } gtOrEq;
786         } match;
787         int ctxid_len;
788         char *contextId;
789 };
790
791 struct ldb_vlv_resp_control {
792         int targetPosition;
793         int contentCount;
794         int vlv_result;
795         int ctxid_len;
796         char *contextId;
797 };
798
799 struct ldb_control {
800         const char *oid;
801         int critical;
802         void *data;
803 };
804
805 enum ldb_request_type {
806         LDB_SEARCH,
807         LDB_ADD,
808         LDB_MODIFY,
809         LDB_DELETE,
810         LDB_RENAME,
811         LDB_EXTENDED,
812         LDB_REQ_REGISTER_CONTROL,
813         LDB_REQ_REGISTER_PARTITION
814 };
815
816 enum ldb_reply_type {
817         LDB_REPLY_ENTRY,
818         LDB_REPLY_REFERRAL,
819         LDB_REPLY_DONE
820 };
821
822 enum ldb_wait_type {
823         LDB_WAIT_ALL,
824         LDB_WAIT_NONE
825 };
826
827 enum ldb_state {
828         LDB_ASYNC_INIT,
829         LDB_ASYNC_PENDING,
830         LDB_ASYNC_DONE
831 };
832
833 struct ldb_extended {
834         const char *oid;
835         void *data; /* NULL or a valid talloc pointer! talloc_get_type() will be used on it */
836 };
837
838 #define LDB_EXTENDED_SEQUENCE_NUMBER    "1.3.6.1.4.1.7165.4.4.3"
839
840 enum ldb_sequence_type {
841         LDB_SEQ_HIGHEST_SEQ,
842         LDB_SEQ_HIGHEST_TIMESTAMP,
843         LDB_SEQ_NEXT
844 };
845
846 #define LDB_SEQ_GLOBAL_SEQUENCE    0x01
847 #define LDB_SEQ_TIMESTAMP_SEQUENCE 0x02
848
849 struct ldb_seqnum_request {
850         enum ldb_sequence_type type;
851 };
852
853 struct ldb_seqnum_result {
854         uint64_t seq_num;
855         uint32_t flags;
856 };
857
858 struct ldb_result {
859         unsigned int count;
860         struct ldb_message **msgs;
861         struct ldb_extended *extended;
862         struct ldb_control **controls;
863         char **refs;
864 };
865
866 struct ldb_reply {
867         int error;
868         enum ldb_reply_type type;
869         struct ldb_message *message;
870         struct ldb_extended *response;
871         struct ldb_control **controls;
872         char *referral;
873 };
874
875 struct ldb_request;
876 struct ldb_handle;
877
878 struct ldb_search {
879         struct ldb_dn *base;
880         enum ldb_scope scope;
881         struct ldb_parse_tree *tree;
882         const char * const *attrs;
883         struct ldb_result *res;
884 };
885
886 struct ldb_add {
887         const struct ldb_message *message;
888 };
889
890 struct ldb_modify {
891         const struct ldb_message *message;
892 };
893
894 struct ldb_delete {
895         struct ldb_dn *dn;
896 };
897
898 struct ldb_rename {
899         struct ldb_dn *olddn;
900         struct ldb_dn *newdn;
901 };
902
903 struct ldb_register_control {
904         const char *oid;
905 };
906
907 struct ldb_register_partition {
908         struct ldb_dn *dn;
909 };
910
911 typedef int (*ldb_request_callback_t)(struct ldb_request *, struct ldb_reply *);
912
913 struct ldb_request {
914
915         enum ldb_request_type operation;
916
917         union {
918                 struct ldb_search search;
919                 struct ldb_add    add;
920                 struct ldb_modify mod;
921                 struct ldb_delete del;
922                 struct ldb_rename rename;
923                 struct ldb_extended extended;
924                 struct ldb_register_control reg_control;
925                 struct ldb_register_partition reg_partition;
926         } op;
927
928         struct ldb_control **controls;
929
930         void *context;
931         ldb_request_callback_t callback;
932
933         int timeout;
934         time_t starttime;
935         struct ldb_handle *handle;
936 };
937
938 int ldb_request(struct ldb_context *ldb, struct ldb_request *request);
939 int ldb_request_done(struct ldb_request *req, int status);
940 bool ldb_request_is_done(struct ldb_request *req);
941
942 int ldb_modules_wait(struct ldb_handle *handle);
943 int ldb_wait(struct ldb_handle *handle, enum ldb_wait_type type);
944
945 int ldb_set_timeout(struct ldb_context *ldb, struct ldb_request *req, int timeout);
946 int ldb_set_timeout_from_prev_req(struct ldb_context *ldb, struct ldb_request *oldreq, struct ldb_request *newreq);
947 void ldb_set_create_perms(struct ldb_context *ldb, unsigned int perms);
948 void ldb_set_modules_dir(struct ldb_context *ldb, const char *path);
949 struct tevent_context;
950 void ldb_set_event_context(struct ldb_context *ldb, struct tevent_context *ev);
951 struct tevent_context * ldb_get_event_context(struct ldb_context *ldb);
952
953 /**
954   Initialise ldbs' global information
955
956   This is required before any other LDB call
957
958   \return 0 if initialisation succeeded, -1 otherwise
959 */
960 int ldb_global_init(void);
961
962 /**
963   Initialise an ldb context
964
965   This is required before any other LDB call.
966
967   \param mem_ctx pointer to a talloc memory context. Pass NULL if there is
968   no suitable context available.
969
970   \return pointer to ldb_context that should be free'd (using talloc_free())
971   at the end of the program.
972 */
973 struct ldb_context *ldb_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev_ctx);
974
975 /**
976    Connect to a database.
977
978    This is typically called soon after ldb_init(), and is required prior to
979    any search or database modification operations.
980
981    The URL can be one of the following forms:
982     - tdb://path
983     - ldapi://path
984     - ldap://host
985     - sqlite://path
986
987    \param ldb the context associated with the database (from ldb_init())
988    \param url the URL of the database to connect to, as noted above
989    \param flags a combination of LDB_FLG_* to modify the connection behaviour
990    \param options backend specific options - passed uninterpreted to the backend
991
992    \return result code (LDB_SUCCESS on success, or a failure code)
993
994    \note It is an error to connect to a database that does not exist in readonly mode
995    (that is, with LDB_FLG_RDONLY). However in read-write mode, the database will be
996    created if it does not exist.
997 */
998
999 typedef void (*ldb_async_timeout_fn) (void *);
1000 typedef bool (*ldb_async_callback_fn) (void *);
1001 typedef int (*ldb_async_ctx_add_op_fn)(void *, time_t, void *, ldb_async_timeout_fn, ldb_async_callback_fn);
1002 typedef int (*ldb_async_ctx_wait_op_fn)(void *);
1003
1004 void ldb_async_ctx_set_private_data(struct ldb_context *ldb,
1005                                         void *private_data);
1006 void ldb_async_ctx_set_add_op(struct ldb_context *ldb,
1007                                 ldb_async_ctx_add_op_fn add_op);
1008 void ldb_async_ctx_set_wait_op(struct ldb_context *ldb,
1009                                 ldb_async_ctx_wait_op_fn wait_op);
1010
1011 int ldb_connect(struct ldb_context *ldb, const char *url, unsigned int flags, const char *options[]);
1012
1013 /*
1014   return an automatic basedn from the rootDomainNamingContext of the rootDSE
1015   This value have been set in an opaque pointer at connection time
1016 */
1017 struct ldb_dn *ldb_get_root_basedn(struct ldb_context *ldb);
1018
1019 /*
1020   return an automatic basedn from the configurationNamingContext of the rootDSE
1021   This value have been set in an opaque pointer at connection time
1022 */
1023 struct ldb_dn *ldb_get_config_basedn(struct ldb_context *ldb);
1024
1025 /*
1026   return an automatic basedn from the schemaNamingContext of the rootDSE
1027   This value have been set in an opaque pointer at connection time
1028 */
1029 struct ldb_dn *ldb_get_schema_basedn(struct ldb_context *ldb);
1030
1031 /*
1032   return an automatic baseDN from the defaultNamingContext of the rootDSE
1033   This value have been set in an opaque pointer at connection time
1034 */
1035 struct ldb_dn *ldb_get_default_basedn(struct ldb_context *ldb);
1036
1037 /**
1038   The default async search callback function 
1039
1040   \param req the request we are callback of
1041   \param ares a single reply from the async core
1042
1043   \return result code (LDB_SUCCESS on success, or a failure code)
1044
1045   \note this function expects req->context to always be an struct ldb_result pointer
1046   AND a talloc context, this function will steal on the context each message
1047   from the ares reply passed on by the async core so that in the end all the
1048   messages will be in the context (ldb_result)  memory tree.
1049   Freeing the passed context (ldb_result tree) will free all the resources
1050   (the request need to be freed separately and the result doe not depend on the
1051   request that can be freed as sson as the search request is finished)
1052 */
1053
1054 int ldb_search_default_callback(struct ldb_request *req, struct ldb_reply *ares);
1055
1056 /**
1057   The default async extended operation callback function
1058
1059   \param req the request we are callback of
1060   \param ares a single reply from the async core
1061
1062   \return result code (LDB_SUCCESS on success, or a failure code)
1063 */
1064 int ldb_op_default_callback(struct ldb_request *req, struct ldb_reply *ares);
1065
1066 int ldb_modify_default_callback(struct ldb_request *req, struct ldb_reply *ares);
1067
1068 /**
1069   Helper function to build a search request
1070
1071   \param ret_req the request structure is returned here (talloced on mem_ctx)
1072   \param ldb the context associated with the database (from ldb_init())
1073   \param mem_ctx a talloc memory context (used as parent of ret_req)
1074   \param base the Base Distinguished Name for the query (use ldb_dn_new() for an empty one)
1075   \param scope the search scope for the query
1076   \param expression the search expression to use for this query
1077   \param attrs the search attributes for the query (pass NULL if none required)
1078   \param controls an array of controls
1079   \param context the callback function context
1080   \param the callback function to handle the async replies
1081   \param the parent request if any
1082
1083   \return result code (LDB_SUCCESS on success, or a failure code)
1084 */
1085
1086 int ldb_build_search_req(struct ldb_request **ret_req,
1087                         struct ldb_context *ldb,
1088                         TALLOC_CTX *mem_ctx,
1089                         struct ldb_dn *base,
1090                         enum ldb_scope scope,
1091                         const char *expression,
1092                         const char * const *attrs,
1093                         struct ldb_control **controls,
1094                         void *context,
1095                         ldb_request_callback_t callback,
1096                         struct ldb_request *parent);
1097
1098 int ldb_build_search_req_ex(struct ldb_request **ret_req,
1099                         struct ldb_context *ldb,
1100                         TALLOC_CTX *mem_ctx,
1101                         struct ldb_dn *base,
1102                         enum ldb_scope scope,
1103                         struct ldb_parse_tree *tree,
1104                         const char * const *attrs,
1105                         struct ldb_control **controls,
1106                         void *context,
1107                         ldb_request_callback_t callback,
1108                         struct ldb_request *parent);
1109
1110 /**
1111   Helper function to build an add request
1112
1113   \param ret_req the request structure is returned here (talloced on mem_ctx)
1114   \param ldb the context associated with the database (from ldb_init())
1115   \param mem_ctx a talloc memory context (used as parent of ret_req)
1116   \param message contains the entry to be added 
1117   \param controls an array of controls
1118   \param context the callback function context
1119   \param the callback function to handle the async replies
1120   \param the parent request if any
1121
1122   \return result code (LDB_SUCCESS on success, or a failure code)
1123 */
1124
1125 int ldb_build_add_req(struct ldb_request **ret_req,
1126                         struct ldb_context *ldb,
1127                         TALLOC_CTX *mem_ctx,
1128                         const struct ldb_message *message,
1129                         struct ldb_control **controls,
1130                         void *context,
1131                         ldb_request_callback_t callback,
1132                         struct ldb_request *parent);
1133
1134 /**
1135   Helper function to build a modify request
1136
1137   \param ret_req the request structure is returned here (talloced on mem_ctx)
1138   \param ldb the context associated with the database (from ldb_init())
1139   \param mem_ctx a talloc memory context (used as parent of ret_req)
1140   \param message contains the entry to be modified
1141   \param controls an array of controls
1142   \param context the callback function context
1143   \param the callback function to handle the async replies
1144   \param the parent request if any
1145
1146   \return result code (LDB_SUCCESS on success, or a failure code)
1147 */
1148
1149 int ldb_build_mod_req(struct ldb_request **ret_req,
1150                         struct ldb_context *ldb,
1151                         TALLOC_CTX *mem_ctx,
1152                         const struct ldb_message *message,
1153                         struct ldb_control **controls,
1154                         void *context,
1155                         ldb_request_callback_t callback,
1156                         struct ldb_request *parent);
1157
1158 /**
1159   Helper function to build a delete request
1160
1161   \param ret_req the request structure is returned here (talloced on mem_ctx)
1162   \param ldb the context associated with the database (from ldb_init())
1163   \param mem_ctx a talloc memory context (used as parent of ret_req)
1164   \param dn the DN to be deleted
1165   \param controls an array of controls
1166   \param context the callback function context
1167   \param the callback function to handle the async replies
1168   \param the parent request if any
1169
1170   \return result code (LDB_SUCCESS on success, or a failure code)
1171 */
1172
1173 int ldb_build_del_req(struct ldb_request **ret_req,
1174                         struct ldb_context *ldb,
1175                         TALLOC_CTX *mem_ctx,
1176                         struct ldb_dn *dn,
1177                         struct ldb_control **controls,
1178                         void *context,
1179                         ldb_request_callback_t callback,
1180                         struct ldb_request *parent);
1181
1182 /**
1183   Helper function to build a rename request
1184
1185   \param ret_req the request structure is returned here (talloced on mem_ctx)
1186   \param ldb the context associated with the database (from ldb_init())
1187   \param mem_ctx a talloc memory context (used as parent of ret_req)
1188   \param olddn the old DN
1189   \param newdn the new DN
1190   \param controls an array of controls
1191   \param context the callback function context
1192   \param the callback function to handle the async replies
1193   \param the parent request if any
1194
1195   \return result code (LDB_SUCCESS on success, or a failure code)
1196 */
1197
1198 int ldb_build_rename_req(struct ldb_request **ret_req,
1199                         struct ldb_context *ldb,
1200                         TALLOC_CTX *mem_ctx,
1201                         struct ldb_dn *olddn,
1202                         struct ldb_dn *newdn,
1203                         struct ldb_control **controls,
1204                         void *context,
1205                         ldb_request_callback_t callback,
1206                         struct ldb_request *parent);
1207
1208 /**
1209   Add a ldb_control to a ldb_request
1210
1211   \param req the request struct where to add the control
1212   \param oid the object identifier of the control as string
1213   \param critical whether the control should be critical or not
1214   \param data a talloc pointer to the control specific data
1215
1216   \return result code (LDB_SUCCESS on success, or a failure code)
1217 */
1218 int ldb_request_add_control(struct ldb_request *req, const char *oid, bool critical, void *data);
1219
1220 /**
1221    check if a control with the specified "oid" exist and return it 
1222   \param req the request struct where to add the control
1223   \param oid the object identifier of the control as string
1224
1225   \return the control, NULL if not found 
1226 */
1227 struct ldb_control *ldb_request_get_control(struct ldb_request *req, const char *oid);
1228
1229 /**
1230    check if a control with the specified "oid" exist and return it 
1231   \param rep the reply struct where to add the control
1232   \param oid the object identifier of the control as string
1233
1234   \return the control, NULL if not found 
1235 */
1236 struct ldb_control *ldb_reply_get_control(struct ldb_reply *rep, const char *oid);
1237
1238 /**
1239   Search the database
1240
1241   This function searches the database, and returns 
1242   records that match an LDAP-like search expression
1243
1244   \param ldb the context associated with the database (from ldb_init())
1245   \param mem_ctx the memory context to use for the request and the results
1246   \param result the return result
1247   \param base the Base Distinguished Name for the query (use ldb_dn_new() for an empty one)
1248   \param scope the search scope for the query
1249   \param attrs the search attributes for the query (pass NULL if none required)
1250   \param exp_fmt the search expression to use for this query (printf like)
1251
1252   \return result code (LDB_SUCCESS on success, or a failure code)
1253
1254   \note use talloc_free() to free the ldb_result returned
1255 */
1256 int ldb_search(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
1257                struct ldb_result **result, struct ldb_dn *base,
1258                enum ldb_scope scope, const char * const *attrs,
1259                const char *exp_fmt, ...) PRINTF_ATTRIBUTE(7,8);
1260
1261 /**
1262   Add a record to the database.
1263
1264   This function adds a record to the database. This function will fail
1265   if a record with the specified class and key already exists in the
1266   database. 
1267
1268   \param ldb the context associated with the database (from
1269   ldb_init())
1270   \param message the message containing the record to add.
1271
1272   \return result code (LDB_SUCCESS if the record was added, otherwise
1273   a failure code)
1274 */
1275 int ldb_add(struct ldb_context *ldb, 
1276             const struct ldb_message *message);
1277
1278 /**
1279   Modify the specified attributes of a record
1280
1281   This function modifies a record that is in the database.
1282
1283   \param ldb the context associated with the database (from
1284   ldb_init())
1285   \param message the message containing the changes required.
1286
1287   \return result code (LDB_SUCCESS if the record was modified as
1288   requested, otherwise a failure code)
1289 */
1290 int ldb_modify(struct ldb_context *ldb, 
1291                const struct ldb_message *message);
1292
1293 /**
1294   Rename a record in the database
1295
1296   This function renames a record in the database.
1297
1298   \param ldb the context associated with the database (from
1299   ldb_init())
1300   \param olddn the DN for the record to be renamed.
1301   \param newdn the new DN 
1302
1303   \return result code (LDB_SUCCESS if the record was renamed as
1304   requested, otherwise a failure code)
1305 */
1306 int ldb_rename(struct ldb_context *ldb, struct ldb_dn *olddn, struct ldb_dn *newdn);
1307
1308 /**
1309   Delete a record from the database
1310
1311   This function deletes a record from the database.
1312
1313   \param ldb the context associated with the database (from
1314   ldb_init())
1315   \param dn the DN for the record to be deleted.
1316
1317   \return result code (LDB_SUCCESS if the record was deleted,
1318   otherwise a failure code)
1319 */
1320 int ldb_delete(struct ldb_context *ldb, struct ldb_dn *dn);
1321
1322 /**
1323   The default async extended operation callback function 
1324
1325   \param req the request we are callback of
1326   \param ares a single reply from the async core
1327
1328   \return result code (LDB_SUCCESS on success, or a failure code)
1329
1330   \note this function expects req->context to always be an struct ldb_result pointer
1331   AND a talloc context, this function will steal on the context each message
1332   from the ares reply passed on by the async core so that in the end all the
1333   messages will be in the context (ldb_result)  memory tree.
1334   Freeing the passed context (ldb_result tree) will free all the resources
1335   (the request need to be freed separately and the result doe not depend on the
1336   request that can be freed as sson as the search request is finished)
1337 */
1338
1339 int ldb_extended_default_callback(struct ldb_request *req, struct ldb_reply *ares);
1340
1341
1342 /**
1343   Helper function to build a extended request
1344
1345   \param ret_req the request structure is returned here (talloced on mem_ctx)
1346   \param ldb the context associated with the database (from ldb_init())
1347   \param mem_ctx a talloc memory context (used as parent of ret_req)
1348   \param oid the OID of the extended operation.
1349   \param data a void pointer a the extended operation specific parameters,
1350   it needs to be NULL or a valid talloc pointer! talloc_get_type() will be used on it  
1351   \param controls an array of controls
1352   \param context the callback function context
1353   \param the callback function to handle the async replies
1354   \param the parent request if any
1355
1356   \return result code (LDB_SUCCESS on success, or a failure code)
1357 */
1358 int ldb_build_extended_req(struct ldb_request **ret_req,
1359                            struct ldb_context *ldb,
1360                            TALLOC_CTX *mem_ctx,
1361                            const char *oid,
1362                            void *data,/* NULL or a valid talloc pointer! talloc_get_type() will be used on it */
1363                            struct ldb_control **controls,
1364                            void *context,
1365                            ldb_request_callback_t callback,
1366                            struct ldb_request *parent);
1367
1368 /**
1369   call an extended operation
1370
1371   This function deletes a record from the database.
1372
1373   \param ldb the context associated with the database (from ldb_init())
1374   \param oid the OID of the extended operation.
1375   \param data a void pointer a the extended operation specific parameters,
1376   it needs to be NULL or a valid talloc pointer! talloc_get_type() will be used on it  
1377   \param res the result of the extended operation
1378
1379   \return result code (LDB_SUCCESS if the extended operation returned fine,
1380   otherwise a failure code)
1381 */
1382 int ldb_extended(struct ldb_context *ldb, 
1383                  const char *oid,
1384                  void *data,/* NULL or a valid talloc pointer! talloc_get_type() will be used on it */
1385                  struct ldb_result **res);
1386
1387 /**
1388   Obtain current/next database sequence number
1389 */
1390 int ldb_sequence_number(struct ldb_context *ldb, enum ldb_sequence_type type, uint64_t *seq_num);
1391
1392 /**
1393   start a transaction
1394 */
1395 int ldb_transaction_start(struct ldb_context *ldb);
1396
1397 /**
1398    first phase of two phase commit
1399  */
1400 int ldb_transaction_prepare_commit(struct ldb_context *ldb);
1401
1402 /**
1403   commit a transaction
1404 */
1405 int ldb_transaction_commit(struct ldb_context *ldb);
1406
1407 /**
1408   cancel a transaction
1409 */
1410 int ldb_transaction_cancel(struct ldb_context *ldb);
1411
1412 /*
1413   cancel a transaction with no error if no transaction is pending
1414   used when we fork() to clear any parent transactions
1415 */
1416 int ldb_transaction_cancel_noerr(struct ldb_context *ldb);
1417
1418
1419 /**
1420   return extended error information from the last call
1421 */
1422 const char *ldb_errstring(struct ldb_context *ldb);
1423
1424 /**
1425   return a string explaining what a ldb error constant meancs
1426 */
1427 const char *ldb_strerror(int ldb_err);
1428
1429 /**
1430   setup the default utf8 functions
1431   FIXME: these functions do not yet handle utf8
1432 */
1433 void ldb_set_utf8_default(struct ldb_context *ldb);
1434
1435 /**
1436    Casefold a string
1437
1438    \param ldb the ldb context
1439    \param mem_ctx the memory context to allocate the result string
1440    memory from. 
1441    \param s the string that is to be folded
1442    \return a copy of the string, converted to upper case
1443
1444    \note The default function is not yet UTF8 aware. Provide your own
1445          set of functions through ldb_set_utf8_fns()
1446 */
1447 char *ldb_casefold(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, const char *s, size_t n);
1448
1449 /**
1450    Check the attribute name is valid according to rfc2251
1451    \param s the string to check
1452
1453    \return 1 if the name is ok
1454 */
1455 int ldb_valid_attr_name(const char *s);
1456
1457 /*
1458   ldif manipulation functions
1459 */
1460
1461 /**
1462    Write an LDIF message
1463
1464    This function writes an LDIF message using a caller supplied  write
1465    function.
1466
1467    \param ldb the ldb context (from ldb_init())
1468    \param fprintf_fn a function pointer for the write function. This must take
1469    a private data pointer, followed by a format string, and then a variable argument
1470    list. 
1471    \param private_data pointer that will be provided back to the write
1472    function. This is useful for maintaining state or context.
1473    \param ldif the message to write out
1474
1475    \return the total number of bytes written, or an error code as returned
1476    from the write function.
1477
1478    \sa ldb_ldif_write_file for a more convenient way to write to a
1479    file stream.
1480
1481    \sa ldb_ldif_read for the reader equivalent to this function.
1482 */
1483 int ldb_ldif_write(struct ldb_context *ldb,
1484                    int (*fprintf_fn)(void *, const char *, ...) PRINTF_ATTRIBUTE(2,3), 
1485                    void *private_data,
1486                    const struct ldb_ldif *ldif);
1487
1488 /**
1489    Clean up an LDIF message
1490
1491    This function cleans up a LDIF message read using ldb_ldif_read()
1492    or related functions (such as ldb_ldif_read_string() and
1493    ldb_ldif_read_file().
1494
1495    \param ldb the ldb context (from ldb_init())
1496    \param msg the message to clean up and free
1497
1498 */
1499 void ldb_ldif_read_free(struct ldb_context *ldb, struct ldb_ldif *msg);
1500
1501 /**
1502    Read an LDIF message
1503
1504    This function creates an LDIF message using a caller supplied read
1505    function. 
1506
1507    \param ldb the ldb context (from ldb_init())
1508    \param fgetc_fn a function pointer for the read function. This must
1509    take a private data pointer, and must return a pointer to an
1510    integer corresponding to the next byte read (or EOF if there is no
1511    more data to be read).
1512    \param private_data pointer that will be provided back to the read
1513    function. This is udeful for maintaining state or context.
1514
1515    \return the LDIF message that has been read in
1516
1517    \note You must free the LDIF message when no longer required, using
1518    ldb_ldif_read_free().
1519
1520    \sa ldb_ldif_read_file for a more convenient way to read from a
1521    file stream.
1522
1523    \sa ldb_ldif_read_string for a more convenient way to read from a
1524    string (char array).
1525
1526    \sa ldb_ldif_write for the writer equivalent to this function.
1527 */
1528 struct ldb_ldif *ldb_ldif_read(struct ldb_context *ldb, 
1529                                int (*fgetc_fn)(void *), void *private_data);
1530
1531 /**
1532    Read an LDIF message from a file
1533
1534    This function reads the next LDIF message from the contents of a
1535    file stream. If you want to get all of the LDIF messages, you will
1536    need to repeatedly call this function, until it returns NULL.
1537
1538    \param ldb the ldb context (from ldb_init())
1539    \param f the file stream to read from (typically from fdopen())
1540
1541    \sa ldb_ldif_read_string for an equivalent function that will read
1542    from a string (char array).
1543
1544    \sa ldb_ldif_write_file for the writer equivalent to this function.
1545
1546 */
1547 struct ldb_ldif *ldb_ldif_read_file(struct ldb_context *ldb, FILE *f);
1548
1549 /**
1550    Read an LDIF message from a string
1551
1552    This function reads the next LDIF message from the contents of a char
1553    array. If you want to get all of the LDIF messages, you will need
1554    to repeatedly call this function, until it returns NULL.
1555
1556    \param ldb the ldb context (from ldb_init())
1557    \param s pointer to the char array to read from
1558
1559    \sa ldb_ldif_read_file for an equivalent function that will read
1560    from a file stream.
1561
1562    \sa ldb_ldif_write for a more general (arbitrary read function)
1563    version of this function.
1564 */
1565 struct ldb_ldif *ldb_ldif_read_string(struct ldb_context *ldb, const char **s);
1566
1567 /**
1568    Write an LDIF message to a file
1569
1570    \param ldb the ldb context (from ldb_init())
1571    \param f the file stream to write to (typically from fdopen())
1572    \param msg the message to write out
1573
1574    \return the total number of bytes written, or a negative error code
1575
1576    \sa ldb_ldif_read_file for the reader equivalent to this function.
1577 */
1578 int ldb_ldif_write_file(struct ldb_context *ldb, FILE *f, const struct ldb_ldif *msg);
1579
1580 /**
1581    Write an LDIF message to a string
1582
1583    \param ldb the ldb context (from ldb_init())
1584    \param mem_ctx the talloc context on which to attach the string)
1585    \param msg the message to write out
1586
1587    \return the string containing the LDIF, or NULL on error
1588
1589    \sa ldb_ldif_read_string for the reader equivalent to this function.
1590 */
1591 char * ldb_ldif_write_string(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, 
1592                           const struct ldb_ldif *msg);
1593
1594
1595 /*
1596    Produce a string form of an ldb message
1597
1598    convenient function to turn a ldb_message into a string. Useful for
1599    debugging
1600  */
1601 char *ldb_ldif_message_string(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, 
1602                               enum ldb_changetype changetype,
1603                               const struct ldb_message *msg);
1604
1605
1606 /**
1607    Base64 encode a buffer
1608
1609    \param mem_ctx the memory context that the result is allocated
1610    from. 
1611    \param buf pointer to the array that is to be encoded
1612    \param len the number of elements in the array to be encoded
1613
1614    \return pointer to an array containing the encoded data
1615
1616    \note The caller is responsible for freeing the result
1617 */
1618 char *ldb_base64_encode(TALLOC_CTX *mem_ctx, const char *buf, int len);
1619
1620 /**
1621    Base64 decode a buffer
1622
1623    This function decodes a base64 encoded string in place.
1624
1625    \param s the string to decode.
1626
1627    \return the length of the returned (decoded) string.
1628
1629    \note the string is null terminated, but the null terminator is not
1630    included in the length.
1631 */
1632 int ldb_base64_decode(char *s);
1633
1634 /* The following definitions come from lib/ldb/common/ldb_dn.c  */
1635
1636 /**
1637   Get the linear form of a DN (without any extended components)
1638   
1639   \param dn The DN to linearize
1640 */
1641
1642 const char *ldb_dn_get_linearized(struct ldb_dn *dn);
1643
1644 /**
1645   Allocate a copy of the linear form of a DN (without any extended components) onto the supplied memory context 
1646   
1647   \param dn The DN to linearize
1648   \param mem_ctx TALLOC context to return result on
1649 */
1650
1651 char *ldb_dn_alloc_linearized(TALLOC_CTX *mem_ctx, struct ldb_dn *dn);
1652
1653 /**
1654   Get the linear form of a DN (with any extended components)
1655   
1656   \param mem_ctx TALLOC context to return result on
1657   \param dn The DN to linearize
1658   \param mode Style of extended DN to return (0 is HEX representation of binary form, 1 is a string form)
1659 */
1660 char *ldb_dn_get_extended_linearized(TALLOC_CTX *mem_ctx, struct ldb_dn *dn, int mode);
1661 const struct ldb_val *ldb_dn_get_extended_component(struct ldb_dn *dn, const char *name);
1662 int ldb_dn_set_extended_component(struct ldb_dn *dn, const char *name, const struct ldb_val *val);
1663 void ldb_dn_extended_filter(struct ldb_dn *dn, const char * const *accept);
1664 void ldb_dn_remove_extended_components(struct ldb_dn *dn);
1665 bool ldb_dn_has_extended(struct ldb_dn *dn);
1666
1667 int ldb_dn_extended_add_syntax(struct ldb_context *ldb, 
1668                                unsigned flags,
1669                                const struct ldb_dn_extended_syntax *syntax);
1670
1671 /** 
1672   Allocate a new DN from a string
1673
1674   \param mem_ctx TALLOC context to return resulting ldb_dn structure on
1675   \param dn The new DN 
1676
1677   \note The DN will not be parsed at this time.  Use ldb_dn_validate to tell if the DN is syntacticly correct
1678 */
1679
1680 struct ldb_dn *ldb_dn_new(TALLOC_CTX *mem_ctx, struct ldb_context *ldb, const char *dn);
1681 /** 
1682   Allocate a new DN from a printf style format string and arguments
1683
1684   \param mem_ctx TALLOC context to return resulting ldb_dn structure on
1685   \param new_fms The new DN as a format string (plus arguments)
1686
1687   \note The DN will not be parsed at this time.  Use ldb_dn_validate to tell if the DN is syntacticly correct
1688 */
1689
1690 struct ldb_dn *ldb_dn_new_fmt(TALLOC_CTX *mem_ctx, struct ldb_context *ldb, const char *new_fmt, ...) PRINTF_ATTRIBUTE(3,4);
1691 /** 
1692   Allocate a new DN from a struct ldb_val (useful to avoid buffer overrun)
1693
1694   \param mem_ctx TALLOC context to return resulting ldb_dn structure on
1695   \param dn The new DN 
1696
1697   \note The DN will not be parsed at this time.  Use ldb_dn_validate to tell if the DN is syntacticly correct
1698 */
1699
1700 struct ldb_dn *ldb_dn_from_ldb_val(TALLOC_CTX *mem_ctx, struct ldb_context *ldb, const struct ldb_val *strdn);
1701
1702 /**
1703   Determine if this DN is syntactically valid 
1704
1705   \param dn The DN to validate
1706 */
1707
1708 bool ldb_dn_validate(struct ldb_dn *dn);
1709
1710 char *ldb_dn_escape_value(TALLOC_CTX *mem_ctx, struct ldb_val value);
1711 const char *ldb_dn_get_casefold(struct ldb_dn *dn);
1712 char *ldb_dn_alloc_casefold(TALLOC_CTX *mem_ctx, struct ldb_dn *dn);
1713
1714 int ldb_dn_compare_base(struct ldb_dn *base, struct ldb_dn *dn);
1715 int ldb_dn_compare(struct ldb_dn *edn0, struct ldb_dn *edn1);
1716
1717 bool ldb_dn_add_base(struct ldb_dn *dn, struct ldb_dn *base);
1718 bool ldb_dn_add_base_fmt(struct ldb_dn *dn, const char *base_fmt, ...) PRINTF_ATTRIBUTE(2,3);
1719 bool ldb_dn_add_child(struct ldb_dn *dn, struct ldb_dn *child);
1720 bool ldb_dn_add_child_fmt(struct ldb_dn *dn, const char *child_fmt, ...) PRINTF_ATTRIBUTE(2,3);
1721 bool ldb_dn_remove_base_components(struct ldb_dn *dn, unsigned int num);
1722 bool ldb_dn_remove_child_components(struct ldb_dn *dn, unsigned int num);
1723
1724 struct ldb_dn *ldb_dn_copy(TALLOC_CTX *mem_ctx, struct ldb_dn *dn);
1725 struct ldb_dn *ldb_dn_get_parent(TALLOC_CTX *mem_ctx, struct ldb_dn *dn);
1726 char *ldb_dn_canonical_string(TALLOC_CTX *mem_ctx, struct ldb_dn *dn);
1727 char *ldb_dn_canonical_ex_string(TALLOC_CTX *mem_ctx, struct ldb_dn *dn);
1728 int ldb_dn_get_comp_num(struct ldb_dn *dn);
1729 const char *ldb_dn_get_component_name(struct ldb_dn *dn, unsigned int num);
1730 const struct ldb_val *ldb_dn_get_component_val(struct ldb_dn *dn, unsigned int num);
1731 const char *ldb_dn_get_rdn_name(struct ldb_dn *dn);
1732 const struct ldb_val *ldb_dn_get_rdn_val(struct ldb_dn *dn);
1733 int ldb_dn_set_component(struct ldb_dn *dn, int num, const char *name, const struct ldb_val val);
1734
1735 bool ldb_dn_is_valid(struct ldb_dn *dn);
1736 bool ldb_dn_is_special(struct ldb_dn *dn);
1737 bool ldb_dn_check_special(struct ldb_dn *dn, const char *check);
1738 bool ldb_dn_is_null(struct ldb_dn *dn);
1739 int ldb_dn_update_components(struct ldb_dn *dn, const struct ldb_dn *ref_dn);
1740
1741
1742 /**
1743    Compare two attributes
1744
1745    This function compares to attribute names. Note that this is a
1746    case-insensitive comparison.
1747
1748    \param a the first attribute name to compare
1749    \param b the second attribute name to compare
1750
1751    \return 0 if the attribute names are the same, or only differ in
1752    case; non-zero if there are any differences
1753
1754   attribute names are restricted by rfc2251 so using
1755   strcasecmp and toupper here is ok.
1756   return 0 for match
1757 */
1758 #define ldb_attr_cmp(a, b) strcasecmp(a, b)
1759 char *ldb_attr_casefold(TALLOC_CTX *mem_ctx, const char *s);
1760 int ldb_attr_dn(const char *attr);
1761
1762 /**
1763    Create an empty message
1764
1765    \param mem_ctx the memory context to create in. You can pass NULL
1766    to get the top level context, however the ldb context (from
1767    ldb_init()) may be a better choice
1768 */
1769 struct ldb_message *ldb_msg_new(TALLOC_CTX *mem_ctx);
1770
1771 /**
1772    Find an element within an message
1773 */
1774 struct ldb_message_element *ldb_msg_find_element(const struct ldb_message *msg, 
1775                                                  const char *attr_name);
1776
1777 /**
1778    Compare two ldb_val values
1779
1780    \param v1 first ldb_val structure to be tested
1781    \param v2 second ldb_val structure to be tested
1782
1783    \return 1 for a match, 0 if there is any difference
1784 */
1785 int ldb_val_equal_exact(const struct ldb_val *v1, const struct ldb_val *v2);
1786
1787 /**
1788    find a value within an ldb_message_element
1789
1790    \param el the element to search
1791    \param val the value to search for
1792
1793    \note This search is case sensitive
1794 */
1795 struct ldb_val *ldb_msg_find_val(const struct ldb_message_element *el, 
1796                                  struct ldb_val *val);
1797
1798 /**
1799    add a new empty element to a ldb_message
1800 */
1801 int ldb_msg_add_empty(struct ldb_message *msg,
1802                 const char *attr_name,
1803                 int flags,
1804                 struct ldb_message_element **return_el);
1805
1806 /**
1807    add a element to a ldb_message
1808 */
1809 int ldb_msg_add(struct ldb_message *msg, 
1810                 const struct ldb_message_element *el, 
1811                 int flags);
1812 int ldb_msg_add_value(struct ldb_message *msg, 
1813                 const char *attr_name,
1814                 const struct ldb_val *val,
1815                 struct ldb_message_element **return_el);
1816 int ldb_msg_add_steal_value(struct ldb_message *msg, 
1817                       const char *attr_name,
1818                       struct ldb_val *val);
1819 int ldb_msg_add_steal_string(struct ldb_message *msg, 
1820                              const char *attr_name, char *str);
1821 int ldb_msg_add_string(struct ldb_message *msg, 
1822                        const char *attr_name, const char *str);
1823 int ldb_msg_add_linearized_dn(struct ldb_message *msg, const char *attr_name,
1824                               struct ldb_dn *dn);
1825 int ldb_msg_add_fmt(struct ldb_message *msg, 
1826                     const char *attr_name, const char *fmt, ...) PRINTF_ATTRIBUTE(3,4);
1827
1828 /**
1829    compare two message elements - return 0 on match
1830 */
1831 int ldb_msg_element_compare(struct ldb_message_element *el1, 
1832                             struct ldb_message_element *el2);
1833 int ldb_msg_element_compare_name(struct ldb_message_element *el1, 
1834                                  struct ldb_message_element *el2);
1835
1836 /**
1837    Find elements in a message.
1838
1839    This function finds elements and converts to a specific type, with
1840    a give default value if not found. Assumes that elements are
1841    single valued.
1842 */
1843 const struct ldb_val *ldb_msg_find_ldb_val(const struct ldb_message *msg, const char *attr_name);
1844 int ldb_msg_find_attr_as_int(const struct ldb_message *msg, 
1845                              const char *attr_name,
1846                              int default_value);
1847 unsigned int ldb_msg_find_attr_as_uint(const struct ldb_message *msg, 
1848                                        const char *attr_name,
1849                                        unsigned int default_value);
1850 int64_t ldb_msg_find_attr_as_int64(const struct ldb_message *msg, 
1851                                    const char *attr_name,
1852                                    int64_t default_value);
1853 uint64_t ldb_msg_find_attr_as_uint64(const struct ldb_message *msg, 
1854                                      const char *attr_name,
1855                                      uint64_t default_value);
1856 double ldb_msg_find_attr_as_double(const struct ldb_message *msg, 
1857                                    const char *attr_name,
1858                                    double default_value);
1859 int ldb_msg_find_attr_as_bool(const struct ldb_message *msg, 
1860                               const char *attr_name,
1861                               int default_value);
1862 const char *ldb_msg_find_attr_as_string(const struct ldb_message *msg, 
1863                                         const char *attr_name,
1864                                         const char *default_value);
1865
1866 struct ldb_dn *ldb_msg_find_attr_as_dn(struct ldb_context *ldb,
1867                                        TALLOC_CTX *mem_ctx,
1868                                        const struct ldb_message *msg,
1869                                        const char *attr_name);
1870
1871 void ldb_msg_sort_elements(struct ldb_message *msg);
1872
1873 struct ldb_message *ldb_msg_copy_shallow(TALLOC_CTX *mem_ctx, 
1874                                          const struct ldb_message *msg);
1875 struct ldb_message *ldb_msg_copy(TALLOC_CTX *mem_ctx, 
1876                                  const struct ldb_message *msg);
1877
1878 /*
1879  * ldb_msg_canonicalize() is now depreciated
1880  * Please use ldb_msg_normalize() instead
1881  *
1882  * NOTE: Returned ldb_message object is allocated
1883  * into *ldb's context. Callers are recommended
1884  * to steal the returned object into a TALLOC_CTX
1885  * with short lifetime.
1886  */
1887 struct ldb_message *ldb_msg_canonicalize(struct ldb_context *ldb, 
1888                                          const struct ldb_message *msg) _DEPRECATED_;
1889
1890 int ldb_msg_normalize(struct ldb_context *ldb,
1891                       TALLOC_CTX *mem_ctx,
1892                       const struct ldb_message *msg,
1893                       struct ldb_message **_msg_out);
1894
1895
1896 /*
1897  * ldb_msg_diff() is now depreciated
1898  * Please use ldb_msg_difference() instead
1899  *
1900  * NOTE: Returned ldb_message object is allocated
1901  * into *ldb's context. Callers are recommended
1902  * to steal the returned object into a TALLOC_CTX
1903  * with short lifetime.
1904  */
1905 struct ldb_message *ldb_msg_diff(struct ldb_context *ldb, 
1906                                  struct ldb_message *msg1,
1907                                  struct ldb_message *msg2) _DEPRECATED_;
1908
1909 /**
1910  * return a ldb_message representing the differences between msg1 and msg2.
1911  * If you then use this in a ldb_modify() call,
1912  * it can be used to save edits to a message
1913  *
1914  * Result message is constructed as follows:
1915  * - LDB_FLAG_MOD_ADD     - elements found only in msg2
1916  * - LDB_FLAG_MOD_REPLACE - elements in msg2 that have
1917  *                          different value in msg1
1918  *                          Value for msg2 element is used
1919  * - LDB_FLAG_MOD_DELETE  - elements found only in msg2
1920  *
1921  * @return LDB_SUCCESS or LDB_ERR_OPERATIONS_ERROR
1922  */
1923 int ldb_msg_difference(struct ldb_context *ldb,
1924                        TALLOC_CTX *mem_ctx,
1925                        struct ldb_message *msg1,
1926                        struct ldb_message *msg2,
1927                        struct ldb_message **_msg_out);
1928
1929 /**
1930    Tries to find a certain string attribute in a message
1931
1932    \param msg the message to check
1933    \param name attribute name
1934    \param value attribute value
1935
1936    \return 1 on match and 0 otherwise.
1937 */
1938 int ldb_msg_check_string_attribute(const struct ldb_message *msg,
1939                                    const char *name,
1940                                    const char *value);
1941
1942 /**
1943    Integrity check an ldb_message
1944
1945    This function performs basic sanity / integrity checks on an
1946    ldb_message.
1947
1948    \param ldb context in which to perform the checks
1949    \param msg the message to check
1950
1951    \return LDB_SUCCESS if the message is OK, or a non-zero error code
1952    (one of LDB_ERR_INVALID_DN_SYNTAX, LDB_ERR_ENTRY_ALREADY_EXISTS or
1953    LDB_ERR_INVALID_ATTRIBUTE_SYNTAX) if there is a problem with a
1954    message.
1955 */
1956 int ldb_msg_sanity_check(struct ldb_context *ldb,
1957                          const struct ldb_message *msg);
1958
1959 /**
1960    Duplicate an ldb_val structure
1961
1962    This function copies an ldb value structure. 
1963
1964    \param mem_ctx the memory context that the duplicated value will be
1965    allocated from
1966    \param v the ldb_val to be duplicated.
1967
1968    \return the duplicated ldb_val structure.
1969 */
1970 struct ldb_val ldb_val_dup(TALLOC_CTX *mem_ctx, const struct ldb_val *v);
1971
1972 /**
1973   this allows the user to set a debug function for error reporting
1974 */
1975 int ldb_set_debug(struct ldb_context *ldb,
1976                   void (*debug)(void *context, enum ldb_debug_level level, 
1977                                 const char *fmt, va_list ap) PRINTF_ATTRIBUTE(3,0),
1978                   void *context);
1979
1980 /**
1981   this allows the user to set custom utf8 function for error reporting
1982 */
1983 void ldb_set_utf8_fns(struct ldb_context *ldb,
1984                       void *context,
1985                       char *(*casefold)(void *, void *, const char *, size_t n));
1986
1987 /**
1988    this sets up debug to print messages on stderr
1989 */
1990 int ldb_set_debug_stderr(struct ldb_context *ldb);
1991
1992 /* control backend specific opaque values */
1993 int ldb_set_opaque(struct ldb_context *ldb, const char *name, void *value);
1994 void *ldb_get_opaque(struct ldb_context *ldb, const char *name);
1995
1996 const char **ldb_attr_list_copy(TALLOC_CTX *mem_ctx, const char * const *attrs);
1997 const char **ldb_attr_list_copy_add(TALLOC_CTX *mem_ctx, const char * const *attrs, const char *new_attr);
1998 int ldb_attr_in_list(const char * const *attrs, const char *attr);
1999
2000 int ldb_msg_rename_attr(struct ldb_message *msg, const char *attr, const char *replace);
2001 int ldb_msg_copy_attr(struct ldb_message *msg, const char *attr, const char *replace);
2002 void ldb_msg_remove_attr(struct ldb_message *msg, const char *attr);
2003 void ldb_msg_remove_element(struct ldb_message *msg, struct ldb_message_element *el);
2004
2005
2006 void ldb_parse_tree_attr_replace(struct ldb_parse_tree *tree, 
2007                                  const char *attr, 
2008                                  const char *replace);
2009
2010 /*
2011   shallow copy a tree - copying only the elements array so that the caller
2012   can safely add new elements without changing the message
2013 */
2014 struct ldb_parse_tree *ldb_parse_tree_copy_shallow(TALLOC_CTX *mem_ctx,
2015                                                    const struct ldb_parse_tree *ot);
2016
2017 /**
2018    Convert a time structure to a string
2019
2020    This function converts a time_t structure to an LDAP formatted
2021    GeneralizedTime string.
2022                 
2023    \param mem_ctx the memory context to allocate the return string in
2024    \param t the time structure to convert
2025
2026    \return the formatted string, or NULL if the time structure could
2027    not be converted
2028 */
2029 char *ldb_timestring(TALLOC_CTX *mem_ctx, time_t t);
2030
2031 /**
2032    Convert a string to a time structure
2033
2034    This function converts an LDAP formatted GeneralizedTime string
2035    to a time_t structure.
2036
2037    \param s the string to convert
2038
2039    \return the time structure, or 0 if the string cannot be converted
2040 */
2041 time_t ldb_string_to_time(const char *s);
2042
2043 /**
2044   convert a LDAP GeneralizedTime string in ldb_val format to a
2045   time_t.
2046 */
2047 int ldb_val_to_time(const struct ldb_val *v, time_t *t);
2048
2049 /**
2050    Convert a time structure to a string
2051
2052    This function converts a time_t structure to an LDAP formatted
2053    UTCTime string.
2054                 
2055    \param mem_ctx the memory context to allocate the return string in
2056    \param t the time structure to convert
2057
2058    \return the formatted string, or NULL if the time structure could
2059    not be converted
2060 */
2061 char *ldb_timestring_utc(TALLOC_CTX *mem_ctx, time_t t);
2062
2063 /**
2064    Convert a string to a time structure
2065
2066    This function converts an LDAP formatted UTCTime string
2067    to a time_t structure.
2068
2069    \param s the string to convert
2070
2071    \return the time structure, or 0 if the string cannot be converted
2072 */
2073 time_t ldb_string_utc_to_time(const char *s);
2074
2075
2076 void ldb_qsort (void *const pbase, size_t total_elems, size_t size, void *opaque, ldb_qsort_cmp_fn_t cmp);
2077
2078 #ifndef discard_const
2079 #define discard_const(ptr) ((void *)((uintptr_t)(ptr)))
2080 #endif
2081
2082 /*
2083   a wrapper around ldb_qsort() that ensures the comparison function is
2084   type safe. This will produce a compilation warning if the types
2085   don't match
2086  */
2087 #define LDB_TYPESAFE_QSORT(base, numel, opaque, comparison)     \
2088 do { \
2089         if (numel > 1) { \
2090                 ldb_qsort(base, numel, sizeof((base)[0]), discard_const(opaque), (ldb_qsort_cmp_fn_t)comparison); \
2091                 comparison(&((base)[0]), &((base)[1]), opaque);         \
2092         } \
2093 } while (0)
2094
2095 /* allow ldb to also call TYPESAFE_QSORT() */
2096 #ifndef TYPESAFE_QSORT
2097 #define TYPESAFE_QSORT(base, numel, comparison) \
2098 do { \
2099         if (numel > 1) { \
2100                 qsort(base, numel, sizeof((base)[0]), (int (*)(const void *, const void *))comparison); \
2101                 comparison(&((base)[0]), &((base)[1])); \
2102         } \
2103 } while (0)
2104 #endif
2105
2106
2107
2108 /**
2109    Convert an array of string represention of a control into an array of ldb_control structures 
2110    
2111    \param ldb LDB context
2112    \param mem_ctx TALLOC context to return result on, and to allocate error_string on
2113    \param control_strings Array of string-formatted controls
2114
2115    \return array of ldb_control elements
2116 */
2117 struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, const char **control_strings);
2118
2119 /**
2120    return the ldb flags 
2121 */
2122 unsigned int ldb_get_flags(struct ldb_context *ldb);
2123
2124 /* set the ldb flags */
2125 void ldb_set_flags(struct ldb_context *ldb, unsigned flags);
2126
2127
2128 struct ldb_dn *ldb_dn_binary_from_ldb_val(TALLOC_CTX *mem_ctx,
2129                                           struct ldb_context *ldb,
2130                                           const struct ldb_val *strdn);
2131
2132 int ldb_dn_get_binary(struct ldb_dn *dn, struct ldb_val *val);
2133 int ldb_dn_set_binary(struct ldb_dn *dn, struct ldb_val *val);
2134
2135 /* debugging functions for ldb requests */
2136 void ldb_req_set_location(struct ldb_request *req, const char *location);
2137 const char *ldb_req_location(struct ldb_request *req);
2138
2139 /* set the location marker on a request handle - used for debugging */
2140 #define LDB_REQ_SET_LOCATION(req) ldb_req_set_location(req, __location__)
2141
2142 #endif