[SCM] Samba Shared Repository - branch master updated

Volker Lendecke vlendec at samba.org
Mon Jan 11 14:26:02 UTC 2021


The branch, master has been updated
       via  08da3439edd librpc: Use GUID_buf_string in dcerpc_binding_string()
       via  912196f430b rpc_servers: Remove unused variables
       via  79a73b44844 rpc_servers: Fix crash with many interfaces
       via  ca967485528 rpc_server: Add dcesrv_create_endpoint_list_fd_listen_fds()
       via  9c9b0fd6160 rpc_server: Lift ph_listen_fd logic one level
       via  a00e3e8af3b rpc_server: Lift logic to fill in pf_listen_fd one level
       via  666fc24a902 rpc_server: Use dcesrv_open_ncacn_ip_tcp_sockets() in dcesrv_setup_ncacn_ip_tcp_sockets()
       via  276b9bc20aa rpc_server: Factor out dcesrv_open_ncacn_ip_tcp_sockets()
       via  2e5d246b3b0 lib: Add samba_sockaddr_[gs]et_port()
       via  4aa3ff574f2 lib: Move sockaddr_storage_to_samba_sockaddr() to lib/
      from  564b62a6f7c vfs_fruit: fix close for fake_fd

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


- Log -----------------------------------------------------------------
commit 08da3439eddf26bdeece1a4e3c729e4dfcbd5d5e
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Dec 31 10:11:04 2020 +0100

    librpc: Use GUID_buf_string in dcerpc_binding_string()
    
    Avoid a (small) memleak
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Samuel Cabrero <scabrero at samba.org>
    
    Autobuild-User(master): Volker Lendecke <vl at samba.org>
    Autobuild-Date(master): Mon Jan 11 14:25:04 UTC 2021 on sn-devel-184

commit 912196f430bff381bc0565966d95f5f46ec570c9
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jan 7 20:53:17 2021 +0100

    rpc_servers: Remove unused variables
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Samuel Cabrero <scabrero at samba.org>

commit 79a73b4484485092007edc0d025e5079dd9033db
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Dec 31 15:10:10 2020 +0100

    rpc_servers: Fix crash with many interfaces
    
    Previously, the lowlevel routines wrote into the pf_listen_fd arrays
    without checking its size.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Samuel Cabrero <scabrero at samba.org>

commit ca9674855284633f5d4a13ef8b79174054fdbfd3
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Dec 31 14:49:26 2020 +0100

    rpc_server: Add dcesrv_create_endpoint_list_fd_listen_fds()
    
    This encapsulates the loop in the three standalone rpc daemons walking
    the endpoints in a dcesrv_context.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Samuel Cabrero <scabrero at samba.org>

commit 9c9b0fd61605c67ecfa7ae63d062fa711d705a47
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Dec 31 10:47:03 2020 +0100

    rpc_server: Lift ph_listen_fd logic one level
    
    Push filling in struct pf_listen_fd into the daemons using
    dcesrv_create_endpoint_sockets().
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Samuel Cabrero <scabrero at samba.org>

commit a00e3e8af3bd8916cca764cc8d16b0b37c637b7d
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Dec 31 09:54:15 2020 +0100

    rpc_server: Lift logic to fill in pf_listen_fd one level
    
    dcesrv_create_ncacn_ip_tcp_sockets() now returns a struct of fd's
    instead of filling a preallocated array: Its only function beyond
    dcesrv_open_ncacn_ip_tcp_sockets() is thus gone.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Samuel Cabrero <scabrero at samba.org>

commit 666fc24a90251138b2ce9a50c2452fd25c057d72
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Dec 31 09:47:18 2020 +0100

    rpc_server: Use dcesrv_open_ncacn_ip_tcp_sockets() in dcesrv_setup_ncacn_ip_tcp_sockets()
    
    Avoid duplication of logic with "lp_interfaces_only()"
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Samuel Cabrero <scabrero at samba.org>

commit 276b9bc20aaa7e37c2a2faef8a50adc1bd5f3cf2
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Dec 31 09:21:25 2020 +0100

    rpc_server: Factor out dcesrv_open_ncacn_ip_tcp_sockets()
    
    The main change is to return an allocated array of file descriptors in
    dcesrv_open_ncacn_ip_tcp_sockets() instead of filling a preallocated
    array of pf_listen_fd structures.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>

