diff options
author | Andrew Bartlett <abartlet@samba.org> | 2009-11-11 12:56:55 +1100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2009-11-12 16:34:13 +1100 |
commit | 87e984f0bd893abd65cf36f74162efed0d4930ca (patch) | |
tree | ad2bc481fe041d5af06c0641d06f65ffee616519 /source4 | |
parent | 1012b806a7d54e8d442bd14573d9c00747a23f74 (diff) | |
download | samba-87e984f0bd893abd65cf36f74162efed0d4930ca.tar.gz samba-87e984f0bd893abd65cf36f74162efed0d4930ca.tar.bz2 samba-87e984f0bd893abd65cf36f74162efed0d4930ca.zip |
s4:torture Convert RPC-DSSYNC test to use LDB rather than raw LDAP
(This should make it easier to do more 'compare DRS with LDAP'
operations, as LDB is an easier interface to program.)
Andrew Bartlett
Diffstat (limited to 'source4')
-rw-r--r-- | source4/torture/rpc/dssync.c | 77 |
1 files changed, 28 insertions, 49 deletions
diff --git a/source4/torture/rpc/dssync.c b/source4/torture/rpc/dssync.c index 50cae5aab7..10717d683b 100644 --- a/source4/torture/rpc/dssync.c +++ b/source4/torture/rpc/dssync.c @@ -25,13 +25,12 @@ #include "librpc/gen_ndr/ndr_drsuapi_c.h" #include "librpc/gen_ndr/ndr_drsblobs.h" #include "libcli/cldap/cldap.h" -#include "libcli/ldap/ldap_client.h" #include "torture/torture.h" -#include "torture/ldap/proto.h" #include "../libcli/drsuapi/drsuapi.h" #include "auth/gensec/gensec.h" #include "param/param.h" #include "dsdb/samdb/samdb.h" +#include "lib/ldb_wrap.h" #include "torture/rpc/rpc.h" #include "torture/drs/proto.h" @@ -47,7 +46,7 @@ struct DsSyncBindInfo { }; struct DsSyncLDAPInfo { - struct ldap_connection *conn; + struct ldb_context *ldb; }; struct DsSyncTest { @@ -240,24 +239,16 @@ static bool _test_DsBind(struct torture_context *tctx, static bool test_LDAPBind(struct torture_context *tctx, struct DsSyncTest *ctx, struct cli_credentials *credentials, struct DsSyncLDAPInfo *l) { - NTSTATUS status; bool ret = true; - status = torture_ldap_connection(tctx, &l->conn, ctx->ldap_url); - if (!NT_STATUS_IS_OK(status)) { - printf("failed to connect to LDAP: %s\n", ctx->ldap_url); - return false; - } + l->ldb = ldb_wrap_connect(tctx, tctx->ev, tctx->lp_ctx, ctx->ldap_url, + NULL, + credentials, + 0); + torture_assert(tctx, l->ldb, "Failed to make LDB connection to target"); printf("connected to LDAP: %s\n", ctx->ldap_url); - status = torture_ldap_bind_sasl(l->conn, credentials, tctx->lp_ctx); - if (!NT_STATUS_IS_OK(status)) { - printf("failed to bind to LDAP:\n"); - return false; - } - printf("bound to LDAP.\n"); - return ret; } @@ -492,44 +483,32 @@ static void test_analyse_objects(struct torture_context *tctx, * Fetch LDAP attribute name and DN by supplied OID */ static bool _drs_ldap_attr_by_oid(struct torture_context *tctx, - struct DsSyncTest *ctx, - const char *oid, - const char **attr_dn, - const char **attr_name) + struct DsSyncTest *ctx, + const char *oid, + char **attr_name) { - NTSTATUS status; - const char *config_dn; - const char *expression; - struct ldap_message **res_msg; - struct ldap_SearchResEntry *search_res; + struct ldb_dn *config_dn; + struct ldb_result *res; TALLOC_CTX *tmp_ctx = NULL; const char *search_attrs[] = {"lDAPDisplayName", NULL}; + int ret; tmp_ctx = talloc_new(ctx); - config_dn = talloc_asprintf(tmp_ctx, "CN=Schema,CN=Configuration,%s", ctx->domain_dn); - expression = talloc_asprintf(tmp_ctx, "(attributeID=%s)", oid); - - status = ildap_search(ctx->admin.ldap.conn, - config_dn, LDAP_SEARCH_SCOPE_SUB, - expression, search_attrs, false, - NULL, NULL, &res_msg); - torture_assert_ntstatus_ok(tctx, status, "LDAP search request failed"); - torture_assert(tctx, - ildap_count_entries(ctx->admin.ldap.conn, res_msg) == 1, - talloc_asprintf(tmp_ctx, "Failed to find attribute with OID=%s", oid)); - - search_res = &res_msg[0]->r.SearchResultEntry; - torture_assert(tctx, search_res->num_attributes > 0, "No attributes returned!") - torture_assert(tctx, strequal(search_attrs[0], search_res->attributes[0].name), - "Requested attributes for attribute class not returned"); - - if (attr_dn) { - *attr_dn = search_res->dn; - } + config_dn = ldb_dn_new_fmt(tmp_ctx, ctx->admin.ldap.ldb, + "CN=Schema,CN=Configuration,%s", ctx->domain_dn); + ret = ldb_search(ctx->admin.ldap.ldb, tmp_ctx, &res, config_dn, + LDB_SCOPE_ONELEVEL, search_attrs, "(attributeID=%s)", oid); + + torture_assert_int_equal(tctx, + ret, LDB_SUCCESS, + "Failed to search for attribute"); + + torture_assert_int_equal(tctx, + res->count, 1, "Failed to find attribute for OID"); if (attr_name) { - *attr_name = (const char *)search_res->attributes[0].values[0].data; + *attr_name = talloc_strdup(ctx, ldb_msg_find_attr_as_string(res->msgs[0], "lDAPDisplayName", NULL)); } talloc_free(tmp_ctx); @@ -550,8 +529,7 @@ static bool _drs_util_verify_attids(struct torture_context *tctx, DEBUG(1,("drs_test_verify_attids:\n")); for (; cur; cur = cur->next_object) { - const char *attr_dn = NULL; - const char *attr_name = NULL; + char *attr_name = NULL; struct drsuapi_DsReplicaObject *obj = &cur->object; DEBUG(1,("%3s %-10s: %s\n", "", "object_dn", obj->identifier->dn)); @@ -566,13 +544,14 @@ static bool _drs_util_verify_attids(struct torture_context *tctx, return false; } - if (!_drs_ldap_attr_by_oid(tctx, ctx, oid, &attr_dn, &attr_name)) { + if (!_drs_ldap_attr_by_oid(tctx, ctx, oid, &attr_name)) { return false; } DEBUG(1,("%7s attr[%2d]: %-22s {map_idx=%2d; attid=0x%06x; ldap_name=%-26s; idl_name=%s}\n", "", i, oid, map_idx, attr->attid, attr_name, drs_util_DsAttributeId_to_string(attr->attid))); + talloc_free(attr_name); } } |