s3-rpc_server: enforce packet level authentication for iremotewinspool server
[samba.git] / source3 / rpc_server / rpc_server.h
index 18c790500c02f7cf1655448ee249cf7ec1246802..2291350a07fa917cc80bb3957d0c11a260afb707 100644 (file)
 #ifndef _RPC_SERVER_H_
 #define _RPC_SERVER_H_
 
+struct pipes_struct;
+
+typedef bool (*dcerpc_ncacn_disconnect_fn)(struct pipes_struct *p);
+typedef void (named_pipe_termination_fn)(void *private_data);
+
+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 *client;
+       char *client_name;
+       struct tsocket_address *server;
+       char *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 *local_address,
+                            const struct tsocket_address *remote_address,
+                            struct auth_session_info *session_info,
+                            struct pipes_struct **_p,
+                            int *perrno);
+
 void set_incoming_fault(struct pipes_struct *p);
-void process_complete_pdu(struct pipes_struct *p);
+void process_complete_pdu(struct pipes_struct *p, struct ncacn_packet *pkt);
+int create_named_pipe_socket(const char *pipe_name);
 bool setup_named_pipe_socket(const char *pipe_name,
-                            struct tevent_context *ev_ctx);
+                            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);
 
 uint16_t setup_dcerpc_ncacn_tcpip_socket(struct tevent_context *ev_ctx,
                                         struct messaging_context *msg_ctx,
-                                        struct ndr_syntax_id syntax_id,
                                         const struct sockaddr_storage *ifss,
                                         uint16_t port);
 
+int create_dcerpc_ncalrpc_socket(const char *name);
 bool setup_dcerpc_ncalrpc_socket(struct tevent_context *ev_ctx,
                                 struct messaging_context *msg_ctx,
-                                struct ndr_syntax_id syntax_id,
-                                const char *name);
+                                const char *name,
+                                dcerpc_ncacn_disconnect_fn fn);
+
+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,
+                        int s,
+                        dcerpc_ncacn_disconnect_fn fn);
 
 #endif /* _PRC_SERVER_H_ */