commit 2e5d246b3b0ec0c5e4ec3cf4b833fc820f3cfcca
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Dec 30 22:50:36 2020 +0100

    lib: Add samba_sockaddr_[gs]et_port()
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Samuel Cabrero <scabrero at samba.org>

commit 4aa3ff574f209d0fbd1e725cf06af03887db9fe0
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Dec 30 22:43:07 2020 +0100

    lib: Move sockaddr_storage_to_samba_sockaddr() to lib/
    
    This can be useful outside of source3/libsmb/namequery.c as Samba
    moves towards samba_sockaddr.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Samuel Cabrero <scabrero at samba.org>

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

Summary of changes:
 lib/util/util_net.c                    |  56 ++++++++
 lib/util/util_net.h                    |   5 +
 librpc/rpc/binding.c                   |   6 +-
 source3/libsmb/namequery.c             |  26 ----
 source3/libsmb/namequery.h             |   2 -
 source3/printing/spoolssd.c            |  51 +++-----
 source3/rpc_server/lsasd.c             |  51 +++-----
 source3/rpc_server/mdssd.c             |  51 +++-----
 source3/rpc_server/rpc_server.c        |  32 +----
 source3/rpc_server/rpc_server.h        |   2 +-
 source3/rpc_server/rpc_service_setup.c | 125 ++++++++++++++----
 source3/rpc_server/rpc_service_setup.h |  13 +-
 source3/rpc_server/rpc_sock_helper.c   | 230 +++++++++++++++------------------
 source3/rpc_server/rpc_sock_helper.h   |   8 +-
 14 files changed, 355 insertions(+), 303 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/util/util_net.c b/lib/util/util_net.c
index b9b0621f45f..f97d4d43f3c 100644
--- a/lib/util/util_net.c
+++ b/lib/util/util_net.c
@@ -1065,3 +1065,59 @@ void set_socket_options(int fd, const char *options)
 	TALLOC_FREE(ctx);
 	print_socket_options(fd);
 }
