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:
parent
b7817eaf3d
commit
e3999a14da
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user