[SCM] Samba Shared Repository - branch v3-2-test updated - release-3-2-0pre2-947-g70b7b33

Günther Deschner gd at samba.org
Wed Apr 16 22:11:00 GMT 2008


The branch, v3-2-test has been updated
       via  70b7b331d9e2d915e6209fca5900f41fae4866fd (commit)
       via  b42304c299224238a0247e0e1561eb2ad3217b96 (commit)
       via  2fe416ffa5c7efd2e6a644e4c8bac756152881d9 (commit)
      from  518f4d4e6662138a2e71acc2296acedefc7c739a (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 70b7b331d9e2d915e6209fca5900f41fae4866fd
Author: Günther Deschner <gd at samba.org>
Date:   Thu Apr 17 00:06:00 2008 +0200

    net: Be more tolerant while joining.
    
    Guenther

commit b42304c299224238a0247e0e1561eb2ad3217b96
Author: Günther Deschner <gd at samba.org>
Date:   Wed Apr 16 23:59:43 2008 +0200

    NetrUnjoinDomain2: Honor registry config to try config changes.
    
    Guenther

commit 2fe416ffa5c7efd2e6a644e4c8bac756152881d9
Author: Günther Deschner <gd at samba.org>
Date:   Wed Apr 16 23:56:03 2008 +0200

    dsgetdcname: Fix discover_dc_dns.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source/libsmb/dsgetdcname.c       |   40 ++++++++++++++++++++++++-------------
 source/rpc_server/srv_wkssvc_nt.c |    1 +
 source/utils/net_ads.c            |   13 ++++++++---
 3 files changed, 36 insertions(+), 18 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/libsmb/dsgetdcname.c b/source/libsmb/dsgetdcname.c
index 7af4364..00841f0 100644
--- a/source/libsmb/dsgetdcname.c
+++ b/source/libsmb/dsgetdcname.c
@@ -418,6 +418,8 @@ static NTSTATUS discover_dc_dns(TALLOC_CTX *mem_ctx,
 	struct dns_rr_srv *dcs = NULL;
 	int numdcs = 0;
 	int numaddrs = 0;
+	struct ip_service_name *dclist = NULL;
+	int count = 0;
 
 	if ((!(flags & DS_DIRECTORY_SERVICE_REQUIRED)) &&
 	    (!(flags & DS_KDC_REQUIRED)) &&
@@ -460,9 +462,10 @@ static NTSTATUS discover_dc_dns(TALLOC_CTX *mem_ctx,
 		numaddrs += MAX(dcs[i].num_ips,1);
 	}
 
-	if ((*returned_dclist = TALLOC_ZERO_ARRAY(mem_ctx,
-						  struct ip_service_name,
-						  numaddrs)) == NULL) {
+	dclist = TALLOC_ZERO_ARRAY(mem_ctx,
+				   struct ip_service_name,
+				   numaddrs);
+	if (!dclist) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
@@ -471,15 +474,16 @@ static NTSTATUS discover_dc_dns(TALLOC_CTX *mem_ctx,
 	*return_count = 0;
 	i = 0;
 	j = 0;
-	while (i < numdcs && (*return_count<numaddrs)) {
 
-		struct ip_service_name *r = &(*returned_dclist)[*return_count];
+	while ((i < numdcs) && (count < numaddrs)) {
+
+		struct ip_service_name *r = &dclist[count];
 
 		r->port = dcs[i].port;
 		r->hostname = dcs[i].hostname;
 
 		if (!(flags & DS_IP_REQUIRED)) {
-			(*return_count)++;
+			count++;
 			continue;
 		}
 
@@ -511,13 +515,19 @@ static NTSTATUS discover_dc_dns(TALLOC_CTX *mem_ctx,
 		 * anything about the DC's   -- jerry */
 
 		if (!is_zero_addr(&r->ss)) {
-			(*return_count)++;
+			count++;
 			continue;
 		}
 	}
 
-	return (*return_count > 0) ? NT_STATUS_OK :
-				     NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
+	*returned_dclist = dclist;
+	*return_count = count;
+
+	if (count > 0) {
+		return NT_STATUS_OK;
+	}
+
+	return NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
 }
 
 /****************************************************************
@@ -590,7 +600,7 @@ static NTSTATUS make_domain_controller_info(TALLOC_CTX *mem_ctx,
 static NTSTATUS process_dc_dns(TALLOC_CTX *mem_ctx,
 			       const char *domain_name,
 			       uint32_t flags,
-			       struct ip_service_name **dclist,
+			       struct ip_service_name *dclist,
 			       int num_dcs,
 			       struct netr_DsRGetDCNameInfo **info)
 {
@@ -607,7 +617,9 @@ static NTSTATUS process_dc_dns(TALLOC_CTX *mem_ctx,
 
 		ZERO_STRUCT(r);
 
-		if ((ads_cldap_netlogon(dclist[i]->hostname,
+		DEBUG(10,("LDAP ping to %s\n", dclist[i].hostname));
+
+		if ((ads_cldap_netlogon(dclist[i].hostname,
 					domain_name, &r)) &&
 		    (check_cldap_reply_required_flags(r.flags, flags))) {
 			valid_dc = true;
@@ -645,7 +657,7 @@ static NTSTATUS process_dc_dns(TALLOC_CTX *mem_ctx,
 
 	if (flags & DS_IP_REQUIRED) {
 		char addr[INET6_ADDRSTRLEN];
-		print_sockaddr(addr, sizeof(addr), &dclist[i]->ss);
+		print_sockaddr(addr, sizeof(addr), &dclist[i].ss);
 		dc_address = talloc_asprintf(mem_ctx, "\\\\%s",
 						addr);
 		dc_address_type = DS_ADDRESS_TYPE_INET;
@@ -723,7 +735,7 @@ static NTSTATUS dsgetdcname_rediscover(TALLOC_CTX *mem_ctx,
 		NT_STATUS_NOT_OK_RETURN(status);
 
 		return process_dc_dns(mem_ctx, domain_name, flags,
-				      &dclist, num_dcs, info);
+				      dclist, num_dcs, info);
 	}
 
 	status = discover_dc_dns(mem_ctx, domain_name, domain_guid, flags,
@@ -731,7 +743,7 @@ static NTSTATUS dsgetdcname_rediscover(TALLOC_CTX *mem_ctx,
 
 	if (NT_STATUS_IS_OK(status) && num_dcs != 0) {
 
-		status = process_dc_dns(mem_ctx, domain_name, flags, &dclist,
+		status = process_dc_dns(mem_ctx, domain_name, flags, dclist,
 					num_dcs, info);
 		if (NT_STATUS_IS_OK(status)) {
 			return status;
diff --git a/source/rpc_server/srv_wkssvc_nt.c b/source/rpc_server/srv_wkssvc_nt.c
index 71f1960..3c006fd 100644
--- a/source/rpc_server/srv_wkssvc_nt.c
+++ b/source/rpc_server/srv_wkssvc_nt.c
@@ -406,6 +406,7 @@ WERROR _wkssvc_NetrUnjoinDomain2(pipes_struct *p,
 	u->in.admin_account	= admin_account;
 	u->in.admin_password	= cleartext_pwd;
 	u->in.debug		= true;
+	u->in.modify_config     = lp_config_backend_is_registry();
 
 	become_root();
 	werr = libnet_Unjoin(p->mem_ctx, u);
diff --git a/source/utils/net_ads.c b/source/utils/net_ads.c
index 88051ec..c8bfc26 100644
--- a/source/utils/net_ads.c
+++ b/source/utils/net_ads.c
@@ -1199,7 +1199,7 @@ int net_ads_join(int argc, const char **argv)
 
 	/* Check the short name of the domain */
 
-	if (!strequal(lp_workgroup(), r->out.netbios_domain_name)) {
+	if (!modify_config && !strequal(lp_workgroup(), r->out.netbios_domain_name)) {
 		d_printf("The workgroup in %s does not match the short\n", get_dyn_CONFIGFILE());
 		d_printf("domain name obtained from the server.\n");
 		d_printf("Using the name [%s] from the server.\n", r->out.netbios_domain_name);
@@ -1209,11 +1209,16 @@ int net_ads_join(int argc, const char **argv)
 
 	d_printf("Using short domain name -- %s\n", r->out.netbios_domain_name);
 
-	d_printf("Joined '%s' to realm '%s'\n", r->in.machine_name,
-		r->out.dns_domain_name);
+	if (r->out.dns_domain_name) {
+		d_printf("Joined '%s' to realm '%s'\n", r->in.machine_name,
+			r->out.dns_domain_name);
+	} else {
+		d_printf("Joined '%s' to domain '%s'\n", r->in.machine_name,
+			r->out.netbios_domain_name);
+	}
 
 #if defined(WITH_DNS_UPDATES)
-	{
+	if (r->out.domain_is_ad) {
 		/* We enter this block with user creds */
 		ADS_STRUCT *ads_dns = NULL;
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list