1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-26 21:57:41 +03:00

s3:rpc_server: Return NTSTATUS for dcesrv_create_ncacn_ip_tcp_socket

Additionally to the fd number, check the port number has been correctly
assigned. This check was performed by the callers of this function.

Signed-off-by: Samuel Cabrero <scabrero@suse.de>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
Samuel Cabrero 2019-06-04 16:16:36 +02:00 committed by Stefan Metzmacher
parent b7817eaf3d
commit e3999a14da
3 changed files with 22 additions and 14 deletions

View File

@ -613,8 +613,9 @@ static void dcerpc_ncacn_tcpip_listener(struct tevent_context *ev,
uint16_t flags,
void *private_data);
int dcesrv_create_ncacn_ip_tcp_socket(const struct sockaddr_storage *ifss,
uint16_t *port)
NTSTATUS dcesrv_create_ncacn_ip_tcp_socket(const struct sockaddr_storage *ifss,
uint16_t *port,
int *out_fd)
{
int fd = -1;
@ -641,12 +642,14 @@ int dcesrv_create_ncacn_ip_tcp_socket(const struct sockaddr_storage *ifss,
}
if (fd == -1) {
DEBUG(0, ("Failed to create socket on port %u!\n", *port));
return -1;
return NT_STATUS_UNSUCCESSFUL;
}
DEBUG(10, ("Opened tcpip socket fd %d for port %u\n", fd, *port));
return fd;
*out_fd = fd;
return NT_STATUS_OK;
}
uint16_t setup_dcerpc_ncacn_tcpip_socket(struct tevent_context *ev_ctx,
@ -657,6 +660,7 @@ uint16_t setup_dcerpc_ncacn_tcpip_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) {
@ -668,8 +672,9 @@ uint16_t setup_dcerpc_ncacn_tcpip_socket(struct tevent_context *ev_ctx,
state->ep.port = port;
state->disconnect_fn = NULL;
state->fd = dcesrv_create_ncacn_ip_tcp_socket(ifss, &state->ep.port);
if (state->fd == -1) {
status = dcesrv_create_ncacn_ip_tcp_socket(ifss, &state->ep.port,
&state->fd);
if (!NT_STATUS_IS_OK(status)) {
goto out;
}

View File

@ -90,8 +90,9 @@ void named_pipe_accept_function(struct tevent_context *ev_ctx,
void *private_data);
void named_pipe_packet_process(struct tevent_req *subreq);
int dcesrv_create_ncacn_ip_tcp_socket(const struct sockaddr_storage *ifss,
uint16_t *port);
NTSTATUS dcesrv_create_ncacn_ip_tcp_socket(const struct sockaddr_storage *ifss,
uint16_t *port,
int *out_fd);
uint16_t setup_dcerpc_ncacn_tcpip_socket(struct tevent_context *ev_ctx,
struct messaging_context *msg_ctx,
const struct sockaddr_storage *ifss,

View File

@ -60,9 +60,10 @@ NTSTATUS rpc_create_tcpip_sockets(const struct ndr_interface_table *iface,
const char *addr;
int fd;
fd = dcesrv_create_ncacn_ip_tcp_socket(ifss, &p);
if (fd < 0) {
status = NT_STATUS_UNSUCCESSFUL;
status = dcesrv_create_ncacn_ip_tcp_socket(ifss,
&p,
&fd);
if (!NT_STATUS_IS_OK(status)) {
goto done;
}
listen_fd[*listen_fd_size] = fd;
@ -121,9 +122,10 @@ NTSTATUS rpc_create_tcpip_sockets(const struct ndr_interface_table *iface,
continue;
}
fd = dcesrv_create_ncacn_ip_tcp_socket(&ss, &p);
if (fd < 0) {
status = NT_STATUS_UNSUCCESSFUL;
status = dcesrv_create_ncacn_ip_tcp_socket(&ss,
&p,
&fd);
if (!NT_STATUS_IS_OK(status)) {
goto done;
}
listen_fd[*listen_fd_size] = fd;