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

metze at samba.org metze at samba.org
Thu Dec 7 19:18:56 GMT 2006


Author: metze
Date: 2006-12-07 19:18:55 +0000 (Thu, 07 Dec 2006)
New Revision: 20068

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

Log:
handle DsAddEntry() errors

metze
Modified:
   branches/SAMBA_4_0/source/libnet/libnet_become_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-07 15:33:24 UTC (rev 20067)
+++ branches/SAMBA_4_0/source/libnet/libnet_become_dc.c	2006-12-07 19:18:55 UTC (rev 20068)
@@ -102,6 +102,7 @@
 		const char *computer_dn_str;
 		const char *server_dn_str;
 		const char *ntds_dn_str;
+		struct GUID ntds_guid;
 		struct GUID invocation_id;
 		uint32_t user_account_control;
 	} dest_dsa;
@@ -1404,6 +1405,57 @@
 		return;
 	}
 
+	if (r->out.level == 3) {
+		if (r->out.ctr.ctr3.count != 1) {
+			WERROR status;
+
+			if (r->out.ctr.ctr3.level != 1) {
+				composite_error(c, NT_STATUS_INVALID_NETWORK_RESPONSE);
+				return;
+			}
+
+			if (!r->out.ctr.ctr3.error) {
+				composite_error(c, NT_STATUS_INVALID_NETWORK_RESPONSE);
+				return;
+			}
+
+			status = r->out.ctr.ctr3.error->info1.status;
+
+			if (!r->out.ctr.ctr3.error->info1.info) {
+				composite_error(c, werror_to_ntstatus(status));
+				return;
+			}
+
+			/* see if we can get a more detailed error */
+			switch (r->out.ctr.ctr3.error->info1.level) {
+			case 1:
+				status = r->out.ctr.ctr3.error->info1.info->error1.status;
+				break;
+			case 4:
+			case 5:
+			case 6:
+			case 7:
+				status = r->out.ctr.ctr3.error->info1.info->errorX.status;
+				break;
+			}
+
+			composite_error(c, werror_to_ntstatus(status));
+			return;
+		}
+
+		s->dest_dsa.ntds_guid	= r->out.ctr.ctr3.objects[0].guid;
+	} else if (r->out.level == 2) {
+		if (r->out.ctr.ctr2.count != 1) {
+			composite_error(c, werror_to_ntstatus(r->out.ctr.ctr2.error.status));
+			return;
+		}
+
+		s->dest_dsa.ntds_guid	= r->out.ctr.ctr2.objects[0].guid;
+	} else {
+		composite_error(c, NT_STATUS_INVALID_NETWORK_RESPONSE);
+		return;
+	}
+
 	becomeDC_connect_ldap2(s);
 }
 



More information about the samba-cvs mailing list