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;
}
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;
}
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;
}
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;
}
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,
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) {
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;
}
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,