svn commit: samba r20045 - in branches/SAMBA_4_0/source/libnet: .

metze at samba.org metze at samba.org
Tue Dec 5 15:41:42 GMT 2006


Author: metze
Date: 2006-12-05 15:41:41 +0000 (Tue, 05 Dec 2006)
New Revision: 20045

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=20045

Log:
implement the drsuapi_DsRemoveDSServer() call

metze
Modified:
   branches/SAMBA_4_0/source/libnet/libnet_become_dc.c
   branches/SAMBA_4_0/source/libnet/libnet_unbecome_dc.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_become_dc.c
===================================================================
--- branches/SAMBA_4_0/source/libnet/libnet_become_dc.c	2006-12-05 14:41:13 UTC (rev 20044)
+++ branches/SAMBA_4_0/source/libnet/libnet_become_dc.c	2006-12-05 15:41:41 UTC (rev 20045)
@@ -712,7 +712,7 @@
 	msg = ldb_msg_new(s);
 	NT_STATUS_HAVE_NO_MEMORY(msg);
 
-	msg->dn = ldb_dn_new_fmt(msg, s->ldap1.ldb, "CN=not,CN=add,CN=%s,CN=Servers,CN=%s,CN=Sites,%s",
+	msg->dn = ldb_dn_new_fmt(msg, s->ldap1.ldb, "CN=%s,CN=Servers,CN=%s,CN=Sites,%s",
 				 s->dest_dsa.netbios_name,
 				 s->dest_dsa.site_name,
 				 s->forest.config_dn_str);
@@ -792,7 +792,7 @@
 	if (!composite_is_ok(c)) return;
 
 	c->status = becomeDC_ldap1_server_object_add(s);
-/* ignore for now...	if (!composite_is_ok(c)) return;*/
+	if (!composite_is_ok(c)) return;
 
 	becomeDC_connect_ldap2(s);
 }

Modified: branches/SAMBA_4_0/source/libnet/libnet_unbecome_dc.c
===================================================================
--- branches/SAMBA_4_0/source/libnet/libnet_unbecome_dc.c	2006-12-05 14:41:13 UTC (rev 20044)
+++ branches/SAMBA_4_0/source/libnet/libnet_unbecome_dc.c	2006-12-05 15:41:41 UTC (rev 20045)
@@ -50,6 +50,7 @@
 		struct drsuapi_DsBind bind_r;
 		struct GUID bind_guid;
 		struct policy_handle bind_handle;
+		struct drsuapi_DsRemoveDSServer rm_ds_srv_r;
 	} drsuapi;
 
 	struct {
@@ -191,6 +192,12 @@
 	if (!s->forest.config_dn_str) return NT_STATUS_INVALID_NETWORK_RESPONSE;
 	talloc_steal(s, s->forest.config_dn_str);
 
+	s->dest_dsa.server_dn_str = talloc_asprintf(s, "CN=%s,CN=Servers,CN=%s,CN=Sites,%s",
+						    s->dest_dsa.netbios_name,
+						    s->dest_dsa.site_name,
+				                    s->forest.config_dn_str);
+	NT_STATUS_HAVE_NO_MEMORY(s->dest_dsa.server_dn_str);
+
 	talloc_free(r);
 	return NT_STATUS_OK;
 }
@@ -420,13 +427,52 @@
 	unbecomeDC_drsuapi_remove_ds_server_send(s);
 }
 
+static void unbecomeDC_drsuapi_remove_ds_server_recv(struct rpc_request *req);
+
 static void unbecomeDC_drsuapi_remove_ds_server_send(struct libnet_UnbecomeDC_state *s)
 {
 	struct composite_context *c = s->creq;
+	struct rpc_request *req;
+	struct drsuapi_DsRemoveDSServer *r = &s->drsuapi.rm_ds_srv_r;
 
-	composite_error(c, NT_STATUS_NOT_IMPLEMENTED);
+	r->in.bind_handle	= &s->drsuapi.bind_handle;
+	r->in.level		= 1;
+	r->in.req.req1.server_dn= s->dest_dsa.server_dn_str;
+	r->in.req.req1.domain_dn= s->domain.dn_str;
+	r->in.req.req1.unknown	= 0x00000001;
+
+	req = dcerpc_drsuapi_DsRemoveDSServer_send(s->drsuapi.pipe, s, r);
+	composite_continue_rpc(c, req, unbecomeDC_drsuapi_remove_ds_server_recv, s);
 }
 
+static void unbecomeDC_drsuapi_remove_ds_server_recv(struct rpc_request *req)
+{
+	struct libnet_UnbecomeDC_state *s = talloc_get_type(req->async.private,
+					    struct libnet_UnbecomeDC_state);
+	struct composite_context *c = s->creq;
+	struct drsuapi_DsRemoveDSServer *r = &s->drsuapi.rm_ds_srv_r;
+
+	c->status = dcerpc_ndr_request_recv(req);
+	if (!composite_is_ok(c)) return;
+
+	if (!W_ERROR_IS_OK(r->out.result)) {
+		composite_error(c, werror_to_ntstatus(r->out.result));
+		return;
+	}
+
+	if (r->out.level != 1) {
+		composite_error(c, NT_STATUS_INVALID_NETWORK_RESPONSE);
+		return;
+	}
+		
+	if (!W_ERROR_IS_OK(r->out.res.res1.status)) {
+		composite_error(c, werror_to_ntstatus(r->out.res.res1.status));
+		return;
+	}
+
+	composite_done(c);
+}
+
 struct composite_context *libnet_UnbecomeDC_send(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, struct libnet_UnbecomeDC *r)
 {
 	struct composite_context *c;



More information about the samba-cvs mailing list