]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
rpc_server: Lift logic to fill in pf_listen_fd one level
authorVolker Lendecke <vl@samba.org>
Thu, 31 Dec 2020 08:54:15 +0000 (09:54 +0100)
committerVolker Lendecke <vl@samba.org>
Mon, 11 Jan 2021 13:19:32 +0000 (13:19 +0000)
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@samba.org>
Reviewed-by: Samuel Cabrero <scabrero@samba.org>
source3/rpc_server/rpc_service_setup.c
source3/rpc_server/rpc_sock_helper.c
source3/rpc_server/rpc_sock_helper.h

index f0d819c088d0bc64ae48c2753beb6f1b2604bb35..a8080f25f489f592685c0cf6e4894ffafee2fbb2 100644 (file)
@@ -115,11 +115,23 @@ NTSTATUS dcesrv_create_endpoint_sockets(struct tevent_context *ev_ctx,
                }
                break;
 
-       case NCACN_IP_TCP:
-               status = dcesrv_create_ncacn_ip_tcp_sockets(e,
-                                                           listen_fds,
-                                                           listen_fds_size);
+       case NCACN_IP_TCP: {
+               int *fds = NULL;
+               size_t num_fds;
+
+               status = dcesrv_create_ncacn_ip_tcp_sockets(
+                       e, talloc_tos(), &num_fds, &fds);
+               if (NT_STATUS_IS_OK(status)) {
+                       size_t i;
+                       for (i=0; i<num_fds; i++) {
+                               listen_fds[*listen_fds_size].fd = fds[i];
+                               listen_fds[*listen_fds_size].fd_data = e;
+                               (*listen_fds_size)++;
+                       }
+               }
+               TALLOC_FREE(fds);
                break;
+       }
 
        case NCACN_NP:
                status = dcesrv_create_ncacn_np_socket(e, &out_fd);
index 33ce8a616051b429dd74e379186eef28b79a066d..c07f27016f264c0ad4d49e6f6b78120a936d83f2 100644 (file)
@@ -32,7 +32,7 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV
 
-static NTSTATUS dcesrv_open_ncacn_ip_tcp_sockets(
+NTSTATUS dcesrv_create_ncacn_ip_tcp_sockets(
        struct dcesrv_endpoint *e,
        TALLOC_CTX *mem_ctx,
        size_t *pnum_fds,
@@ -154,37 +154,6 @@ fail:
        return status;
 }
 
-NTSTATUS dcesrv_create_ncacn_ip_tcp_sockets(struct dcesrv_endpoint *e,
-                                           struct pf_listen_fd *listen_fd,
-                                           int *listen_fd_size)
-{
-       TALLOC_CTX *tmp_ctx;
-       NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-       int *fds = NULL;
-       size_t i, num_fds = 0;
-
-       tmp_ctx = talloc_stackframe();
-       if (tmp_ctx == NULL) {
-               return NT_STATUS_NO_MEMORY;
-       }
-
-       status = dcesrv_open_ncacn_ip_tcp_sockets(e, tmp_ctx, &num_fds, &fds);
-       if (!NT_STATUS_IS_OK(status)) {
-               goto done;
-       }
-
-       for (i=0; i<num_fds; i++) {
-               listen_fd[*listen_fd_size].fd = fds[i];
-               listen_fd[*listen_fd_size].fd_data = e;
-               *listen_fd_size += 1;
-       }
-
-       status = NT_STATUS_OK;
-done:
-       talloc_free(tmp_ctx);
-       return status;
-}
-
 NTSTATUS dcesrv_setup_ncacn_ip_tcp_sockets(struct tevent_context *ev_ctx,
                                           struct messaging_context *msg_ctx,
                                           struct dcesrv_context *dce_ctx,
@@ -202,7 +171,8 @@ NTSTATUS dcesrv_setup_ncacn_ip_tcp_sockets(struct tevent_context *ev_ctx,
                return NT_STATUS_NO_MEMORY;
        }
 
-       status = dcesrv_open_ncacn_ip_tcp_sockets(e, tmp_ctx, &num_fds, &fds);
+       status = dcesrv_create_ncacn_ip_tcp_sockets(
+               e, tmp_ctx, &num_fds, &fds);
        if (!NT_STATUS_IS_OK(status)) {
                goto done;
        }
index 62ebf34def2b601430aafdc15709a61d925a30e3..bcde82c6a144fc5861c26a726cad8bc2d4e23659 100644 (file)
 
 struct pf_listen_fd;
 
-NTSTATUS dcesrv_create_ncacn_ip_tcp_sockets(struct dcesrv_endpoint *e,
-                                           struct pf_listen_fd *listen_fd,
-                                           int *listen_fd_size);
+NTSTATUS dcesrv_create_ncacn_ip_tcp_sockets(
+       struct dcesrv_endpoint *e,
+       TALLOC_CTX *mem_ctx,
+       size_t *pnum_fds,
+       int **pfds);
 
 NTSTATUS dcesrv_setup_ncacn_ip_tcp_sockets(struct tevent_context *ev_ctx,
                                           struct messaging_context *msg_ctx,