+
+/*
+ * Utility function that copes only with AF_INET and AF_INET6
+ * as that's all we're going to get out of DNS / NetBIOS / WINS
+ * name resolution functions.
+ */
+
+bool sockaddr_storage_to_samba_sockaddr(
+	struct samba_sockaddr *sa, const struct sockaddr_storage *ss)
+{
+	sa->u.ss = *ss;
+
+	switch (ss->ss_family) {
+	case AF_INET:
+		sa->sa_socklen = sizeof(struct sockaddr_in);
+		break;
+#ifdef HAVE_IPV6
+	case AF_INET6:
+		sa->sa_socklen = sizeof(struct sockaddr_in6);
+		break;
+#endif
+	default:
+		return false;
+	}
+	return true;
+}
+
+bool samba_sockaddr_set_port(struct samba_sockaddr *sa, uint16_t port)
+{
+	if (sa->u.sa.sa_family == AF_INET) {
+		sa->u.in.sin_port = port;
+		return true;
+	}
+#ifdef HAVE_IPV6
+	if (sa->u.sa.sa_family == AF_INET6) {
+		sa->u.in6.sin6_port = port;
+		return true;
+	}
+#endif
+	return false;
+}
+
+bool samba_sockaddr_get_port(const struct samba_sockaddr *sa, uint16_t *port)
+{
+	if (sa->u.sa.sa_family == AF_INET) {
+		*port = sa->u.in.sin_port;
+		return true;
+	}
+#ifdef HAVE_IPV6
+	if (sa->u.sa.sa_family == AF_INET6) {
+		*port = sa->u.in6.sin6_port;
+		return true;
+	}
+#endif
+	return false;
+}
diff --git a/lib/util/util_net.h b/lib/util/util_net.h
index 80a7e08b7e8..c95d90907fa 100644
--- a/lib/util/util_net.h
+++ b/lib/util/util_net.h
@@ -123,4 +123,9 @@ char *print_canonical_sockaddr(TALLOC_CTX *ctx,
 
 void set_socket_options(int fd, const char *options);
 
+bool sockaddr_storage_to_samba_sockaddr(
+	struct samba_sockaddr *sa, const struct sockaddr_storage *ss);
+bool samba_sockaddr_set_port(struct samba_sockaddr *sa, uint16_t port);
+bool samba_sockaddr_get_port(const struct samba_sockaddr *sa, uint16_t *port);
+
 #endif /* _SAMBA_UTIL_NET_H_ */
diff --git a/librpc/rpc/binding.c b/librpc/rpc/binding.c
index 75246dfd538..0a78be5bf16 100644
--- a/librpc/rpc/binding.c
+++ b/librpc/rpc/binding.c
@@ -227,9 +227,11 @@ _PUBLIC_ char *dcerpc_binding_string(TALLOC_CTX *mem_ctx, const struct dcerpc_bi
 	}
 
 	if (!GUID_all_zero(&b->object)) {
+		struct GUID_txt_buf buf;
+
 		o = s;
-		s = talloc_asprintf_append_buffer(s, "%s@",
-				    GUID_string(mem_ctx, &b->object));
+		s = talloc_asprintf_append_buffer(
+			s, "%s@", GUID_buf_string(&b->object, &buf));
 		if (s == NULL) {
 			talloc_free(o);
 			return NULL;
diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c
index a385ac7cab2..047fff22ad9 100644
--- a/source3/libsmb/namequery.c
+++ b/source3/libsmb/namequery.c
@@ -39,32 +39,6 @@
 /* nmbd.c sets this to True. */
 bool global_in_nmbd = False;
 
-/*
- * Utility function that copes only with AF_INET and AF_INET6
- * as that's all we're going to get out of DNS / NetBIOS / WINS
- * name resolution functions.
- */
-
-bool sockaddr_storage_to_samba_sockaddr(struct samba_sockaddr *sa,
-					const struct sockaddr_storage *ss)
-{
-	sa->u.ss = *ss;
-
-	switch (ss->ss_family) {
-	case AF_INET:
-		sa->sa_socklen = sizeof(struct sockaddr_in);
-		break;
-#ifdef HAVE_IPV6
-	case AF_INET6:
-		sa->sa_socklen = sizeof(struct sockaddr_in6);
-		break;
-#endif
-	default:
-		return false;
-	}
-	return true;
-}
-
 /*
  * Utility function to convert from a sockaddr_storage
  * array to a struct samba_sockaddr array.
diff --git a/source3/libsmb/namequery.h b/source3/libsmb/namequery.h
index 37fb5c66c8c..16559f9cd26 100644
--- a/source3/libsmb/namequery.h
+++ b/source3/libsmb/namequery.h
@@ -23,8 +23,6 @@
 #include <tevent.h>
 
 /* The following definitions come from libsmb/namequery.c  */
-bool sockaddr_storage_to_samba_sockaddr(struct samba_sockaddr *sa,
-					const struct sockaddr_storage *ss);
 bool saf_store( const char *domain, const char *servername );
 bool saf_join_store( const char *domain, const char *servername );
 bool saf_delete( const char *domain );
diff --git a/source3/printing/spoolssd.c b/source3/printing/spoolssd.c
index e56ebabd28f..8aef363fa91 100644
--- a/source3/printing/spoolssd.c
+++ b/source3/printing/spoolssd.c
@@ -580,41 +580,31 @@ static char *get_bq_logfile(void)
 static NTSTATUS spoolssd_create_sockets(struct tevent_context *ev_ctx,
 		struct messaging_context *msg_ctx,
 		struct dcesrv_context *dce_ctx,
-		struct pf_listen_fd *listen_fd,
-		int *listen_fd_size)
+		TALLOC_CTX *mem_ctx,
+		struct pf_listen_fd **plisten_fds,
+		size_t *pnum_listen_fds)
 {
 	NTSTATUS status;
-	int fd = -1;
 	int rc;
 	enum rpc_service_mode_e epm_mode = rpc_epmapper_mode();
-	int i;
-	struct dcesrv_endpoint *e = NULL;
+	size_t i, num_fds;
+	struct pf_listen_fd *fds = NULL;
+	struct dcesrv_endpoint *e = dce_ctx->endpoint_list;
 
 	DBG_INFO("Initializing DCE/RPC connection endpoints\n");
 
-	for (e = dce_ctx->endpoint_list; e; e = e->next) {
-		status = dcesrv_create_endpoint_sockets(ev_ctx,
-							msg_ctx,
-							dce_ctx,
-							e,
-							listen_fd,
-							listen_fd_size);
-		if (!NT_STATUS_IS_OK(status)) {
-			char *ep_string = dcerpc_binding_string(
-					dce_ctx, e->ep_description);
-			DBG_ERR("Failed to create endpoint '%s': %s\n",
-				ep_string, nt_errstr(status));
-			TALLOC_FREE(ep_string);
-			goto done;
-		}
+	status = dcesrv_create_endpoint_list_pf_listen_fds(
+		ev_ctx, msg_ctx, dce_ctx, e, mem_ctx, &num_fds, &fds);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
 	}
 
-	for (i = 0; i < *listen_fd_size; i++) {
-		rc = listen(listen_fd[i].fd, pf_spoolss_cfg.max_allowed_clients);
+	for (i = 0; i < num_fds; i++) {
+		rc = listen(fds[i].fd, pf_spoolss_cfg.max_allowed_clients);
 		if (rc == -1) {
 			char *ep_string = NULL;
+			e = fds[i].fd_data;
 
-			e = listen_fd[i].fd_data;
 			ep_string = dcerpc_binding_string(dce_ctx,
 							  e->ep_description);
 			DBG_ERR("Failed to listen on endpoint '%s': %s\n",
@@ -644,12 +634,11 @@ static NTSTATUS spoolssd_create_sockets(struct tevent_context *ev_ctx,
 		}
 	}
 
+	*plisten_fds = fds;
+	*pnum_listen_fds = num_fds;
+
 	status = NT_STATUS_OK;
 done:
-	if (fd != -1) {
-		close(fd);
-	}
-
 	return status;
 }
 
@@ -659,8 +648,8 @@ pid_t start_spoolssd(struct tevent_context *ev_ctx,
 {
 	pid_t pid;
 	NTSTATUS status;
-	struct pf_listen_fd listen_fds[1];
-	int listen_fds_size = 0;
+	struct pf_listen_fd *listen_fds = NULL;
+	size_t listen_fds_size = 0;
 	int ret;
 	bool ok;
 	const struct dcesrv_endpoint_server *ep_server = NULL;
@@ -774,7 +763,8 @@ pid_t start_spoolssd(struct tevent_context *ev_ctx,
 	status = spoolssd_create_sockets(ev_ctx,
 					 msg_ctx,
 					 dce_ctx,
-					 listen_fds,
+					 dce_ctx,
+					 &listen_fds,
 					 &listen_fds_size);
 	if (!NT_STATUS_IS_OK(status)) {
 		DBG_ERR("Failed to create sockets: %s\n",
@@ -790,6 +780,7 @@ pid_t start_spoolssd(struct tevent_context *ev_ctx,
 				 pf_spoolss_cfg.max_children,
 				 &spoolss_children_main, dce_ctx,
 				 &spoolss_pool);
+	TALLOC_FREE(listen_fds);
 	if (!ok) {
 		exit(1);
 	}
diff --git a/source3/rpc_server/lsasd.c b/source3/rpc_server/lsasd.c
index fe94f5a68a6..a5cc1dad17d 100644
--- a/source3/rpc_server/lsasd.c
+++ b/source3/rpc_server/lsasd.c
@@ -48,7 +48,6 @@
 #define DBGC_CLASS DBGC_RPC_SRV
 
 #define DAEMON_NAME "lsasd"
-#define LSASD_MAX_SOCKETS 64
 
 static struct server_id parent_id;
 static struct prefork_pool *lsasd_pool = NULL;
@@ -546,40 +545,30 @@ static void lsasd_check_children(struct tevent_context *ev_ctx,
 static NTSTATUS lsasd_create_sockets(struct tevent_context *ev_ctx,
 				     struct messaging_context *msg_ctx,
 				     struct dcesrv_context *dce_ctx,
-				     struct pf_listen_fd *listen_fd,
-				     int *listen_fd_size)
+				     TALLOC_CTX *mem_ctx,
+				     struct pf_listen_fd **plisten_fds,
+				     size_t *pnum_listen_fds)
 {
 	NTSTATUS status;
-	int i;
-	int fd = -1;
+	size_t i, num_fds;
+	struct pf_listen_fd *fds = NULL;
 	int rc;
-	struct dcesrv_endpoint *e = NULL;
+	struct dcesrv_endpoint *e = dce_ctx->endpoint_list;
 
 	DBG_INFO("Initializing DCE/RPC connection endpoints\n");
 
-	for (e = dce_ctx->endpoint_list; e; e = e->next) {
-		status = dcesrv_create_endpoint_sockets(ev_ctx,
-							msg_ctx,
-							dce_ctx,
-							e,
-							listen_fd,
-							listen_fd_size);
-		if (!NT_STATUS_IS_OK(status)) {
-			char *ep_string = dcerpc_binding_string(
-					dce_ctx, e->ep_description);
-			DBG_ERR("Failed to create endpoint '%s': %s\n",
-				ep_string, nt_errstr(status));
-			TALLOC_FREE(ep_string);
-			goto done;
-		}
+	status = dcesrv_create_endpoint_list_pf_listen_fds(
+		ev_ctx, msg_ctx, dce_ctx, e, mem_ctx, &num_fds, &fds);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
 	}
 
-	for (i = 0; i < *listen_fd_size; i++) {
-		rc = listen(listen_fd[i].fd, pf_lsasd_cfg.max_allowed_clients);
+	for (i = 0; i < num_fds; i++) {
+		rc = listen(fds[i].fd, pf_lsasd_cfg.max_allowed_clients);
 		if (rc == -1) {
 			char *ep_string = NULL;
+			e = fds[i].fd_data;
 
-			e = listen_fd[i].fd_data;
 			ep_string = dcerpc_binding_string(dce_ctx,
 							  e->ep_description);
 			DBG_ERR("Failed to listen on endpoint '%s': %s\n",
@@ -606,11 +595,11 @@ static NTSTATUS lsasd_create_sockets(struct tevent_context *ev_ctx,
 		}
 	}
 
+	*plisten_fds = fds;
+	*pnum_listen_fds = num_fds;
+
 	status = NT_STATUS_OK;
 done:
-	if (fd != -1) {
-		close(fd);
-	}
 	return status;
 }
 
@@ -619,8 +608,8 @@ void start_lsasd(struct tevent_context *ev_ctx,
 		 struct dcesrv_context *dce_ctx)
 {
 	NTSTATUS status;
-	struct pf_listen_fd listen_fd[LSASD_MAX_SOCKETS];
-	int listen_fd_size = 0;
+	struct pf_listen_fd *listen_fd = NULL;
+	size_t listen_fd_size = 0;
 	pid_t pid;
 	int rc;
 	bool ok;
@@ -738,7 +727,8 @@ void start_lsasd(struct tevent_context *ev_ctx,
 	status = lsasd_create_sockets(ev_ctx,
 				      msg_ctx,
 				      dce_ctx,
-				      listen_fd,
+				      dce_ctx,
+				      &listen_fd,
 				      &listen_fd_size);
 	if (!NT_STATUS_IS_OK(status)) {
 		exit(1);
@@ -755,6 +745,7 @@ void start_lsasd(struct tevent_context *ev_ctx,
 				 &lsasd_children_main,
 				 dce_ctx,
 				 &lsasd_pool);
+	TALLOC_FREE(listen_fd);
 	if (!ok) {
 		exit(1);
 	}
diff --git a/source3/rpc_server/mdssd.c b/source3/rpc_server/mdssd.c
index d74f9a2be8b..0c44b010aae 100644
--- a/source3/rpc_server/mdssd.c
+++ b/source3/rpc_server/mdssd.c
@@ -45,7 +45,6 @@
 #define DBGC_CLASS DBGC_RPC_SRV
 
 #define DAEMON_NAME "mdssd"
-#define MDSSD_MAX_SOCKETS 64
 
 static struct server_id parent_id;
 static struct prefork_pool *mdssd_pool = NULL;
@@ -496,40 +495,30 @@ static void mdssd_check_children(struct tevent_context *ev_ctx,
 static NTSTATUS mdssd_create_sockets(struct tevent_context *ev_ctx,
 				     struct messaging_context *msg_ctx,
 				     struct dcesrv_context *dce_ctx,
-				     struct pf_listen_fd *listen_fd,
-				     int *listen_fd_size)
+				     TALLOC_CTX *mem_ctx,
+				     struct pf_listen_fd **plisten_fds,
+				     size_t *pnum_listen_fds)
 {
 	NTSTATUS status;
-	int fd = -1;
+	size_t i, num_fds;
+	struct pf_listen_fd *fds = NULL;
 	int rc;
-	int i;
-	struct dcesrv_endpoint *e = NULL;
+	struct dcesrv_endpoint *e = dce_ctx->endpoint_list;
 
 	DBG_INFO("Initializing DCE/RPC connection endpoints\n");
 
-	for (e = dce_ctx->endpoint_list; e; e = e->next) {
-		status = dcesrv_create_endpoint_sockets(ev_ctx,
-							msg_ctx,
-							dce_ctx,
-							e,
-							listen_fd,
-							listen_fd_size);
-		if (!NT_STATUS_IS_OK(status)) {
-			char *ep_string = dcerpc_binding_string(
-					dce_ctx, e->ep_description);
-			DBG_ERR("Failed to create endpoint '%s': %s\n",
-				ep_string, nt_errstr(status));
-			TALLOC_FREE(ep_string);
-			goto done;
-		}
+	status = dcesrv_create_endpoint_list_pf_listen_fds(
+		ev_ctx, msg_ctx, dce_ctx, e, mem_ctx, &num_fds, &fds);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
 	}
 
-	for (i = 0; i < *listen_fd_size; i++) {
-		rc = listen(listen_fd[i].fd, pf_mdssd_cfg.max_allowed_clients);
+	for (i = 0; i < num_fds; i++) {
+		rc = listen(fds[i].fd, pf_mdssd_cfg.max_allowed_clients);
 		if (rc == -1) {
 			char *ep_string = NULL;
+			e = fds[i].fd_data;
 
-			e = listen_fd[i].fd_data;
 			ep_string = dcerpc_binding_string(dce_ctx,
 							  e->ep_description);
 			DBG_ERR("Failed to listen on endpoint '%s': %s\n",
@@ -556,11 +545,11 @@ static NTSTATUS mdssd_create_sockets(struct tevent_context *ev_ctx,
 		}
 	}
 
+	*plisten_fds = fds;
+	*pnum_listen_fds = num_fds;
+
 	status = NT_STATUS_OK;
 done:
-	if (fd != -1) {
-		close(fd);
-	}
 	return status;
 }
 
@@ -569,8 +558,8 @@ void start_mdssd(struct tevent_context *ev_ctx,
 		 struct dcesrv_context *dce_ctx)
 {
 	NTSTATUS status;
-	struct pf_listen_fd listen_fd[MDSSD_MAX_SOCKETS];
-	int listen_fd_size = 0;
+	struct pf_listen_fd *listen_fd = NULL;
+	size_t listen_fd_size = 0;
 	pid_t pid;
 	int rc;
 	bool ok;
@@ -655,7 +644,8 @@ void start_mdssd(struct tevent_context *ev_ctx,
 	status = mdssd_create_sockets(ev_ctx,
 				      msg_ctx,
 				      dce_ctx,
-				      listen_fd,
+				      dce_ctx,
+				      &listen_fd,
 				      &listen_fd_size);
 	if (!NT_STATUS_IS_OK(status)) {
 		exit(1);
@@ -672,6 +662,7 @@ void start_mdssd(struct tevent_context *ev_ctx,
 				 &mdssd_children_main,
 				 dce_ctx,
 				 &mdssd_pool);
+	TALLOC_FREE(listen_fd);
 	if (!ok) {
 		exit(1);
 	}
diff --git a/source3/rpc_server/rpc_server.c b/source3/rpc_server/rpc_server.c
index 9e57bc34559..e65d4a1b7c6 100644
--- a/source3/rpc_server/rpc_server.c
+++ b/source3/rpc_server/rpc_server.c
@@ -337,24 +337,15 @@ NTSTATUS dcesrv_setup_ncacn_ip_tcp_socket(struct tevent_context *ev_ctx,
 					  struct messaging_context *msg_ctx,
 					  struct dcesrv_context *dce_ctx,
 					  struct dcesrv_endpoint *e,
-					  const struct sockaddr_storage *ifss,
+					  int fd,
 					  dcerpc_ncacn_termination_fn term_fn,
 					  void *term_data)
 {
 	struct dcerpc_ncacn_listen_state *state = NULL;
 	struct tevent_fd *fde = NULL;
-	const char *endpoint = NULL;
-	uint16_t port = 0;
-	char port_str[6];
 	int rc;
 	NTSTATUS status;
 
-	endpoint = dcerpc_binding_get_string_option(e->ep_description,
-						    "endpoint");
-	if (endpoint != NULL) {
-		port = atoi(endpoint);
-	}
-
 	/* Alloc in endpoint context. If the endpoint is freed (for example
 	 * when forked daemons reinit the dcesrv_context, the tevent_fd
 	 * listener will be stopped and the socket closed */


-- 
Samba Shared Repository



More information about the samba-cvs mailing list