Use dsgetdcname() to find a dc when unjoining in libnetjoin.
authorGünther Deschner <gd@samba.org>
Tue, 15 Jan 2008 09:58:27 +0000 (10:58 +0100)
committerGünther Deschner <gd@samba.org>
Tue, 15 Jan 2008 10:02:56 +0000 (11:02 +0100)
Guenther
(This used to be commit 1a5b72daa36073cc0604211248d869bf0d7546c6)

source3/libnet/libnet_join.c

index 19b3e58e00f1ad173c4c2209537406b2941d9e58..6c50d9c09b53936951af99dbe5a071be69de7126 100644 (file)
@@ -1250,6 +1250,29 @@ static WERROR libnet_DomainUnjoin(TALLOC_CTX *mem_ctx,
 {
        NTSTATUS status;
 
+       if (!r->in.dc_name) {
+               struct DS_DOMAIN_CONTROLLER_INFO *info;
+               status = dsgetdcname(mem_ctx,
+                                    NULL,
+                                    r->in.domain_name,
+                                    NULL,
+                                    NULL,
+                                    DS_DIRECTORY_SERVICE_REQUIRED |
+                                    DS_WRITABLE_REQUIRED |
+                                    DS_RETURN_DNS_NAME,
+                                    &info);
+               if (!NT_STATUS_IS_OK(status)) {
+                       libnet_unjoin_set_error_string(mem_ctx, r,
+                               "failed to find DC: %s",
+                               nt_errstr(status));
+                       return WERR_DOMAIN_CONTROLLER_NOT_FOUND;
+               }
+
+               r->in.dc_name = talloc_strdup(mem_ctx,
+                                             info->domain_controller_name);
+               W_ERROR_HAVE_NO_MEMORY(r->in.dc_name);
+       }
+
        status = libnet_join_unjoindomain_rpc(mem_ctx, r);
        if (!NT_STATUS_IS_OK(status)) {
                libnet_unjoin_set_error_string(mem_ctx, r,