Fix include paths to new location of libutil.
[bbaumbach/samba-autobuild/.git] / source4 / torture / ldap / schema.c
index 4da758cac465ae000e947ba4b438626abc3690a3..6184ad266d61596ad70ff2217f20f5908081c59b 100644 (file)
 #include "includes.h"
 #include "libcli/ldap/ldap_client.h"
 #include "lib/cmdline/popt_common.h"
-#include "db_wrap.h"
+#include "ldb_wrap.h"
 #include "lib/ldb/include/ldb.h"
 #include "lib/ldb/include/ldb_errors.h"
 #include "dsdb/samdb/samdb.h"
-#include "lib/util/dlinklist.h"
+#include "../lib/util/dlinklist.h"
 
 #include "torture/torture.h"
 #include "torture/ldap/proto.h"
@@ -41,15 +41,17 @@ struct test_rootDSE {
 };
 
 struct test_schema_ctx {
+       struct ldb_context *ldb;
+
        struct ldb_paged_control *ctrl;
        uint32_t count;
-       BOOL pending;
+       bool pending;
 
        int (*callback)(void *, struct ldb_context *ldb, struct ldb_message *);
        void *private_data;
 };
 
-static BOOL test_search_rootDSE(struct ldb_context *ldb, struct test_rootDSE *root)
+static bool test_search_rootDSE(struct ldb_context *ldb, struct test_rootDSE *root)
 {
        int ret;
        struct ldb_message *msg;
@@ -57,13 +59,13 @@ static BOOL test_search_rootDSE(struct ldb_context *ldb, struct test_rootDSE *ro
 
        d_printf("Testing RootDSE Search\n");
 
-       ret = ldb_search(ldb, ldb_dn_new(ldb, ldb, NULL), LDB_SCOPE_BASE, 
-                        NULL, NULL, &r);
+       ret = ldb_search(ldb, ldb, &r, ldb_dn_new(ldb, ldb, NULL),
+                        LDB_SCOPE_BASE, NULL, NULL);
        if (ret != LDB_SUCCESS) {
-               return False;
+               return false;
        } else if (r->count != 1) {
                talloc_free(r);
-               return False;
+               return false;
        }
 
        msg = r->msgs[0];
@@ -79,18 +81,27 @@ static BOOL test_search_rootDSE(struct ldb_context *ldb, struct test_rootDSE *ro
 
        talloc_free(r);
 
-       return True;
+       return true;
 }
 
-static int test_schema_search_callback(struct ldb_context *ldb, void *context, struct ldb_reply *ares)
+static int test_schema_search_callback(struct ldb_request *req, struct ldb_reply *ares)
 {
-       struct test_schema_ctx *actx = talloc_get_type(context, struct test_schema_ctx);
+       struct test_schema_ctx *actx;
        int ret = LDB_SUCCESS;
 
+       actx = talloc_get_type(req->context, struct test_schema_ctx);
+
+       if (!ares) {
+               return ldb_request_done(req, LDB_ERR_OPERATIONS_ERROR);
+       }
+       if (ares->error != LDB_SUCCESS) {
+               return ldb_request_done(req, ares->error);
+       }
+
        switch (ares->type) {
        case LDB_REPLY_ENTRY:
                actx->count++;
-               ret = actx->callback(actx->private_data, ldb, ares->message);
+               ret = actx->callback(actx->private_data, actx->ldb, ares->message);
                break;
 
        case LDB_REPLY_REFERRAL:
@@ -115,30 +126,31 @@ static int test_schema_search_callback(struct ldb_context *ldb, void *context, s
                        actx->ctrl->cookie_len = ctrl->cookie_len;
 
                        if (actx->ctrl->cookie_len > 0) {
-                               actx->pending = True;
+                               actx->pending = true;
                        }
                }
-               break;
-               
+               talloc_free(ares);
+               return ldb_request_done(req, LDB_SUCCESS);
+
        default:
                d_printf("%s: unknown Reply Type %u\n", __location__, ares->type);
-               return LDB_ERR_OTHER;
+               return ldb_request_done(req, LDB_ERR_OTHER);
        }
 
        if (talloc_free(ares) == -1) {
                d_printf("talloc_free failed\n");
                actx->pending = 0;
-               return LDB_ERR_OPERATIONS_ERROR;
+               return ldb_request_done(req, LDB_ERR_OPERATIONS_ERROR);
        }
 
        if (ret) {
-               return LDB_ERR_OPERATIONS_ERROR;
+               return ldb_request_done(req, LDB_ERR_OPERATIONS_ERROR);
        }
 
        return LDB_SUCCESS;
 }
 
-static BOOL test_create_schema_type(struct ldb_context *ldb, struct test_rootDSE *root,
+static bool test_create_schema_type(struct ldb_context *ldb, struct test_rootDSE *root,
                                    const char *filter,
                                    int (*callback)(void *, struct ldb_context *ldb, struct ldb_message *),
                                    void *private_data)
@@ -149,13 +161,15 @@ static BOOL test_create_schema_type(struct ldb_context *ldb, struct test_rootDSE
        int ret;
        struct test_schema_ctx *actx;
 
-       req = talloc(ldb, struct ldb_request);
-       actx = talloc(req, struct test_schema_ctx);
+       actx = talloc(ldb, struct test_schema_ctx);
+       actx->ldb = ldb;
+       actx->private_data = private_data;
+       actx->callback= callback;
 
-       ctrl = talloc_array(req, struct ldb_control *, 2);
+       ctrl = talloc_array(actx, struct ldb_control *, 2);
        ctrl[0] = talloc(ctrl, struct ldb_control);
        ctrl[0]->oid = LDB_CONTROL_PAGED_RESULTS_OID;
-       ctrl[0]->critical = True;
+       ctrl[0]->critical = true;
        control = talloc(ctrl[0], struct ldb_paged_control);
        control->size = 1000;
        control->cookie = NULL;
@@ -163,41 +177,39 @@ static BOOL test_create_schema_type(struct ldb_context *ldb, struct test_rootDSE
        ctrl[0]->data = control;
        ctrl[1] = NULL;
 
-       req->operation = LDB_SEARCH;
-       req->op.search.base = ldb_dn_new(req, ldb, root->schemadn);
-       req->op.search.scope = LDB_SCOPE_SUBTREE;
-       req->op.search.tree = ldb_parse_tree(req, filter);
-       if (req->op.search.tree == NULL) return -1;
-       req->op.search.attrs = NULL;
-       req->controls = ctrl;
-       req->context = actx;
-       req->callback = test_schema_search_callback;
-       ldb_set_timeout(ldb, req, 0);
-
-       actx->count             = 0;
-       actx->ctrl              = control;
-       actx->callback          = callback;
-       actx->private_data      = private_data;
+       ret = ldb_build_search_req(&req, ldb, actx,
+                                  ldb_dn_new(actx, ldb, root->schemadn),
+                                  LDB_SCOPE_SUBTREE,
+                                  filter, NULL,
+                                  ctrl,
+                                  actx, test_schema_search_callback,
+                                  NULL);
+
+       actx->ctrl = control;
+       actx->count = 0;
 again:
-       actx->pending           = False;
+       actx->pending           = false;
 
        ret = ldb_request(ldb, req);
        if (ret != LDB_SUCCESS) {
                d_printf("search failed - %s\n", ldb_errstring(ldb));
-               return False;
+               talloc_free(actx);
+               return false;
        }
 
        ret = ldb_wait(req->handle, LDB_WAIT_ALL);
                if (ret != LDB_SUCCESS) {
                d_printf("search error - %s\n", ldb_errstring(ldb));
-               return False;
+               talloc_free(actx);
+               return false;
        }
 
        if (actx->pending)
                goto again;
 
        d_printf("filter[%s] count[%u]\n", filter, actx->count);
-       return True;
+       talloc_free(actx);
+       return true;
 }
 
 static int test_add_attribute(void *ptr, struct ldb_context *ldb, struct ldb_message *msg)
@@ -245,9 +257,9 @@ failed:
        return LDB_ERR_OTHER;
 }
 
-static BOOL test_create_schema(struct ldb_context *ldb, struct test_rootDSE *root, struct dsdb_schema **_schema)
+static bool test_create_schema(struct ldb_context *ldb, struct test_rootDSE *root, struct dsdb_schema **_schema)
 {
-       BOOL ret = True;
+       bool ret = true;
        struct dsdb_schema *schema;
 
        schema = talloc_zero(ldb, struct dsdb_schema);
@@ -259,13 +271,13 @@ static BOOL test_create_schema(struct ldb_context *ldb, struct test_rootDSE *roo
        ret &= test_create_schema_type(ldb, root, "(objectClass=classSchema)",
                                       test_add_class, schema);
 
-       if (ret == True) {
+       if (ret == true) {
                *_schema = schema;
        }
        return ret;
 }
 
-static BOOL test_dump_not_replicated(struct ldb_context *ldb, struct test_rootDSE *root, struct dsdb_schema *schema)
+static bool test_dump_not_replicated(struct ldb_context *ldb, struct test_rootDSE *root, struct dsdb_schema *schema)
 {
        struct dsdb_attribute *a;
        uint32_t a_i = 1;
@@ -278,10 +290,10 @@ static BOOL test_dump_not_replicated(struct ldb_context *ldb, struct test_rootDS
                         a->lDAPDisplayName);
        }
 
-       return True;
+       return true;
 }
 
-static BOOL test_dump_partial(struct ldb_context *ldb, struct test_rootDSE *root, struct dsdb_schema *schema)
+static bool test_dump_partial(struct ldb_context *ldb, struct test_rootDSE *root, struct dsdb_schema *schema)
 {
        struct dsdb_attribute *a;
        uint32_t a_i = 1;
@@ -295,10 +307,10 @@ static BOOL test_dump_partial(struct ldb_context *ldb, struct test_rootDSE *root
                         a->lDAPDisplayName);
        }
 
-       return True;
+       return true;
 }
 
-static BOOL test_dump_contructed(struct ldb_context *ldb, struct test_rootDSE *root, struct dsdb_schema *schema)
+static bool test_dump_contructed(struct ldb_context *ldb, struct test_rootDSE *root, struct dsdb_schema *schema)
 {
        struct dsdb_attribute *a;
        uint32_t a_i = 1;
@@ -311,10 +323,10 @@ static BOOL test_dump_contructed(struct ldb_context *ldb, struct test_rootDSE *r
                         a->lDAPDisplayName);
        }
 
-       return True;
+       return true;
 }
 
-static BOOL test_dump_sorted_syntax(struct ldb_context *ldb, struct test_rootDSE *root, struct dsdb_schema *schema)
+static bool test_dump_sorted_syntax(struct ldb_context *ldb, struct test_rootDSE *root, struct dsdb_schema *schema)
 {
        struct dsdb_attribute *a;
        uint32_t a_i = 1;
@@ -350,7 +362,7 @@ static BOOL test_dump_sorted_syntax(struct ldb_context *ldb, struct test_rootDSE
 
                        om_hex = data_blob_hex_string(ldb, &a->oMObjectClass);
                        if (!om_hex) {
-                               return False;
+                               return false;
                        }
 
                        d_printf("attr[%4u]: %s %u '%s' '%s'\n", a_i++,
@@ -360,13 +372,13 @@ static BOOL test_dump_sorted_syntax(struct ldb_context *ldb, struct test_rootDSE
                }
        }
 
-       return True;
+       return true;
 }
 
-BOOL torture_ldap_schema(struct torture_context *torture)
+bool torture_ldap_schema(struct torture_context *torture)
 {
        struct ldb_context *ldb;
-       BOOL ret = True;
+       bool ret = true;
        const char *host = torture_setting_string(torture, "host", NULL);
        char *url;
        struct test_rootDSE rootDSE;
@@ -376,7 +388,7 @@ BOOL torture_ldap_schema(struct torture_context *torture)
 
        url = talloc_asprintf(torture, "ldap://%s/", host);
 
-       ldb = ldb_wrap_connect(torture, global_loadparm, url,
+       ldb = ldb_wrap_connect(torture, torture->ev, torture->lp_ctx, url,
                               NULL,
                               cmdline_credentials,
                               0, NULL);