#include "librpc/rpc/rpc_common.h" /* For enum dcerpc_transport_t */
+#include "librpc/rpc/dcesrv_core.h"
+
struct pipes_struct;
struct auth_session_info;
+struct cli_credentials;
-typedef bool (*dcerpc_ncacn_disconnect_fn)(struct pipes_struct *p);
-typedef void (*named_pipe_termination_fn)(void *private_data);
+typedef void (*dcerpc_ncacn_termination_fn)(struct dcesrv_connection *,
+ void *);
struct dcerpc_ncacn_conn {
- enum dcerpc_transport_t transport;
-
int sock;
struct pipes_struct *p;
- dcerpc_ncacn_disconnect_fn disconnect_fn;
+ dcerpc_ncacn_termination_fn termination_fn;
+ void *termination_data;
struct tevent_context *ev_ctx;
struct messaging_context *msg_ctx;
+ struct dcesrv_context *dce_ctx;
+ struct dcesrv_endpoint *endpoint;
struct tstream_context *tstream;
struct tevent_queue *send_queue;
size_t count;
};
-struct named_pipe_client {
- const char *pipe_name;
-
- struct tevent_context *ev;
- struct messaging_context *msg_ctx;
-
- uint16_t file_type;
- uint16_t device_state;
- uint64_t allocation_size;
-
- struct tstream_context *tstream;
-
- struct tsocket_address *remote_client_addr;
- char *remote_client_name;
- struct tsocket_address *local_server_addr;
- char *local_server_name;
-
- struct auth_session_info *session_info;
-
- struct pipes_struct *p;
-
- struct tevent_queue *write_queue;
-
- struct iovec *iov;
- size_t count;
-
- named_pipe_termination_fn term_fn;
- void *private_data;
-};
-
-struct named_pipe_client *named_pipe_client_init(TALLOC_CTX *mem_ctx,
- struct tevent_context *ev_ctx,
- struct messaging_context *msg_ctx,
- const char *pipe_name,
- named_pipe_termination_fn term_fn,
- uint16_t file_type,
- uint16_t device_state,
- uint64_t allocation_size,
- void *private_data);
-
-int make_server_pipes_struct(TALLOC_CTX *mem_ctx,
- struct messaging_context *msg_ctx,
- const char *pipe_name,
- enum dcerpc_transport_t transport,
- const struct tsocket_address *remote_address,
- const struct tsocket_address *local_address,
- struct auth_session_info **session_info,
- struct pipes_struct **_p,
- int *perrno);
+NTSTATUS dcerpc_ncacn_conn_init(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev_ctx,
+ struct messaging_context *msg_ctx,
+ struct dcesrv_context *dce_ctx,
+ struct dcesrv_endpoint *endpoint,
+ dcerpc_ncacn_termination_fn term_fn,
+ void *termination_data,
+ struct dcerpc_ncacn_conn **out);
void set_incoming_fault(struct pipes_struct *p);
void process_complete_pdu(struct pipes_struct *p, struct ncacn_packet *pkt);
-NTSTATUS dcesrv_create_ncacn_np_socket(const char *pipe_name, int *out_fd);
-NTSTATUS dcesrv_setup_ncacn_np_socket(const char *pipe_name,
- struct tevent_context *ev_ctx,
- struct messaging_context *msg_ctx);
-void named_pipe_accept_function(struct tevent_context *ev_ctx,
- struct messaging_context *msg_ctx,
- const char *pipe_name, int fd,
- named_pipe_termination_fn term_fn,
- void *private_data);
-void named_pipe_packet_process(struct tevent_req *subreq);
-
-NTSTATUS dcesrv_create_ncacn_ip_tcp_socket(const struct sockaddr_storage *ifss,
- uint16_t *port,
- int *out_fd);
-NTSTATUS dcesrv_setup_ncacn_ip_tcp_socket(struct tevent_context *ev_ctx,
- struct messaging_context *msg_ctx,
- const struct sockaddr_storage *ifss,
- uint16_t *port);
-
-NTSTATUS dcesrv_create_ncalrpc_socket(const char *name, int *out_fd);
-NTSTATUS dcesrv_setup_ncalrpc_socket(struct tevent_context *ev_ctx,
- struct messaging_context *msg_ctx,
- const char *name,
- dcerpc_ncacn_disconnect_fn fn);
+
+struct dcerpc_ncacn_listen_state;
+int dcesrv_setup_ncacn_listener(
+ TALLOC_CTX *mem_ctx,
+ struct dcesrv_context *dce_ctx,
+ struct tevent_context *ev_ctx,
+ struct messaging_context *msg_ctx,
+ struct dcesrv_endpoint *e,
+ int *fd,
+ dcerpc_ncacn_termination_fn term_fn,
+ void *termination_data,
+ struct dcerpc_ncacn_listen_state **listen_state);
void dcerpc_ncacn_accept(struct tevent_context *ev_ctx,
struct messaging_context *msg_ctx,
- enum dcerpc_transport_t transport,
- const char *name,
- struct tsocket_address *cli_addr,
- struct tsocket_address *srv_addr,
+ struct dcesrv_context *dce_ctx,
+ struct dcesrv_endpoint *e,
+ struct tsocket_address **cli_addr,
+ struct tsocket_address **srv_addr,
int s,
- dcerpc_ncacn_disconnect_fn fn);
+ dcerpc_ncacn_termination_fn termination_fn,
+ void *termination_data);
+
+NTSTATUS dcesrv_auth_gensec_prepare(TALLOC_CTX *mem_ctx,
+ struct dcesrv_call_state *call,
+ struct gensec_security **out);
+void dcesrv_log_successful_authz(struct dcesrv_call_state *call);
+NTSTATUS dcesrv_assoc_group_find(struct dcesrv_call_state *call);
+
+NTSTATUS dcesrv_endpoint_by_ncacn_np_name(struct dcesrv_context *dce_ctx,
+ const char *endpoint,
+ struct dcesrv_endpoint **out);
+
+struct pipes_struct *dcesrv_get_pipes_struct(struct dcesrv_connection *conn);
+
+void dcesrv_transport_terminate_connection(struct dcesrv_connection *dce_conn,
+ const char *reason);
#endif /* _PRC_SERVER_H_ */