From: Samuel Cabrero Date: Tue, 4 Jun 2019 12:17:03 +0000 (+0200) Subject: s3:rpc_server: Return NTSTATUS for dcesrv_create_ncalrpc_socket X-Git-Tag: talloc-2.3.0~61 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3153814db4a4ad667218f47ff610c5b43678aabf;p=thirdparty%2Fsamba.git s3:rpc_server: Return NTSTATUS for dcesrv_create_ncalrpc_socket Signed-off-by: Samuel Cabrero Reviewed-by: Stefan Metzmacher --- diff --git a/source3/rpc_server/lsasd.c b/source3/rpc_server/lsasd.c index 64646018cfa..19ee990fe31 100644 --- a/source3/rpc_server/lsasd.c +++ b/source3/rpc_server/lsasd.c @@ -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; } diff --git a/source3/rpc_server/mdssd.c b/source3/rpc_server/mdssd.c index 70c90bea4c4..335141ce740 100644 --- a/source3/rpc_server/mdssd.c +++ b/source3/rpc_server/mdssd.c @@ -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; } diff --git a/source3/rpc_server/rpc_server.c b/source3/rpc_server/rpc_server.c index 87633fb0f81..60f04550d3c 100644 --- a/source3/rpc_server/rpc_server.c +++ b/source3/rpc_server/rpc_server.c @@ -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; } diff --git a/source3/rpc_server/rpc_server.h b/source3/rpc_server/rpc_server.h index fe96aa7ac91..39aae2d8831 100644 --- a/source3/rpc_server/rpc_server.h +++ b/source3/rpc_server/rpc_server.h @@ -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,