[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Fri Jun 6 17:02:04 MDT 2014


The branch, master has been updated
       via  4633114 s3/s4: smbd, rpc, ldap, cldap, kdc services.
      from  7091755 selftest: Add support for tmate.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 463311422ca1caad2e228deb630e9d12e212fae1
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Jun 5 12:32:30 2014 -0700

    s3/s4: smbd, rpc, ldap, cldap, kdc services.
    
    Allow us to start if we bind to *either* :: or 0.0.0.0.
    
    Allows us to cope with systems configured as only IPv4
    or only IPv6.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-By: Amitay Isaacs <amitay at gmail.com>
    Reviewed-By: Alexander Bokovoy <ab at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Sat Jun  7 01:01:44 CEST 2014 on sn-devel-104

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

Summary of changes:
 source3/smbd/server.c               |   16 ++++++++++------
 source4/cldap_server/cldap_server.c |    8 +++++++-
 source4/dns_server/dns_server.c     |    9 ++++++++-
 source4/kdc/kdc.c                   |   12 ++++++++++--
 source4/ldap_server/ldap_server.c   |    8 +++++++-
 source4/rpc_server/dcerpc_server.c  |    8 +++++++-
 6 files changed, 49 insertions(+), 12 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index 298afb9..53d615e 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -862,12 +862,16 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
 					continue;
 				}
 
-				if (!smbd_open_one_socket(parent,
-							  ev_ctx,
-							  &ss,
-							  port)) {
-					return false;
-				}
+				/*
+				 * If we fail to open any sockets
+				 * in this loop the parent-sockets == NULL
+				 * case below will prevent us from starting.
+				 */
+
+				(void)smbd_open_one_socket(parent,
+						  ev_ctx,
+						  &ss,
+						  port);
 			}
 		}
 	}
