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