r21496: A number of ldb control and LDAP changes, surrounding the
[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 2 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, write to the Free Software
24    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
25 */
26
27 /*
28  *  Name: ldb
29  *
30  *  Component: ldb header
31  *
32  *  Description: defines for base ldb API
33  *
34  *  Author: Andrew Tridgell
35  *  Author: Stefan Metzmacher
36  */
37
38 /**
39    \file ldb.h Samba's ldb database
40
41    This header file provides the main API for ldb.
42 */
43
44 #ifndef _LDB_H_
45
46 /*! \cond DOXYGEN_IGNORE */
47 #define _LDB_H_ 1
48 /*! \endcond */
49
50 /*
51   major restrictions as compared to normal LDAP:
52
53      - no async calls.
54      - each record must have a unique key field
55      - the key must be representable as a NULL terminated C string and may not 
56        contain a comma or braces
57
58   major restrictions as compared to tdb:
59
60      - no explicit locking calls
61      UPDATE: we have transactions now, better than locking --SSS.
62
63 */
64
65 #ifndef ldb_val
66 /**
67    Result value
68
69    An individual lump of data in a result comes in this format. The
70    pointer will usually be to a UTF-8 string if the application is
71    sensible, but it can be to anything you like, including binary data
72    blobs of arbitrary size.
73
74    \note the data is null (0x00) terminated, but the length does not
75    include the terminator. 
76 */
77 struct ldb_val {
78         uint8_t *data; /*!< result data */
79         size_t length; /*!< length of data */
80 };
81 #endif
82
83 /*! \cond DOXYGEN_IGNORE */
84 #ifndef PRINTF_ATTRIBUTE
85 #define PRINTF_ATTRIBUTE(a,b)
86 #endif
87 /*! \endcond */
88
89 /* opaque ldb_dn structures, see ldb_dn.c for internals */
90 struct ldb_dn_component;
91 struct ldb_dn;
92
93 /**
94  There are a number of flags that are used with ldap_modify() in
95  ldb_message_element.flags fields. The LDA_FLAGS_MOD_ADD,
96  LDA_FLAGS_MOD_DELETE and LDA_FLAGS_MOD_REPLACE flags are used in
97  ldap_modify() calls to specify whether attributes are being added,
98  deleted or modified respectively.
99 */
100 #define LDB_FLAG_MOD_MASK  0x3
101
102 /**
103    Flag value used in ldap_modify() to indicate that attributes are
104    being added.
105
106    \sa LDB_FLAG_MOD_MASK
107 */
108 #define LDB_FLAG_MOD_ADD     1
109
110 /**
111    Flag value used in ldap_modify() to indicate that attributes are
112    being replaced.
113
114    \sa LDB_FLAG_MOD_MASK
115 */
116 #define LDB_FLAG_MOD_REPLACE 2
117
118 /**
119    Flag value used in ldap_modify() to indicate that attributes are
120    being deleted.
121
122    \sa LDB_FLAG_MOD_MASK
123 */
124 #define LDB_FLAG_MOD_DELETE  3
125
126 /**
127   OID for logic AND comaprison.
128
129   This is the well known object ID for a logical AND comparitor.
130 */
131 #define LDB_OID_COMPARATOR_AND  "1.2.840.113556.1.4.803"
132
133 /**
134   OID for logic OR comparison.
135
136   This is the well known object ID for a logical OR comparitor.
137 */
138 #define LDB_OID_COMPARATOR_OR   "1.2.840.113556.1.4.804"
139
140 /**
141   results are given back as arrays of ldb_message_element
142 */
143 struct ldb_message_element {
144         unsigned int flags;
145         const char *name;
146         unsigned int num_values;
147         struct ldb_val *values;
148 };
149
150
151 /**
152   a ldb_message represents all or part of a record. It can contain an arbitrary
153   number of elements. 
154 */
155 struct ldb_message {
156         struct ldb_dn *dn;
157         unsigned int num_elements;
158         struct ldb_message_element *elements;
159 };
160
161 enum ldb_changetype {
162         LDB_CHANGETYPE_NONE=0,
163         LDB_CHANGETYPE_ADD,
164         LDB_CHANGETYPE_DELETE,
165         LDB_CHANGETYPE_MODIFY
166 };
167
168 /**
169   LDIF record
170
171   This structure contains a LDIF record, as returned from ldif_read()
172   and equivalent functions.
173 */
174 struct ldb_ldif {
175         enum ldb_changetype changetype; /*!< The type of change */
176         struct ldb_message *msg;  /*!< The changes */
177 };
178
179 enum ldb_scope {LDB_SCOPE_DEFAULT=-1, 
180                 LDB_SCOPE_BASE=0, 
181                 LDB_SCOPE_ONELEVEL=1,
182                 LDB_SCOPE_SUBTREE=2};
183
184 struct ldb_context;
185
186 /* debugging uses one of the following levels */
187 enum ldb_debug_level {LDB_DEBUG_FATAL, LDB_DEBUG_ERROR, 
188                       LDB_DEBUG_WARNING, LDB_DEBUG_TRACE};
189
190 /**
191   the user can optionally supply a debug function. The function
192   is based on the vfprintf() style of interface, but with the addition
193   of a severity level
194 */
195 struct ldb_debug_ops {
196         void (*debug)(void *context, enum ldb_debug_level level, 
197                       const char *fmt, va_list ap) PRINTF_ATTRIBUTE(3,0);
198         void *context;
199 };
200
201 /**
202   The user can optionally supply a custom utf8 functions,
203   to handle comparisons and casefolding.
204 */
205 struct ldb_utf8_fns {
206         void *context;
207         char *(*casefold)(void *context, void *mem_ctx, const char *s);
208 };
209
210 /**
211    Flag value for database connection mode.
212
213    If LDB_FLG_RDONLY is used in ldb_connect, then the database will be
214    opened read-only, if possible.
215 */
216 #define LDB_FLG_RDONLY 1
217
218 /**
219    Flag value for database connection mode.
220
221    If LDB_FLG_NOSYNC is used in ldb_connect, then the database will be
222    opened without synchronous operations, if possible.
223 */
224 #define LDB_FLG_NOSYNC 2
225
226 /**
227    Flag value to specify autoreconnect mode.
228
229    If LDB_FLG_RECONNECT is used in ldb_connect, then the backend will
230    be opened in a way that makes it try to auto reconnect if the
231    connection is dropped (actually make sense only with ldap).
232 */
233 #define LDB_FLG_RECONNECT 4
234
235 /*
236    structures for ldb_parse_tree handling code
237 */
238 enum ldb_parse_op { LDB_OP_AND=1, LDB_OP_OR=2, LDB_OP_NOT=3,
239                     LDB_OP_EQUALITY=4, LDB_OP_SUBSTRING=5,
240                     LDB_OP_GREATER=6, LDB_OP_LESS=7, LDB_OP_PRESENT=8,
241                     LDB_OP_APPROX=9, LDB_OP_EXTENDED=10 };
242
243 struct ldb_parse_tree {
244         enum ldb_parse_op operation;
245         union {
246                 struct {
247                         struct ldb_parse_tree *child;
248                 } isnot;
249                 struct {
250                         const char *attr;
251                         struct ldb_val value;
252                 } equality;
253                 struct {
254                         const char *attr;
255                         int start_with_wildcard;
256                         int end_with_wildcard;
257                         struct ldb_val **chunks;
258                 } substring;
259                 struct {
260                         const char *attr;
261                 } present;
262                 struct {
263                         const char *attr;
264                         struct ldb_val value;
265                 } comparison;
266                 struct {
267                         const char *attr;
268                         int dnAttributes;
269                         char *rule_id;
270                         struct ldb_val value;
271                 } extended;
272                 struct {
273                         unsigned int num_elements;
274                         struct ldb_parse_tree **elements;
275                 } list;
276         } u;
277 };
278
279 struct ldb_parse_tree *ldb_parse_tree(void *mem_ctx, const char *s);
280 char *ldb_filter_from_tree(void *mem_ctx, struct ldb_parse_tree *tree);
281
282 /**
283    Encode a binary blob
284
285    This function encodes a binary blob using the encoding rules in RFC
286    2254 (Section 4). This function also escapes any non-printable
287    characters.
288
289    \param ctx the memory context to allocate the return string in.
290    \param val the (potentially) binary data to be encoded
291
292    \return the encoded data as a null terminated string
293
294    \sa <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>.
295 */
296 char *ldb_binary_encode(void *ctx, struct ldb_val val);
297
298 /**
299    Encode a string
300
301    This function encodes a string using the encoding rules in RFC 2254
302    (Section 4). This function also escapes any non-printable
303    characters.
304
305    \param mem_ctx the memory context to allocate the return string in.
306    \param string the string to be encoded
307
308    \return the encoded data as a null terminated string
309
310    \sa <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>.
311 */
312 char *ldb_binary_encode_string(void *mem_ctx, const char *string);
313
314 /*
315   functions for controlling attribute handling
316 */
317 typedef int (*ldb_attr_handler_t)(struct ldb_context *, void *mem_ctx, const struct ldb_val *, struct ldb_val *);
318 typedef int (*ldb_attr_comparison_t)(struct ldb_context *, void *mem_ctx, const struct ldb_val *, const struct ldb_val *);
319
320 /*
321   attribute handler structure
322
323   attr                  -> The attribute name
324   flags                 -> LDB_ATTR_FLAG_*
325   ldif_read_fn          -> convert from ldif to binary format
326   ldif_write_fn         -> convert from binary to ldif format
327   canonicalise_fn       -> canonicalise a value, for use by indexing and dn construction
328   comparison_fn         -> compare two values
329 */
330
331 struct ldb_schema_syntax {
332         const char *name;
333         ldb_attr_handler_t ldif_read_fn;
334         ldb_attr_handler_t ldif_write_fn;
335         ldb_attr_handler_t canonicalise_fn;
336         ldb_attr_comparison_t comparison_fn;
337 };
338
339 struct ldb_schema_attribute {
340         const char *name;
341         unsigned flags;
342         const struct ldb_schema_syntax *syntax;
343 };
344
345 const struct ldb_schema_attribute *ldb_schema_attribute_by_name(struct ldb_context *ldb,
346                                                                 const char *name);
347
348 /**
349    The attribute is not returned by default
350 */
351 #define LDB_ATTR_FLAG_HIDDEN       (1<<0) 
352
353 /* the attribute handler name should be freed when released */
354 #define LDB_ATTR_FLAG_ALLOCATED    (1<<1) 
355
356 /**
357    The attribute is constructed from other attributes
358 */
359 #define LDB_ATTR_FLAG_CONSTRUCTED  (1<<1) 
360
361 /**
362   LDAP attribute syntax for a DN
363
364   This is the well-known LDAP attribute syntax for a DN.
365
366   See <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>, Section 4.3.2 
367 */
368 #define LDB_SYNTAX_DN                   "1.3.6.1.4.1.1466.115.121.1.12"
369
370 /**
371   LDAP attribute syntax for a Directory String
372
373   This is the well-known LDAP attribute syntax for a Directory String.
374
375   \sa <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>, Section 4.3.2 
376 */
377 #define LDB_SYNTAX_DIRECTORY_STRING     "1.3.6.1.4.1.1466.115.121.1.15"
378
379 /**
380   LDAP attribute syntax for an integer
381
382   This is the well-known LDAP attribute syntax for an integer.
383
384   See <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>, Section 4.3.2 
385 */
386 #define LDB_SYNTAX_INTEGER              "1.3.6.1.4.1.1466.115.121.1.27"
387
388 /**
389   LDAP attribute syntax for an octet string
390
391   This is the well-known LDAP attribute syntax for an octet string.
392
393   See <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>, Section 4.3.2 
394 */
395 #define LDB_SYNTAX_OCTET_STRING         "1.3.6.1.4.1.1466.115.121.1.40"
396
397 /**
398   LDAP attribute syntax for UTC time.
399
400   This is the well-known LDAP attribute syntax for a UTC time.
401
402   See <a href="http://www.ietf.org/rfc/rfc2252.txt">RFC 2252</a>, Section 4.3.2 
403 */
404 #define LDB_SYNTAX_UTC_TIME             "1.3.6.1.4.1.1466.115.121.1.53"
405
406 #define LDB_SYNTAX_OBJECTCLASS          "LDB_SYNTAX_OBJECTCLASS"
407
408 /* sorting helpers */
409 typedef int (*ldb_qsort_cmp_fn_t) (void *v1, void *v2, void *opaque);
410
411 /**
412    OID for the paged results control. This control is included in the
413    searchRequest and searchResultDone messages as part of the controls
414    field of the LDAPMessage, as defined in Section 4.1.12 of
415    LDAP v3. 
416
417    \sa <a href="http://www.ietf.org/rfc/rfc2696.txt">RFC 2696</a>.
418 */
419 #define LDB_CONTROL_PAGED_RESULTS_OID   "1.2.840.113556.1.4.319"
420
421 /**
422    OID for specifying the returned elements of the ntSecurityDescriptor
423
424    \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>
425 */
426 #define LDB_CONTROL_SD_FLAGS_OID        "1.2.840.113556.1.4.801"
427
428 /**
429    OID for specifying an advanced scope for the search (one partition)
430
431    \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>
432 */
433 #define LDB_CONTROL_DOMAIN_SCOPE_OID    "1.2.840.113556.1.4.1339"
434
435 /**
436    OID for specifying an advanced scope for a search
437
438    \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>
439 */
440 #define LDB_CONTROL_SEARCH_OPTIONS_OID  "1.2.840.113556.1.4.1340"
441
442 /**
443    OID for notification
444
445    \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>
446 */
447 #define LDB_CONTROL_NOTIFICATION_OID    "1.2.840.113556.1.4.528"
448
449 /**
450    OID for getting deleted objects
451
452    \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>
453 */
454 #define LDB_CONTROL_SHOW_DELETED_OID    "1.2.840.113556.1.4.417"
455
456 /**
457    OID for extended DN
458
459    \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>
460 */
461 #define LDB_CONTROL_EXTENDED_DN_OID     "1.2.840.113556.1.4.529"
462
463 /**
464    OID for LDAP server sort result extension.
465
466    This control is included in the searchRequest message as part of
467    the controls field of the LDAPMessage, as defined in Section 4.1.12
468    of LDAP v3. The controlType is set to
469    "1.2.840.113556.1.4.473". The criticality MAY be either TRUE or
470    FALSE (where absent is also equivalent to FALSE) at the client's
471    option.
472
473    \sa <a href="http://www.ietf.org/rfc/rfc2891.txt">RFC 2891</a>.
474 */
475 #define LDB_CONTROL_SERVER_SORT_OID     "1.2.840.113556.1.4.473"
476
477 /**
478    OID for LDAP server sort result response extension.
479
480    This control is included in the searchResultDone message as part of
481    the controls field of the LDAPMessage, as defined in Section 4.1.12 of
482    LDAP v3.
483
484    \sa <a href="http://www.ietf.org/rfc/rfc2891.txt">RFC 2891</a>.
485 */
486 #define LDB_CONTROL_SORT_RESP_OID       "1.2.840.113556.1.4.474"
487
488 /**
489    OID for LDAP Attribute Scoped Query extension.
490
491    This control is included in SearchRequest or SearchResponse
492    messages as part of the controls field of the LDAPMessage.
493 */
494 #define LDB_CONTROL_ASQ_OID             "1.2.840.113556.1.4.1504"
495
496 /**
497    OID for LDAP Directory Sync extension. 
498
499    This control is included in SearchRequest or SearchResponse
500    messages as part of the controls field of the LDAPMessage.
501 */
502 #define LDB_CONTROL_DIRSYNC_OID         "1.2.840.113556.1.4.841"
503
504
505 /**
506    OID for LDAP Virtual List View Request extension.
507
508    This control is included in SearchRequest messages
509    as part of the controls field of the LDAPMessage.
510 */
511 #define LDB_CONTROL_VLV_REQ_OID         "2.16.840.1.113730.3.4.9"
512
513 /**
514    OID for LDAP Virtual List View Response extension.
515
516    This control is included in SearchResponse messages
517    as part of the controls field of the LDAPMessage.
518 */
519 #define LDB_CONTROL_VLV_RESP_OID        "2.16.840.1.113730.3.4.10"
520
521 /**
522    OID to let modifies don't give an error when adding an existing
523    attribute with the same value or deleting an nonexisting one attribute
524
525    \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>
526 */
527 #define LDB_CONTROL_PERMISSIVE_MODIFY_OID       "1.2.840.113556.1.4.1413"
528
529 /**
530    OID for LDAP Extended Operation START_TLS.
531
532    This Extended operation is used to start a new TLS
533    channel on top of a clear text channel.
534 */
535 #define LDB_EXTENDED_START_TLS_OID      "1.3.6.1.4.1.1466.20037"
536
537 /**
538 */
539 #define LDB_EXTENDED_DYNAMIC_OID        "1.3.6.1.4.1.1466.101.119.1"
540
541 /**
542 */
543 #define LDB_EXTENDED_FAST_BIND_OID      "1.2.840.113556.1.4.1781"
544
545 struct ldb_sd_flags_control {
546         /*
547          * request the owner    0x00000001
548          * request the group    0x00000002
549          * request the DACL     0x00000004
550          * request the SACL     0x00000008
551          */
552         unsigned secinfo_flags;
553 };
554
555 /*
556  * DOMAIN_SCOPE         0x00000001
557  * this limits the search to one partition,
558  * and no referrals will be returned.
559  * (Note this doesn't limit the entries by there
560  *  objectSid belonging to a domain! Builtin and Foreign Sids
561  *  are still returned)
562  *
563  * PHANTOM_ROOT         0x00000002
564  * this search on the whole tree on a domain controller
565  * over multiple partitions without referrals.
566  * (This is the default behavior on the Global Catalog Port)
567  */
568
569 #define LDB_SEARCH_OPTION_DOMAIN_SCOPE 0x00000001
570 #define LDB_SEARCH_OPTION_PHANTOM_ROOT 0x00000002
571
572 struct ldb_search_options_control {
573         unsigned search_options;
574 };
575
576 struct ldb_paged_control {
577         int size;
578         int cookie_len;
579         char *cookie;
580 };
581
582 struct ldb_extended_dn_control {
583         int type;
584 };
585
586 struct ldb_server_sort_control {
587         char *attributeName;
588         char *orderingRule;
589         int reverse;
590 };
591
592 struct ldb_sort_resp_control {
593         int result;
594         char *attr_desc;
595 };
596
597 struct ldb_asq_control {
598         int request;
599         char *source_attribute;
600         int src_attr_len;
601         int result;
602 };
603
604 struct ldb_dirsync_control {
605         int flags;
606         int max_attributes;
607         int cookie_len;
608         char *cookie;
609 };
610
611 struct ldb_vlv_req_control {
612         int beforeCount;
613         int afterCount;
614         int type;
615         union {
616                 struct {
617                         int offset;
618                         int contentCount;
619                 } byOffset;
620                 struct {
621                         int value_len;
622                         char *value;
623                 } gtOrEq;
624         } match;
625         int ctxid_len;
626         char *contextId;
627 };
628
629 struct ldb_vlv_resp_control {
630         int targetPosition;
631         int contentCount;
632         int vlv_result;
633         int ctxid_len;
634         char *contextId;
635 };
636
637 struct ldb_control {
638         const char *oid;
639         int critical;
640         void *data;
641 };
642
643 enum ldb_request_type {
644         LDB_SEARCH,
645         LDB_ADD,
646         LDB_MODIFY,
647         LDB_DELETE,
648         LDB_RENAME,
649         LDB_EXTENDED,
650         LDB_SEQUENCE_NUMBER,
651         LDB_REQ_REGISTER_CONTROL,
652         LDB_REQ_REGISTER_PARTITION
653 };
654
655 enum ldb_reply_type {
656         LDB_REPLY_ENTRY,
657         LDB_REPLY_REFERRAL,
658         LDB_REPLY_EXTENDED,
659         LDB_REPLY_DONE
660 };
661
662 enum ldb_wait_type {
663         LDB_WAIT_ALL,
664         LDB_WAIT_NONE
665 };
666
667 enum ldb_state {
668         LDB_ASYNC_INIT,
669         LDB_ASYNC_PENDING,
670         LDB_ASYNC_DONE
671 };
672
673 struct ldb_extended {
674         const char *oid;
675         void *data; /* NULL or a valid talloc pointer! talloc_get_type() will be used on it */
676 };
677
678 struct ldb_result {
679         unsigned int count;
680         struct ldb_message **msgs;
681         char **refs;
682         struct ldb_extended *extended;
683         struct ldb_control **controls;
684 };
685
686 struct ldb_reply {
687         enum ldb_reply_type type;
688         struct ldb_message *message;
689         struct ldb_extended *response;
690         char *referral;
691         struct ldb_control **controls;
692 };
693
694 struct ldb_handle {
695         int status;
696         enum ldb_state state;
697         void *private_data;
698         struct ldb_module *module;
699 };
700
701 struct ldb_search {
702         struct ldb_dn *base;
703         enum ldb_scope scope;
704         const struct ldb_parse_tree *tree;
705         const char * const *attrs;
706         struct ldb_result *res;
707 };
708
709 struct ldb_add {
710         const struct ldb_message *message;
711 };
712
713 struct ldb_modify {
714         const struct ldb_message *message;
715 };
716
717 struct ldb_delete {
718         struct ldb_dn *dn;
719 };
720
721 struct ldb_rename {
722         struct ldb_dn *olddn;
723         struct ldb_dn *newdn;
724 };
725
726 struct ldb_register_control {
727         const char *oid;
728 };
729
730 struct ldb_register_partition {
731         struct ldb_dn *dn;
732 };
733
734 struct ldb_sequence_number {
735         enum ldb_sequence_type {
736                 LDB_SEQ_HIGHEST_SEQ,
737                 LDB_SEQ_HIGHEST_TIMESTAMP,
738                 LDB_SEQ_NEXT
739         } type;
740         uint64_t seq_num;
741         uint32_t flags;
742 };
743
744 typedef int (*ldb_request_callback_t)(struct ldb_context *, void *, struct ldb_reply *);
745 struct ldb_request {
746
747         enum ldb_request_type operation;
748
749         union {
750                 struct ldb_search search;
751                 struct ldb_add    add;
752                 struct ldb_modify mod;
753                 struct ldb_delete del;
754                 struct ldb_rename rename;
755                 struct ldb_extended extended;
756                 struct ldb_sequence_number seq_num;
757                 struct ldb_register_control reg_control;
758                 struct ldb_register_partition reg_partition;
759         } op;
760
761         struct ldb_control **controls;
762
763         void *context;
764         ldb_request_callback_t callback;
765
766         int timeout;
767         time_t starttime;
768         struct ldb_handle *handle;
769 };
770
771 int ldb_request(struct ldb_context *ldb, struct ldb_request *request);
772
773 int ldb_wait(struct ldb_handle *handle, enum ldb_wait_type type);
774
775 int ldb_set_timeout(struct ldb_context *ldb, struct ldb_request *req, int timeout);
776 int ldb_set_timeout_from_prev_req(struct ldb_context *ldb, struct ldb_request *oldreq, struct ldb_request *newreq);
777 void ldb_set_create_perms(struct ldb_context *ldb, unsigned int perms);
778
779 /**
780   Initialise ldbs' global information
781
782   This is required before any other LDB call
783
784   \return 0 if initialisation succeeded, -1 otherwise
785 */
786 int ldb_global_init(void);
787
788 /**
789   Initialise an ldb context
790
791   This is required before any other LDB call.
792
793   \param mem_ctx pointer to a talloc memory context. Pass NULL if there is
794   no suitable context available.
795
796   \return pointer to ldb_context that should be free'd (using talloc_free())
797   at the end of the program.
798 */
799 struct ldb_context *ldb_init(void *mem_ctx);
800
801 /**
802    Connect to a database.
803
804    This is typically called soon after ldb_init(), and is required prior to
805    any search or database modification operations.
806
807    The URL can be one of the following forms:
808     - tdb://path
809     - ldapi://path
810     - ldap://host
811     - sqlite://path
812
813    \param ldb the context associated with the database (from ldb_init())
814    \param url the URL of the database to connect to, as noted above
815    \param flags a combination of LDB_FLG_* to modify the connection behaviour
816    \param options backend specific options - passed uninterpreted to the backend
817
818    \return result code (LDB_SUCCESS on success, or a failure code)
819
820    \note It is an error to connect to a database that does not exist in readonly mode
821    (that is, with LDB_FLG_RDONLY). However in read-write mode, the database will be
822    created if it does not exist.
823 */
824 int ldb_connect(struct ldb_context *ldb, const char *url, unsigned int flags, const char *options[]);
825
826 /*
827   return an automatic basedn from the rootDomainNamingContext of the rootDSE
828   This value have been set in an opaque pointer at connection time
829 */
830 struct ldb_dn *ldb_get_root_basedn(struct ldb_context *ldb);
831
832 /*
833   return an automatic basedn from the configurationNamingContext of the rootDSE
834   This value have been set in an opaque pointer at connection time
835 */
836 struct ldb_dn *ldb_get_config_basedn(struct ldb_context *ldb);
837
838 /*
839   return an automatic basedn from the schemaNamingContext of the rootDSE
840   This value have been set in an opaque pointer at connection time
841 */
842 struct ldb_dn *ldb_get_schema_basedn(struct ldb_context *ldb);
843
844 /*
845   return an automatic baseDN from the defaultNamingContext of the rootDSE
846   This value have been set in an opaque pointer at connection time
847 */
848 struct ldb_dn *ldb_get_default_basedn(struct ldb_context *ldb);
849
850 /**
851   The default async search callback function 
852
853   \param ldb the context associated with the database (from ldb_init())
854   \param context the callback context (struct ldb_result *)
855   \param ares a single reply from the async core
856
857   \return result code (LDB_SUCCESS on success, or a failure code)
858
859   \note this function expects the context to always be an struct ldb_result pointer
860   AND a talloc context, this function will steal on the context each message
861   from the ares reply passed on by the async core so that in the end all the
862   messages will be in the context (ldb_result)  memory tree.
863   Freeing the passed context (ldb_result tree) will free all the resources
864   (the request need to be freed separately and the result doe not depend on the
865   request that can be freed as sson as the search request is finished)
866 */
867
868 int ldb_search_default_callback(struct ldb_context *ldb, void *context, struct ldb_reply *ares);
869
870 /**
871   Helper function to build a search request
872
873   \param ret_req the request structure is returned here (talloced on mem_ctx)
874   \param ldb the context associated with the database (from ldb_init())
875   \param mem_ctx a talloc emmory context (used as parent of ret_req)
876   \param base the Base Distinguished Name for the query (use ldb_dn_new() for an empty one)
877   \param scope the search scope for the query
878   \param expression the search expression to use for this query
879   \param attrs the search attributes for the query (pass NULL if none required)
880   \param controls an array of controls
881   \param context the callback function context
882   \param the callback function to handle the async replies
883
884   \return result code (LDB_SUCCESS on success, or a failure code)
885 */
886
887 int ldb_build_search_req(struct ldb_request **ret_req,
888                         struct ldb_context *ldb,
889                         void *mem_ctx,
890                         struct ldb_dn *base,
891                         enum ldb_scope scope,
892                         const char *expression,
893                         const char * const *attrs,
894                         struct ldb_control **controls,
895                         void *context,
896                         ldb_request_callback_t callback);
897
898 /**
899   Helper function to build an add request
900
901   \param ret_req the request structure is returned here (talloced on mem_ctx)
902   \param ldb the context associated with the database (from ldb_init())
903   \param mem_ctx a talloc emmory context (used as parent of ret_req)
904   \param message contains the entry to be added 
905   \param controls an array of controls
906   \param context the callback function context
907   \param the callback function to handle the async replies
908
909   \return result code (LDB_SUCCESS on success, or a failure code)
910 */
911
912 int ldb_build_add_req(struct ldb_request **ret_req,
913                         struct ldb_context *ldb,
914                         void *mem_ctx,
915                         const struct ldb_message *message,
916                         struct ldb_control **controls,
917                         void *context,
918                         ldb_request_callback_t callback);
919
920 /**
921   Helper function to build a modify request
922
923   \param ret_req the request structure is returned here (talloced on mem_ctx)
924   \param ldb the context associated with the database (from ldb_init())
925   \param mem_ctx a talloc emmory context (used as parent of ret_req)
926   \param message contains the entry to be modified
927   \param controls an array of controls
928   \param context the callback function context
929   \param the callback function to handle the async replies
930
931   \return result code (LDB_SUCCESS on success, or a failure code)
932 */
933
934 int ldb_build_mod_req(struct ldb_request **ret_req,
935                         struct ldb_context *ldb,
936                         void *mem_ctx,
937                         const struct ldb_message *message,
938                         struct ldb_control **controls,
939                         void *context,
940                         ldb_request_callback_t callback);
941
942 /**
943   Helper function to build a delete request
944
945   \param ret_req the request structure is returned here (talloced on mem_ctx)
946   \param ldb the context associated with the database (from ldb_init())
947   \param mem_ctx a talloc emmory context (used as parent of ret_req)
948   \param dn the DN to be deleted
949   \param controls an array of controls
950   \param context the callback function context
951   \param the callback function to handle the async replies
952
953   \return result code (LDB_SUCCESS on success, or a failure code)
954 */
955
956 int ldb_build_del_req(struct ldb_request **ret_req,
957                         struct ldb_context *ldb,
958                         void *mem_ctx,
959                         struct ldb_dn *dn,
960                         struct ldb_control **controls,
961                         void *context,
962                         ldb_request_callback_t callback);
963
964 /**
965   Helper function to build a rename request
966
967   \param ret_req the request structure is returned here (talloced on mem_ctx)
968   \param ldb the context associated with the database (from ldb_init())
969   \param mem_ctx a talloc emmory context (used as parent of ret_req)
970   \param olddn the old DN
971   \param newdn the new DN
972   \param controls an array of controls
973   \param context the callback function context
974   \param the callback function to handle the async replies
975
976   \return result code (LDB_SUCCESS on success, or a failure code)
977 */
978
979 int ldb_build_rename_req(struct ldb_request **ret_req,
980                         struct ldb_context *ldb,
981                         void *mem_ctx,
982                         struct ldb_dn *olddn,
983                         struct ldb_dn *newdn,
984                         struct ldb_control **controls,
985                         void *context,
986                         ldb_request_callback_t callback);
987
988 /**
989   Add a ldb_control to a ldb_request
990
991   \param req the request struct where to add the control
992   \param oid the object identifier of the control as string
993   \param ciritical whether the control should be critical or not
994   \param data a talloc pointer to the control specific data
995
996   \return result code (LDB_SUCCESS on success, or a failure code)
997 */
998 int ldb_request_add_control(struct ldb_request *req, const char *oid, bool critical, void *data);
999
1000 /**
1001    check if a control with the specified "oid" exist and return it 
1002   \param req the request struct where to add the control
1003   \param oid the object identifier of the control as string
1004
1005   \return the control, NULL if not found 
1006 */
1007 struct ldb_control *ldb_request_get_control(struct ldb_request *req, const char *oid);
1008
1009 /**
1010   Search the database
1011
1012   This function searches the database, and returns 
1013   records that match an LDAP-like search expression
1014
1015   \param ldb the context associated with the database (from ldb_init())
1016   \param base the Base Distinguished Name for the query (use ldb_dn_new() for an empty one)
1017   \param scope the search scope for the query
1018   \param expression the search expression to use for this query
1019   \param attrs the search attributes for the query (pass NULL if none required)
1020   \param res the return result
1021
1022   \return result code (LDB_SUCCESS on success, or a failure code)
1023
1024   \note use talloc_free() to free the ldb_result returned
1025 */
1026 int ldb_search(struct ldb_context *ldb, 
1027                struct ldb_dn *base,
1028                enum ldb_scope scope,
1029                const char *expression,
1030                const char * const *attrs, struct ldb_result **res);
1031
1032 /*
1033  * a useful search function where you can easily define the expression and
1034  * that takes a memory context where results are allocated
1035 */
1036
1037 int ldb_search_exp_fmt(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
1038                        struct ldb_result **result, struct ldb_dn *base,
1039                        enum ldb_scope scope, const char * const *attrs,
1040                        const char *exp_fmt, ...) PRINTF_ATTRIBUTE(7,8);
1041
1042 /*
1043   like ldb_search() but takes a parse tree
1044 */
1045 int ldb_search_bytree(struct ldb_context *ldb, 
1046                       struct ldb_dn *base,
1047                       enum ldb_scope scope,
1048                       struct ldb_parse_tree *tree,
1049                       const char * const *attrs, struct ldb_result **res);
1050
1051 /**
1052   Add a record to the database.
1053
1054   This function adds a record to the database. This function will fail
1055   if a record with the specified class and key already exists in the
1056   database. 
1057
1058   \param ldb the context associated with the database (from
1059   ldb_init())
1060   \param message the message containing the record to add.
1061
1062   \return result code (LDB_SUCCESS if the record was added, otherwise
1063   a failure code)
1064 */
1065 int ldb_add(struct ldb_context *ldb, 
1066             const struct ldb_message *message);
1067
1068 /**
1069   Modify the specified attributes of a record
1070
1071   This function modifies a record that is in the database.
1072
1073   \param ldb the context associated with the database (from
1074   ldb_init())
1075   \param message the message containing the changes required.
1076
1077   \return result code (LDB_SUCCESS if the record was modified as
1078   requested, otherwise a failure code)
1079 */
1080 int ldb_modify(struct ldb_context *ldb, 
1081                const struct ldb_message *message);
1082
1083 /**
1084   Rename a record in the database
1085
1086   This function renames a record in the database.
1087
1088   \param ldb the context associated with the database (from
1089   ldb_init())
1090   \param olddn the DN for the record to be renamed.
1091   \param newdn the new DN 
1092
1093   \return result code (LDB_SUCCESS if the record was renamed as
1094   requested, otherwise a failure code)
1095 */
1096 int ldb_rename(struct ldb_context *ldb, struct ldb_dn *olddn, struct ldb_dn *newdn);
1097
1098 /**
1099   Delete a record from the database
1100
1101   This function deletes a record from the database.
1102
1103   \param ldb the context associated with the database (from
1104   ldb_init())
1105   \param dn the DN for the record to be deleted.
1106
1107   \return result code (LDB_SUCCESS if the record was deleted,
1108   otherwise a failure code)
1109 */
1110 int ldb_delete(struct ldb_context *ldb, struct ldb_dn *dn);
1111
1112 /**
1113   The default async extended operation callback function 
1114
1115   \param ldb the context associated with the database (from ldb_init())
1116   \param context the callback context (struct ldb_result *)
1117   \param ares a single reply from the async core
1118
1119   \return result code (LDB_SUCCESS on success, or a failure code)
1120
1121   \note this function expects the context to always be an struct ldb_result pointer
1122   AND a talloc context, this function will steal on the context each message
1123   from the ares reply passed on by the async core so that in the end all the
1124   messages will be in the context (ldb_result)  memory tree.
1125   Freeing the passed context (ldb_result tree) will free all the resources
1126   (the request need to be freed separately and the result doe not depend on the
1127   request that can be freed as sson as the search request is finished)
1128 */
1129 int ldb_extended_default_callback(struct ldb_context *ldb, void *context, struct ldb_reply *ares);
1130
1131 /**
1132   Helper function to build a extended request
1133
1134   \param ret_req the request structure is returned here (talloced on mem_ctx)
1135   \param ldb the context associated with the database (from ldb_init())
1136   \param mem_ctx a talloc emmory context (used as parent of ret_req)
1137   \param oid the OID of the extended operation.
1138   \param data a void pointer a the extended operation specific parameters,
1139   it needs to be NULL or a valid talloc pointer! talloc_get_type() will be used on it  
1140   \param controls an array of controls
1141   \param context the callback function context
1142   \param the callback function to handle the async replies
1143
1144   \return result code (LDB_SUCCESS on success, or a failure code)
1145 */
1146 int ldb_build_extended_req(struct ldb_request **ret_req,
1147                            struct ldb_context *ldb,
1148                            void *mem_ctx,
1149                            const char *oid,
1150                            void *data,/* NULL or a valid talloc pointer! talloc_get_type() will be used on it */
1151                            struct ldb_control **controls,
1152                            void *context,
1153                            ldb_request_callback_t callback);
1154
1155 /**
1156   call an extended operation
1157
1158   This function deletes a record from the database.
1159
1160   \param ldb the context associated with the database (from ldb_init())
1161   \param oid the OID of the extended operation.
1162   \param data a void pointer a the extended operation specific parameters,
1163   it needs to be NULL or a valid talloc pointer! talloc_get_type() will be used on it  
1164   \param res the result of the extended operation
1165
1166   \return result code (LDB_SUCCESS if the extended operation returned fine,
1167   otherwise a failure code)
1168 */
1169 int ldb_extended(struct ldb_context *ldb, 
1170                  const char *oid,
1171                  void *data,/* NULL or a valid talloc pointer! talloc_get_type() will be used on it */
1172                  struct ldb_result **res);
1173
1174 /**
1175   start a transaction
1176 */
1177 int ldb_transaction_start(struct ldb_context *ldb);
1178
1179 /**
1180   commit a transaction
1181 */
1182 int ldb_transaction_commit(struct ldb_context *ldb);
1183
1184 /**
1185   cancel a transaction
1186 */
1187 int ldb_transaction_cancel(struct ldb_context *ldb);
1188
1189
1190 /**
1191   return extended error information from the last call
1192 */
1193 const char *ldb_errstring(struct ldb_context *ldb);
1194
1195 /**
1196   return a string explaining what a ldb error constant meancs
1197 */
1198 const char *ldb_strerror(int ldb_err);
1199
1200 /**
1201   setup the default utf8 functions
1202   FIXME: these functions do not yet handle utf8
1203 */
1204 void ldb_set_utf8_default(struct ldb_context *ldb);
1205
1206 /**
1207    Casefold a string
1208
1209    \param ldb the ldb context
1210    \param mem_ctx the memory context to allocate the result string
1211    memory from. 
1212    \param s the string that is to be folded
1213    \return a copy of the string, converted to upper case
1214
1215    \note The default function is not yet UTF8 aware. Provide your own
1216          set of functions through ldb_set_utf8_fns()
1217 */
1218 char *ldb_casefold(struct ldb_context *ldb, void *mem_ctx, const char *s);
1219
1220 /**
1221    Check the attribute name is valid according to rfc2251
1222    \param s tthe string to check
1223
1224    \return 1 if the name is ok
1225 */
1226 int ldb_valid_attr_name(const char *s);
1227
1228 /*
1229   ldif manipulation functions
1230 */
1231 /**
1232    Write an LDIF message
1233
1234    This function writes an LDIF message using a caller supplied  write
1235    function.
1236
1237    \param ldb the ldb context (from ldb_init())
1238    \param fprintf_fn a function pointer for the write function. This must take
1239    a private data pointer, followed by a format string, and then a variable argument
1240    list. 
1241    \param private_data pointer that will be provided back to the write
1242    function. This is useful for maintaining state or context.
1243    \param ldif the message to write out
1244
1245    \return the total number of bytes written, or an error code as returned
1246    from the write function.
1247
1248    \sa ldb_ldif_write_file for a more convenient way to write to a
1249    file stream.
1250
1251    \sa ldb_ldif_read for the reader equivalent to this function.
1252 */
1253 int ldb_ldif_write(struct ldb_context *ldb,
1254                    int (*fprintf_fn)(void *, const char *, ...) PRINTF_ATTRIBUTE(2,3), 
1255                    void *private_data,
1256                    const struct ldb_ldif *ldif);
1257
1258 /**
1259    Clean up an LDIF message
1260
1261    This function cleans up a LDIF message read using ldb_ldif_read()
1262    or related functions (such as ldb_ldif_read_string() and
1263    ldb_ldif_read_file().
1264
1265    \param ldb the ldb context (from ldb_init())
1266    \param msg the message to clean up and free
1267
1268 */
1269 void ldb_ldif_read_free(struct ldb_context *ldb, struct ldb_ldif *msg);
1270
1271 /**
1272    Read an LDIF message
1273
1274    This function creates an LDIF message using a caller supplied read
1275    function. 
1276
1277    \param ldb the ldb context (from ldb_init())
1278    \param fgetc_fn a function pointer for the read function. This must
1279    take a private data pointer, and must return a pointer to an
1280    integer corresponding to the next byte read (or EOF if there is no
1281    more data to be read).
1282    \param private_data pointer that will be provided back to the read
1283    function. This is udeful for maintaining state or context.
1284
1285    \return the LDIF message that has been read in
1286
1287    \note You must free the LDIF message when no longer required, using
1288    ldb_ldif_read_free().
1289
1290    \sa ldb_ldif_read_file for a more convenient way to read from a
1291    file stream.
1292
1293    \sa ldb_ldif_read_string for a more convenient way to read from a
1294    string (char array).
1295
1296    \sa ldb_ldif_write for the writer equivalent to this function.
1297 */
1298 struct ldb_ldif *ldb_ldif_read(struct ldb_context *ldb, 
1299                                int (*fgetc_fn)(void *), void *private_data);
1300
1301 /**
1302    Read an LDIF message from a file
1303
1304    This function reads the next LDIF message from the contents of a
1305    file stream. If you want to get all of the LDIF messages, you will
1306    need to repeatedly call this function, until it returns NULL.
1307
1308    \param ldb the ldb context (from ldb_init())
1309    \param f the file stream to read from (typically from fdopen())
1310
1311    \sa ldb_ldif_read_string for an equivalent function that will read
1312    from a string (char array).
1313
1314    \sa ldb_ldif_write_file for the writer equivalent to this function.
1315
1316 */
1317 struct ldb_ldif *ldb_ldif_read_file(struct ldb_context *ldb, FILE *f);
1318
1319 /**
1320    Read an LDIF message from a string
1321
1322    This function reads the next LDIF message from the contents of a char
1323    array. If you want to get all of the LDIF messages, you will need
1324    to repeatedly call this function, until it returns NULL.
1325
1326    \param ldb the ldb context (from ldb_init())
1327    \param s pointer to the char array to read from
1328
1329    \sa ldb_ldif_read_file for an equivalent function that will read
1330    from a file stream.
1331
1332    \sa ldb_ldif_write for a more general (arbitrary read function)
1333    version of this function.
1334 */
1335 struct ldb_ldif *ldb_ldif_read_string(struct ldb_context *ldb, const char **s);
1336
1337 /**
1338    Write an LDIF message to a file
1339
1340    \param ldb the ldb context (from ldb_init())
1341    \param f the file stream to write to (typically from fdopen())
1342    \param msg the message to write out
1343
1344    \return the total number of bytes written, or a negative error code
1345
1346    \sa ldb_ldif_read_file for the reader equivalent to this function.
1347 */
1348 int ldb_ldif_write_file(struct ldb_context *ldb, FILE *f, const struct ldb_ldif *msg);
1349
1350 /**
1351    Base64 encode a buffer
1352
1353    \param mem_ctx the memory context that the result is allocated
1354    from. 
1355    \param buf pointer to the array that is to be encoded
1356    \param len the number of elements in the array to be encoded
1357
1358    \return pointer to an array containing the encoded data
1359
1360    \note The caller is responsible for freeing the result
1361 */
1362 char *ldb_base64_encode(void *mem_ctx, const char *buf, int len);
1363
1364 /**
1365    Base64 decode a buffer
1366
1367    This function decodes a base64 encoded string in place.
1368
1369    \param s the string to decode.
1370
1371    \return the length of the returned (decoded) string.
1372
1373    \note the string is null terminated, but the null terminator is not
1374    included in the length.
1375 */
1376 int ldb_base64_decode(char *s);
1377
1378 /* The following definitions come from lib/ldb/common/ldb_dn.c  */
1379
1380 struct ldb_dn *ldb_dn_new(void *mem_ctx, struct ldb_context *ldb, const char *dn);
1381 struct ldb_dn *ldb_dn_new_fmt(void *mem_ctx, struct ldb_context *ldb, const char *new_fmt, ...) PRINTF_ATTRIBUTE(3,4);
1382 bool ldb_dn_validate(struct ldb_dn *dn);
1383
1384 char *ldb_dn_escape_value(void *mem_ctx, struct ldb_val value);
1385 const char *ldb_dn_get_linearized(struct ldb_dn *dn);
1386 const char *ldb_dn_get_casefold(struct ldb_dn *dn);
1387 char *ldb_dn_alloc_linearized(void *mem_ctx, struct ldb_dn *dn);
1388 char *ldb_dn_alloc_casefold(void *mem_ctx, struct ldb_dn *dn);
1389
1390 int ldb_dn_compare_base(struct ldb_dn *base, struct ldb_dn *dn);
1391 int ldb_dn_compare(struct ldb_dn *edn0, struct ldb_dn *edn1);
1392
1393 bool ldb_dn_add_base(struct ldb_dn *dn, struct ldb_dn *base);
1394 bool ldb_dn_add_base_fmt(struct ldb_dn *dn, const char *base_fmt, ...) PRINTF_ATTRIBUTE(2,3);
1395 bool ldb_dn_add_child(struct ldb_dn *dn, struct ldb_dn *child);
1396 bool ldb_dn_add_child_fmt(struct ldb_dn *dn, const char *child_fmt, ...) PRINTF_ATTRIBUTE(2,3);
1397 bool ldb_dn_remove_base_components(struct ldb_dn *dn, unsigned int num);
1398 bool ldb_dn_remove_child_components(struct ldb_dn *dn, unsigned int num);
1399
1400 struct ldb_dn *ldb_dn_copy(void *mem_ctx, struct ldb_dn *dn);
1401 struct ldb_dn *ldb_dn_get_parent(void *mem_ctx, struct ldb_dn *dn);
1402 char *ldb_dn_canonical_string(void *mem_ctx, struct ldb_dn *dn);
1403 char *ldb_dn_canonical_ex_string(void *mem_ctx, struct ldb_dn *dn);
1404 int ldb_dn_get_comp_num(struct ldb_dn *dn);
1405 const char *ldb_dn_get_component_name(struct ldb_dn *dn, unsigned int num);
1406 const struct ldb_val *ldb_dn_get_component_val(struct ldb_dn *dn, unsigned int num);
1407 const char *ldb_dn_get_rdn_name(struct ldb_dn *dn);
1408 const struct ldb_val *ldb_dn_get_rdn_val(struct ldb_dn *dn);
1409 int ldb_dn_set_component(struct ldb_dn *dn, int num, const char *name, const struct ldb_val val);
1410
1411 bool ldb_dn_is_valid(struct ldb_dn *dn);
1412 bool ldb_dn_is_special(struct ldb_dn *dn);
1413 bool ldb_dn_check_special(struct ldb_dn *dn, const char *check);
1414 bool ldb_dn_is_null(struct ldb_dn *dn);
1415
1416
1417 /* useful functions for ldb_message structure manipulation */
1418 int ldb_dn_cmp(struct ldb_context *ldb, const char *dn1, const char *dn2);
1419
1420 /**
1421    Compare two attributes
1422
1423    This function compares to attribute names. Note that this is a
1424    case-insensitive comparison.
1425
1426    \param attr1 the first attribute name to compare
1427    \param attr2 the second attribute name to compare
1428
1429    \return 0 if the attribute names are the same, or only differ in
1430    case; non-zero if there are any differences
1431
1432   attribute names are restricted by rfc2251 so using
1433   strcasecmp and toupper here is ok.
1434   return 0 for match
1435 */
1436 #define ldb_attr_cmp(a, b) strcasecmp(a, b)
1437 char *ldb_attr_casefold(void *mem_ctx, const char *s);
1438 int ldb_attr_dn(const char *attr);
1439
1440 /**
1441    Create an empty message
1442
1443    \param mem_ctx the memory context to create in. You can pass NULL
1444    to get the top level context, however the ldb context (from
1445    ldb_init()) may be a better choice
1446 */
1447 struct ldb_message *ldb_msg_new(void *mem_ctx);
1448
1449 /**
1450    Find an element within an message
1451 */
1452 struct ldb_message_element *ldb_msg_find_element(const struct ldb_message *msg, 
1453                                                  const char *attr_name);
1454
1455 /**
1456    Compare two ldb_val values
1457
1458    \param v1 first ldb_val structure to be tested
1459    \param v2 second ldb_val structure to be tested
1460
1461    \return 1 for a match, 0 if there is any difference
1462 */
1463 int ldb_val_equal_exact(const struct ldb_val *v1, const struct ldb_val *v2);
1464
1465 /**
1466    find a value within an ldb_message_element
1467
1468    \param el the element to search
1469    \param val the value to search for
1470
1471    \note This search is case sensitive
1472 */
1473 struct ldb_val *ldb_msg_find_val(const struct ldb_message_element *el, 
1474                                  struct ldb_val *val);
1475
1476 /**
1477    add a new empty element to a ldb_message
1478 */
1479 int ldb_msg_add_empty(struct ldb_message *msg,
1480                 const char *attr_name,
1481                 int flags,
1482                 struct ldb_message_element **return_el);
1483
1484 /**
1485    add a element to a ldb_message
1486 */
1487 int ldb_msg_add(struct ldb_message *msg, 
1488                 const struct ldb_message_element *el, 
1489                 int flags);
1490 int ldb_msg_add_value(struct ldb_message *msg, 
1491                 const char *attr_name,
1492                 const struct ldb_val *val,
1493                 struct ldb_message_element **return_el);
1494 int ldb_msg_add_steal_value(struct ldb_message *msg, 
1495                       const char *attr_name,
1496                       struct ldb_val *val);
1497 int ldb_msg_add_steal_string(struct ldb_message *msg, 
1498                              const char *attr_name, char *str);
1499 int ldb_msg_add_string(struct ldb_message *msg, 
1500                        const char *attr_name, const char *str);
1501 int ldb_msg_add_fmt(struct ldb_message *msg, 
1502                     const char *attr_name, const char *fmt, ...) PRINTF_ATTRIBUTE(3,4);
1503
1504 /**
1505    compare two message elements - return 0 on match
1506 */
1507 int ldb_msg_element_compare(struct ldb_message_element *el1, 
1508                             struct ldb_message_element *el2);
1509
1510 /**
1511    Find elements in a message.
1512
1513    This function finds elements and converts to a specific type, with
1514    a give default value if not found. Assumes that elements are
1515    single valued.
1516 */
1517 const struct ldb_val *ldb_msg_find_ldb_val(const struct ldb_message *msg, const char *attr_name);
1518 int ldb_msg_find_attr_as_int(const struct ldb_message *msg, 
1519                              const char *attr_name,
1520                              int default_value);
1521 unsigned int ldb_msg_find_attr_as_uint(const struct ldb_message *msg, 
1522                                        const char *attr_name,
1523                                        unsigned int default_value);
1524 int64_t ldb_msg_find_attr_as_int64(const struct ldb_message *msg, 
1525                                    const char *attr_name,
1526                                    int64_t default_value);
1527 uint64_t ldb_msg_find_attr_as_uint64(const struct ldb_message *msg, 
1528                                      const char *attr_name,
1529                                      uint64_t default_value);
1530 double ldb_msg_find_attr_as_double(const struct ldb_message *msg, 
1531                                    const char *attr_name,
1532                                    double default_value);
1533 int ldb_msg_find_attr_as_bool(const struct ldb_message *msg, 
1534                               const char *attr_name,
1535                               int default_value);
1536 const char *ldb_msg_find_attr_as_string(const struct ldb_message *msg, 
1537                                         const char *attr_name,
1538                                         const char *default_value);
1539
1540 struct ldb_dn *ldb_msg_find_attr_as_dn(struct ldb_context *ldb,
1541                                        void *mem_ctx,
1542                                        const struct ldb_message *msg,
1543                                        const char *attr_name);
1544
1545 void ldb_msg_sort_elements(struct ldb_message *msg);
1546
1547 struct ldb_message *ldb_msg_copy_shallow(void *mem_ctx, 
1548                                          const struct ldb_message *msg);
1549 struct ldb_message *ldb_msg_copy(void *mem_ctx, 
1550                                  const struct ldb_message *msg);
1551
1552 struct ldb_message *ldb_msg_canonicalize(struct ldb_context *ldb, 
1553                                          const struct ldb_message *msg);
1554
1555
1556 struct ldb_message *ldb_msg_diff(struct ldb_context *ldb, 
1557                                  struct ldb_message *msg1,
1558                                  struct ldb_message *msg2);
1559
1560 int ldb_msg_check_string_attribute(const struct ldb_message *msg,
1561                                    const char *name,
1562                                    const char *value);
1563
1564 /**
1565    Integrity check an ldb_message
1566
1567    This function performs basic sanity / integrity checks on an
1568    ldb_message.
1569
1570    \param msg the message to check
1571
1572    \return LDB_SUCCESS if the message is OK, or a non-zero error code
1573    (one of LDB_ERR_INVALID_DN_SYNTAX, LDB_ERR_ENTRY_ALREADY_EXISTS or
1574    LDB_ERR_INVALID_ATTRIBUTE_SYNTAX) if there is a problem with a
1575    message.
1576 */
1577 int ldb_msg_sanity_check(struct ldb_context *ldb,
1578                          const struct ldb_message *msg);
1579
1580 /**
1581    Duplicate an ldb_val structure
1582
1583    This function copies an ldb value structure. 
1584
1585    \param mem_ctx the memory context that the duplicated value will be
1586    allocated from
1587    \param v the ldb_val to be duplicated.
1588
1589    \return the duplicated ldb_val structure.
1590 */
1591 struct ldb_val ldb_val_dup(void *mem_ctx, const struct ldb_val *v);
1592
1593 /**
1594   this allows the user to set a debug function for error reporting
1595 */
1596 int ldb_set_debug(struct ldb_context *ldb,
1597                   void (*debug)(void *context, enum ldb_debug_level level, 
1598                                 const char *fmt, va_list ap) PRINTF_ATTRIBUTE(3,0),
1599                   void *context);
1600
1601 /**
1602   this allows the user to set custom utf8 function for error reporting
1603 */
1604 void ldb_set_utf8_fns(struct ldb_context *ldb,
1605                         void *context,
1606                         char *(*casefold)(void *, void *, const char *));
1607
1608 /**
1609    this sets up debug to print messages on stderr
1610 */
1611 int ldb_set_debug_stderr(struct ldb_context *ldb);
1612
1613 /* control backend specific opaque values */
1614 int ldb_set_opaque(struct ldb_context *ldb, const char *name, void *value);
1615 void *ldb_get_opaque(struct ldb_context *ldb, const char *name);
1616
1617 const char **ldb_attr_list_copy(void *mem_ctx, const char * const *attrs);
1618 const char **ldb_attr_list_copy_add(void *mem_ctx, const char * const *attrs, const char *new_attr);
1619 int ldb_attr_in_list(const char * const *attrs, const char *attr);
1620
1621
1622 void ldb_parse_tree_attr_replace(struct ldb_parse_tree *tree, 
1623                                  const char *attr, 
1624                                  const char *replace);
1625
1626 int ldb_msg_rename_attr(struct ldb_message *msg, const char *attr, const char *replace);
1627 int ldb_msg_copy_attr(struct ldb_message *msg, const char *attr, const char *replace);
1628 void ldb_msg_remove_attr(struct ldb_message *msg, const char *attr);
1629
1630 /**
1631    Convert a time structure to a string
1632
1633    This function converts a time_t structure to an LDAP formatted
1634    GeneralizedTime string.
1635                 
1636    \param mem_ctx the memory context to allocate the return string in
1637    \param t the time structure to convert
1638
1639    \return the formatted string, or NULL if the time structure could
1640    not be converted
1641 */
1642 char *ldb_timestring(void *mem_ctx, time_t t);
1643
1644 /**
1645    Convert a string to a time structure
1646
1647    This function converts an LDAP formatted GeneralizedTime string
1648    to a time_t structure.
1649
1650    \param s the string to convert
1651
1652    \return the time structure, or 0 if the string cannot be converted
1653 */
1654 time_t ldb_string_to_time(const char *s);
1655
1656 /**
1657    Convert a time structure to a string
1658
1659    This function converts a time_t structure to an LDAP formatted
1660    UTCTime string.
1661                 
1662    \param mem_ctx the memory context to allocate the return string in
1663    \param t the time structure to convert
1664
1665    \return the formatted string, or NULL if the time structure could
1666    not be converted
1667 */
1668 char *ldb_timestring_utc(void *mem_ctx, time_t t);
1669
1670 /**
1671    Convert a string to a time structure
1672
1673    This function converts an LDAP formatted UTCTime string
1674    to a time_t structure.
1675
1676    \param s the string to convert
1677
1678    \return the time structure, or 0 if the string cannot be converted
1679 */
1680 time_t ldb_string_utc_to_time(const char *s);
1681
1682
1683 void ldb_qsort (void *const pbase, size_t total_elems, size_t size, void *opaque, ldb_qsort_cmp_fn_t cmp);
1684
1685
1686 /**
1687    Convert an array of string represention of a control into an array of ldb_control structures 
1688    
1689    \param ldb LDB context
1690    \param mem_ctx TALLOC context to return result on, and to allocate error_string on
1691    \param control_strings Array of string-formatted controls
1692
1693    \return array of ldb_control elements
1694 */
1695 struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, void *mem_ctx, const char **control_strings);
1696
1697 #endif