diff --git a/source4/cldap_server/cldap_server.c b/source4/cldap_server/cldap_server.c
index d1efa39..682d591 100644
--- a/source4/cldap_server/cldap_server.c
+++ b/source4/cldap_server/cldap_server.c
@@ -153,13 +153,19 @@ static NTSTATUS cldapd_startup_interfaces(struct cldapd_server *cldapd, struct l
 	/* if we are allowing incoming packets from any address, then
 	   we need to bind to the wildcard address */
 	if (!lpcfg_bind_interfaces_only(lp_ctx)) {
+		int num_binds = 0;
 		char **wcard = iface_list_wildcard(cldapd);
 		NT_STATUS_HAVE_NO_MEMORY(wcard);
 		for (i=0; wcard[i]; i++) {
 			status = cldapd_add_socket(cldapd, lp_ctx, wcard[i]);
-			NT_STATUS_NOT_OK_RETURN(status);
+			if (NT_STATUS_IS_OK(status)) {
+				num_binds++;
+			}
 		}
 		talloc_free(wcard);
+		if (num_binds == 0) {
+			return NT_STATUS_INVALID_PARAMETER_MIX;
+		}
 	}
 
 	/* now we have to also listen on the specific interfaces,
diff --git a/source4/dns_server/dns_server.c b/source4/dns_server/dns_server.c
index 60ce27c..7ea70db 100644
--- a/source4/dns_server/dns_server.c
+++ b/source4/dns_server/dns_server.c
@@ -693,6 +693,7 @@ static NTSTATUS dns_startup_interfaces(struct dns_server *dns,
 			NT_STATUS_NOT_OK_RETURN(status);
 		}
 	} else {
+		int num_binds = 0;
 		char **wcard;
 		wcard = iface_list_wildcard(tmp_ctx);
 		if (wcard == NULL) {
@@ -702,7 +703,13 @@ static NTSTATUS dns_startup_interfaces(struct dns_server *dns,
 		for (i = 0; wcard[i] != NULL; i++) {
 			status = dns_add_socket(dns, model_ops, "dns", wcard[i],
 						DNS_SERVICE_PORT);
-			NT_STATUS_NOT_OK_RETURN(status);
+			if (NT_STATUS_IS_OK(status)) {
+				num_binds++;
+			}
+		}
+		if (num_binds == 0) {
+			talloc_free(tmp_ctx);
+			return NT_STATUS_INVALID_PARAMETER_MIX;
 		}
 	}
 
diff --git a/source4/kdc/kdc.c b/source4/kdc/kdc.c
index 4a16f7e..bb476e1 100644
--- a/source4/kdc/kdc.c
+++ b/source4/kdc/kdc.c
@@ -733,6 +733,7 @@ static NTSTATUS kdc_startup_interfaces(struct kdc_server *kdc, struct loadparm_c
 	/* if we are allowing incoming packets from any address, then
 	   we need to bind to the wildcard address */
 	if (!lpcfg_bind_interfaces_only(lp_ctx)) {
+		int num_binds = 0;
 		char **wcard = iface_list_wildcard(kdc);
 		NT_STATUS_HAVE_NO_MEMORY(wcard);
 		for (i=0; wcard[i]; i++) {
@@ -740,17 +741,24 @@ static NTSTATUS kdc_startup_interfaces(struct kdc_server *kdc, struct loadparm_c
 				status = kdc_add_socket(kdc, model_ops,
 							"kdc", wcard[i], kdc_port,
 							kdc_process, false);
-				NT_STATUS_NOT_OK_RETURN(status);
+				if (NT_STATUS_IS_OK(status)) {
+					num_binds++;
+				}
 			}
 
 			if (kpasswd_port) {
 				status = kdc_add_socket(kdc, model_ops,
 							"kpasswd", wcard[i], kpasswd_port,
 							kpasswdd_process, false);
-				NT_STATUS_NOT_OK_RETURN(status);
+				if (NT_STATUS_IS_OK(status)) {
+					num_binds++;
+				}
 			}
 		}
 		talloc_free(wcard);
+		if (num_binds == 0) {
+			return NT_STATUS_INVALID_PARAMETER_MIX;
+		}
 		done_wildcard = true;
 	}
 
diff --git a/source4/ldap_server/ldap_server.c b/source4/ldap_server/ldap_server.c
index 99595eb..d59668b 100644
--- a/source4/ldap_server/ldap_server.c
+++ b/source4/ldap_server/ldap_server.c
@@ -964,6 +964,7 @@ static void ldapsrv_task_init(struct task_server *task)
 	} else {
 		char **wcard;
 		int i;
+		int num_binds = 0;
 		wcard = iface_list_wildcard(task);
 		if (wcard == NULL) {
 			DEBUG(0,("No wildcard addresses available\n"));
@@ -971,9 +972,14 @@ static void ldapsrv_task_init(struct task_server *task)
 		}
 		for (i=0; wcard[i]; i++) {
 			status = add_socket(task, task->lp_ctx, model_ops, wcard[i], ldap_service);
-			if (!NT_STATUS_IS_OK(status)) goto failed;
+			if (NT_STATUS_IS_OK(status)) {
+				num_binds++;
+			}
 		}
 		talloc_free(wcard);
+		if (num_binds == 0) {
+			goto failed;
+		}
 	}
 
 	ldapi_path = lpcfg_private_path(ldap_service, task->lp_ctx, "ldapi");
diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c
index cf737c6..4d5e166 100644
--- a/source4/rpc_server/dcerpc_server.c
+++ b/source4/rpc_server/dcerpc_server.c
@@ -1829,13 +1829,19 @@ static NTSTATUS dcesrv_add_ep_tcp(struct dcesrv_context *dce_ctx,
 	} else {
 		char **wcard;
 		int i;
+		int num_binds = 0;
 		wcard = iface_list_wildcard(dce_ctx);
 		NT_STATUS_HAVE_NO_MEMORY(wcard);
 		for (i=0; wcard[i]; i++) {
 			status = add_socket_rpc_tcp_iface(dce_ctx, e, event_ctx, model_ops, wcard[i]);
-			NT_STATUS_NOT_OK_RETURN(status);
+			if (NT_STATUS_IS_OK(status)) {
+				num_binds++;
+			}
 		}
 		talloc_free(wcard);
+		if (num_binds == 0) {
+			return NT_STATUS_INVALID_PARAMETER_MIX;
+		}
 	}
 
 	return NT_STATUS_OK;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list