Author: brad Date: 2005-08-04 16:17:36 +0000 (Thu, 04 Aug 2005) New Revision: 9061
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9061 Log: [EMAIL PROTECTED]: j0j0 | 2005-08-03 21:01:02 -0600 Start using libnet_Join() for DC join. Modified: branches/SOC/SAMBA_4_0/ branches/SOC/SAMBA_4_0/source/torture/rpc/dssync.c Changeset: Property changes on: branches/SOC/SAMBA_4_0 ___________________________________________________________________ Name: svk:merge - 0c0555d6-39d7-0310-84fc-f1cc0bd64818:/branches/SAMBA_4_0:9033 d349723c-e9fc-0310-b8a8-fdedf1c27407:/local/SAMBA_4_0:5246 d349723c-e9fc-0310-b8a8-fdedf1c27407:/local/samba-SAMBA_4_0:5244 + 0c0555d6-39d7-0310-84fc-f1cc0bd64818:/branches/SAMBA_4_0:9033 d349723c-e9fc-0310-b8a8-fdedf1c27407:/local/SAMBA_4_0:5249 d349723c-e9fc-0310-b8a8-fdedf1c27407:/local/samba-SAMBA_4_0:5244 Modified: branches/SOC/SAMBA_4_0/source/torture/rpc/dssync.c =================================================================== --- branches/SOC/SAMBA_4_0/source/torture/rpc/dssync.c 2005-08-04 16:11:26 UTC (rev 9060) +++ branches/SOC/SAMBA_4_0/source/torture/rpc/dssync.c 2005-08-04 16:17:36 UTC (rev 9061) @@ -22,6 +22,7 @@ #include "includes.h" #include "lib/cmdline/popt_common.h" +#include "libnet/libnet.h" #include "librpc/gen_ndr/ndr_drsuapi.h" #include "librpc/gen_ndr/ndr_samr.h" #include "libcli/ldap/ldap.h" @@ -43,6 +44,7 @@ struct dcerpc_binding *drsuapi_binding; struct ldb_context *ldb_ctx; struct ldb_message *ldb_msg; + struct libnet_context *libnet_ctx; const char *ldap_url; const char *domain_dn; @@ -141,32 +143,23 @@ "dn: %s\n" "changetype: delete\n", ctx->new_dc.dc_info2.ntds_dn); - - ldb_req = ldb_ldif_read_string(ldb_ctx,&ldif); */ - /* -I'm pretty sure this delete fails because dcerpc_drsuapi_DsAddEntry Fails DCERPC_FAULT_NDR -in test_CompleteJoin(). - + /* + This delete fails because dcerpc_drsuapi_DsAddEntry Fails DCERPC_FAULT_NDR + in test_CompleteJoin(). + */ printf("test_destroy_context(): deleting ntds_dn %s.\n",ctx->new_dc.dc_info2.ntds_dn); rtn = ldb_delete(ctx->ldb_ctx,ctx->new_dc.dc_info2.ntds_dn); if (rtn != 0) { printf("test_destroy_context(): ldb_delete(ntds_dn) failed: %s.\n", ldb_errstring(ctx->ldb_ctx)); + /* I want ldb_delete(server_dn) to get called. + I should just change the ordering or + not have this return at all perhaps. return; + */ } - */ - - - /* req = ldap_ldif2msg(ctx, ldif); - req.messageid = ; - req->type = LDAP_TAG_DelRequest; - req->r.DelRequest.dn = ctx->new_dc.dc_info2.ntds_dn; - req.num_controls = ; - req.controls = ; - rtn = ldap_transaction(ctx->admin.ldap.conn, req); - */ } { @@ -177,7 +170,6 @@ "dn: %s\n" "changetype: delete\n", ctx->new_dc.dc_info2.server_dn); - ldb_req = ldb_ldif_read_string(ldb_ctx,&ldif); */ printf("test_destroy_context(): deleting server_dn %s.\n",ctx->new_dc.dc_info2.server_dn); @@ -312,7 +304,7 @@ ctx->schema_dn = talloc_asprintf(ctx, "CN=Schema,%s", ctx->config_dn); ctx->new_dc.dc_info2.server_dn = talloc_asprintf(ctx, -/* "CN=%s,CN=Servers,CN=Standardname-des-ersten-Standorts,CN=Sites,CN=Configuration,%s", */ + /*"CN=%s,CN=Servers,CN=Standardname-des-ersten-Standorts,CN=Sites,CN=Configuration,%s",*/ "CN=%s,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,%s", TEST_MACHINE_NAME, ctx->domain_dn); @@ -330,6 +322,8 @@ BOOL ret = True; int rtn; char *old_dn; + struct libnet_Join libnet_r; + rtn = ldb_connect(ctx->ldb_ctx,ctx->ldap_url,0,NULL); if (rtn != 0) { printf("test_CompleteJoin(): ldb_connect() failed: %s.\n", @@ -340,6 +334,8 @@ /* userAccountControl: 532480 0x82000 * UF_SERVER_TRUST_ACCOUNT|UF_TRUSTED_FOR_DELEGATION + */ + /* ldif = talloc_asprintf(ctx, "dn: %s\n" "changetype: modify\n" @@ -348,8 +344,6 @@ ctx->new_dc.dc_info2.computer_dn, UF_SERVER_TRUST_ACCOUNT|UF_TRUSTED_FOR_DELEGATION); */ -/* = UF_SERVER_TRUST_ACCOUNT|UF_TRUSTED_FOR_DELEGATION; */ - ctx->ldb_msg = ldb_msg_new(ctx); ldb_msg_add_fmt(ctx->ldb_ctx,ctx->ldb_msg,"userAccountControl","%u",UF_SERVER_TRUST_ACCOUNT|UF_TRUSTED_FOR_DELEGATION); ctx->ldb_msg->dn = ctx->new_dc.dc_info2.computer_dn; @@ -364,8 +358,6 @@ printf("ldb_modify() succeeded.\n"); ldb_msg_free(ctx->ldb_ctx,ctx->ldb_msg); - /* rtn = ldap_transaction(ctx->admin.ldap.conn, req); */ - /* add entry CN=<NETBIOSNAME>,CN=Servers * objectClass: server * systemFlags: 50000000 0x2FAF080 @@ -381,7 +373,6 @@ ctx->new_dc.dc_info2.server_dn, 50000000, ctx->new_dc.dc_info2.computer_dn); - ldb_req = ldb_ldif_read_string(ldb_ctx,&ldif); */ printf("dn: %s\nserverReference: %s.\n",ctx->new_dc.dc_info2.server_dn,ctx->new_dc.dc_info2.computer_dn); @@ -401,12 +392,11 @@ } printf("ldb_add() succeeded.\n"); ldb_msg_free(ctx->ldb_ctx,ctx->ldb_msg); - /* rtn = ldap_transaction(ctx->admin.ldap.conn, req); */ /* add entry CN=NTDS Settings * */ -/* + /* typedef [noprint] struct { drsuapi_DsReplicaObjectListItem *next_object; drsuapi_DsReplicaObject object; @@ -469,7 +459,8 @@ uint32 unknown1; drsuapi_DsReplicaAttributeCtr attribute_ctr; } drsuapi_DsReplicaObject; -*/ { + */ + { struct drsuapi_DsAddEntry r; struct drsuapi_DsReplicaObject *object; struct drsuapi_DsReplicaObjectIdentifier _identifier; @@ -716,7 +707,32 @@ i++; attribute_ctr->num_attributes = i; - + + + + printf("The libnet_Join struct has a domain_name element. I am going to assume it is my ldap base dn.\n"); + printf("That said, my ldap base dn is: %s.\n",ctx->domain_dn); + /* ctx->domain_dn is the ldap dn.*/ + libnet_r.in.domain_name = talloc_asprintf(ctx,"%s",ctx->domain_dn); + libnet_r.in.secure_channel_type = SEC_CHAN_BDC; + + printf("attempting a DC join with libnet_Join()\n"); + /* + we get the following error when libnet_Join gets reached, + probably because we haven't provisioned these ldb's! + Unable to open tdb '/usr/local/samba/private/secrets.ldb' + Failed to connect to '/usr/local/samba/private/secrets.ldb' + */ + status = libnet_Join(ctx->libnet_ctx,ctx,&libnet_r); + if (!NT_STATUS_IS_OK(status)) { + const char *errstr = nt_errstr(status); + if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) { + errstr = dcerpc_errstr(ctx, ctx->admin.drsuapi.pipe->last_fault_code); + } + printf("libnet_Join() failed - %s\n", errstr); + ret = False; + } + /* status = dcerpc_drsuapi_DsAddEntry(ctx->admin.drsuapi.pipe, ctx, &r); if (!NT_STATUS_IS_OK(status)) { const char *errstr = nt_errstr(status); @@ -729,11 +745,12 @@ printf("DsAddEntry failed - %s\n", win_errstr(r.out.result)); ret = False; } + */ } { #include <unistd.h> -/* int sec = 5000;*/ + /*int sec = 5000;*/ int sec = 10; printf("Sleep for %d secs\n", sec); sleep(sec); @@ -742,7 +759,7 @@ /* modrdn to OU=Domain Controllers,... */ -/* ldif = talloc_asprintf(ctx, + /*ldif = talloc_asprintf(ctx, "dn: %s\n" "changetype: modrdn\n" "newrdn: CN=%s\n" @@ -751,22 +768,8 @@ ctx->new_dc.dc_info2.computer_dn, TEST_MACHINE_NAME, ctx->domain_dn); - req = ldap_ldif2msg(ctx, ldif); - ldb_req = ldb_ldif_read_string(ldb_ctx,&ldif); - rtn = ldb_modify(ldb_ctx,ldb_req->msg); - if (rtn != 0) { - printf("test_CompleteJoin(): ldb_modify() failed: %s.\n", - ldb_errstring(ldb_ctx)); - return False; - } -*/ -/* rtn = ldap_transaction(ctx->admin.ldap.conn, req); */ + */ -/* - ctx->new_dc.dc_info2.computer_dn, - TEST_MACHINE_NAME, - ctx->domain_dn); -*/ old_dn = talloc_asprintf(ctx, "%s", ctx->new_dc.dc_info2.computer_dn); @@ -802,7 +805,7 @@ mem_ctx = talloc_init("torture_rpc_dssync"); ctx = test_create_context(mem_ctx); ctx->ldb_ctx = ldb_init(mem_ctx); - + ctx->libnet_ctx = libnet_context_init(mem_ctx); rtn = ldb_connect(ctx->ldb_ctx,ctx->ldap_url,0,NULL); printf("Connected to %s.\n",ctx->ldap_url);
