r25068: Older samba3 DCs will return DCERPC_FAULT_OP_RNG_ERROR for every opcode on the
[Samba.git] / source / lib / ldb / examples / ldbreader.c
blob207c6c3d4242f871cd3c671fc632647734644f6d
1 /*
2 example code for the ldb database library
4 Copyright (C) Brad Hards (bradh@frogmouth.net) 2005-2006
6 ** NOTE! The following LGPL license applies to the ldb
7 ** library. This does NOT imply that all of Samba is released
8 ** under the LGPL
10 This library is free software; you can redistribute it and/or
11 modify it under the terms of the GNU Lesser General Public
12 License as published by the Free Software Foundation; either
13 version 2 of the License, or (at your option) any later version.
15 This library is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
20 You should have received a copy of the GNU Lesser General Public
21 License along with this library; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin Street, Fifth Floor,
23 Boston, MA 02110-1301 USA
26 /** \example ldbreader.c
28 The code below shows a simple LDB application.
30 It lists / dumps the records in a LDB database to standard output.
34 #include "includes.h"
35 #include "ldb/include/ldb.h"
36 #include "ldb/include/ldb_errors.h"
39 ldb_ldif_write takes a function pointer to a custom output
40 function. This version is about as simple as the output function can
41 be. In a more complex example, you'd likely be doing something with
42 the private data function (e.g. holding a file handle).
44 static int vprintf_fn(void *private_data, const char *fmt, ...)
46 int retval;
47 va_list ap;
49 va_start(ap, fmt);
50 /* We just write to standard output */
51 retval = vprintf(fmt, ap);
52 va_end(ap);
53 /* Note that the function should return the number of
54 bytes written, or a negative error code */
55 return retval;
58 int main(int argc, const char **argv)
60 struct ldb_context *ldb;
61 const char *expression = "(dn=*)";
62 struct ldb_result *resultMsg;
63 int i;
66 This is the always the first thing you want to do in an LDB
67 application - initialise up the context structure.
69 Note that you can use the context structure as a parent
70 for talloc allocations as well
72 ldb = ldb_init(NULL);
75 We now open the database. In this example we just hard code the connection path.
77 Also note that the database is being opened read-only. This means that the
78 call will fail unless the database already exists.
80 if (LDB_SUCCESS != ldb_connect(ldb, "tdb://tdbtest.ldb", LDB_FLG_RDONLY, NULL) ){
81 printf("Problem on connection\n");
82 exit(-1);
86 At this stage we have an open database, and can start using it. It is opened
87 read-only, so a query is possible.
89 We construct a search that just returns all the (sensible) contents. You can do
90 quite fine grained results with the LDAP search syntax, however it is a bit
91 confusing to start with. See RFC2254.
93 if (LDB_SUCCESS != ldb_search(ldb, NULL, LDB_SCOPE_DEFAULT,
94 expression, NULL, &resultMsg) ) {
95 printf("Problem in search\n");
96 exit(-1);
99 printf("%i records returned\n", resultMsg->count);
102 We can now iterate through the results, writing them out
103 (to standard output) with our custom output routine as defined
104 at the top of this file
106 for (i = 0; i < resultMsg->count; ++i) {
107 struct ldb_ldif ldifMsg;
109 printf("Message: %i\n", i+1);
111 ldifMsg.changetype = LDB_CHANGETYPE_NONE;
112 ldifMsg.msg = resultMsg->msgs[i];
113 ldb_ldif_write(ldb, vprintf_fn, NULL, &ldifMsg);
117 There are two objects to clean up - the result from the
118 ldb_search() query, and the original ldb context.
120 talloc_free(resultMsg);
122 talloc_free(ldb);
124 return 0;