s3:rpc_server: Return NTSTATUS for dcesrv_create_ncalrpc_socket
authorSamuel Cabrero <scabrero@suse.de>
Tue, 4 Jun 2019 12:17:03 +0000 (14:17 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 22 Jul 2019 16:49:12 +0000 (16:49 +0000)
Signed-off-by: Samuel Cabrero <scabrero@suse.de>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source3/rpc_server/lsasd.c
source3/rpc_server/mdssd.c
source3/rpc_server/rpc_server.c
source3/rpc_server/rpc_server.h

index 64646018cfa438c271ba20d233c44fc50410b7eb..19ee990fe3104b9b68452e6ce42081577259f12b 100644 (file)
@@ -655,8 +655,8 @@ static bool lsasd_create_sockets(struct tevent_context *ev_ctx,
        listen_fd[*listen_fd_size] = fd;
        (*listen_fd_size)++;
 
-       fd = dcesrv_create_ncalrpc_socket("lsarpc");
-       if (fd < 0) {
+       status = dcesrv_create_ncalrpc_socket("lsarpc", &fd);
+       if (!NT_STATUS_IS_OK(status)) {
                goto done;
        }
 
@@ -710,8 +710,8 @@ static bool lsasd_create_sockets(struct tevent_context *ev_ctx,
        listen_fd[*listen_fd_size] = fd;
        (*listen_fd_size)++;
 
-       fd = dcesrv_create_ncalrpc_socket("samr");
-       if (fd < 0) {
+       status = dcesrv_create_ncalrpc_socket("samr", &fd);
+       if (!NT_STATUS_IS_OK(status)) {
                goto done;
        }
 
@@ -765,8 +765,8 @@ static bool lsasd_create_sockets(struct tevent_context *ev_ctx,
        listen_fd[*listen_fd_size] = fd;
        (*listen_fd_size)++;
 
-       fd = dcesrv_create_ncalrpc_socket("netlogon");
-       if (fd < 0) {
+       status = dcesrv_create_ncalrpc_socket("netlogon", &fd);
+       if (!NT_STATUS_IS_OK(status)) {
                goto done;
        }
 
index 70c90bea4c4010375fbec896d202107acd9c6b8c..335141ce7406cad9bc7d718445b4e99bf60d6de3 100644 (file)
@@ -561,8 +561,8 @@ static bool mdssd_create_sockets(struct tevent_context *ev_ctx,
        listen_fd[*listen_fd_size] = fd;
        (*listen_fd_size)++;
 
-       fd = dcesrv_create_ncalrpc_socket("mdssvc");
-       if (fd < 0) {
+       status = dcesrv_create_ncalrpc_socket("mdssvc", &fd);
+       if (!NT_STATUS_IS_OK(status)) {
                goto done;
        }
 
index 87633fb0f8182d268f769d5a8ccfb2e4fa48c87a..60f04550d3c84c37f902c2c51083acccb609a7f2 100644 (file)
@@ -765,30 +765,38 @@ static void dcerpc_ncalrpc_listener(struct tevent_context *ev,
                                    uint16_t flags,
                                    void *private_data);
 
-int dcesrv_create_ncalrpc_socket(const char *name)
+NTSTATUS dcesrv_create_ncalrpc_socket(const char *name, int *out_fd)
 {
        int fd = -1;
+       NTSTATUS status;
 
        if (name == NULL) {
                name = "DEFAULT";
        }
 
        if (!directory_create_or_exist(lp_ncalrpc_dir(), 0755)) {
+               status = map_nt_error_from_unix_common(errno);
                DEBUG(0, ("Failed to create ncalrpc directory %s - %s\n",
                          lp_ncalrpc_dir(), strerror(errno)));
-               return -1;
+               goto out;
        }
 
        fd = create_pipe_sock(lp_ncalrpc_dir(), name, 0755);
        if (fd == -1) {
+               status = map_nt_error_from_unix_common(errno);
                DEBUG(0, ("Failed to create ncalrpc socket! [%s/%s]\n",
                          lp_ncalrpc_dir(), name));
-               return -1;
+               goto out;
        }
 
        DEBUG(10, ("Opened ncalrpc socket fd %d for %s\n", fd, name));
 
-       return fd;
+       *out_fd = fd;
+
+       return NT_STATUS_OK;
+
+out:
+       return status;
 }
 
 bool setup_dcerpc_ncalrpc_socket(struct tevent_context *ev_ctx,
@@ -799,6 +807,7 @@ bool setup_dcerpc_ncalrpc_socket(struct tevent_context *ev_ctx,
        struct dcerpc_ncacn_listen_state *state;
        struct tevent_fd *fde;
        int rc;
+       NTSTATUS status;
 
        state = talloc(ev_ctx, struct dcerpc_ncacn_listen_state);
        if (state == NULL) {
@@ -820,8 +829,8 @@ bool setup_dcerpc_ncalrpc_socket(struct tevent_context *ev_ctx,
                return false;
        }
 
-       state->fd = dcesrv_create_ncalrpc_socket(name);
-       if (state->fd == -1) {
+       status = dcesrv_create_ncalrpc_socket(name, &state->fd);
+       if (!NT_STATUS_IS_OK(status)) {
                goto out;
        }
 
index fe96aa7ac91bcc24400aab98534ed4bf657c0747..39aae2d883152b9574845c64275b6ed5c37e0895 100644 (file)
@@ -95,7 +95,7 @@ uint16_t setup_dcerpc_ncacn_tcpip_socket(struct tevent_context *ev_ctx,
                                         const struct sockaddr_storage *ifss,
                                         uint16_t port);
 
-int dcesrv_create_ncalrpc_socket(const char *name);
+NTSTATUS dcesrv_create_ncalrpc_socket(const char *name, int *out_fd);
 bool setup_dcerpc_ncalrpc_socket(struct tevent_context *ev_ctx,
                                 struct messaging_context *msg_ctx,
                                 const char *name,