s4-smbtorture: exit early in test_EnumPorts when no port info has been returned.
[sfrench/samba-autobuild/.git] / source4 / rpc_server / dcerpc_server.h
index b773df22572994e041515c1e53f44e777545dca8..7e12a3840ba76b80ba8127f553bb1069c2035e61 100644 (file)
@@ -23,7 +23,7 @@
 #ifndef SAMBA_DCERPC_SERVER_H
 #define SAMBA_DCERPC_SERVER_H
 
-#include "librpc/gen_ndr/misc.h"
+#include "librpc/gen_ndr/server_id.h"
 #include "librpc/rpc/dcerpc.h"
 #include "librpc/ndr/libndr.h"
 
@@ -66,7 +66,7 @@ struct dcesrv_interface {
        NTSTATUS (*ndr_push)(struct dcesrv_call_state *, TALLOC_CTX *, struct ndr_push *, const void *);
 
        /* for any private use by the interface code */
-       const void *private;
+       const void *private_data;
 };
 
 enum dcesrv_call_list {
@@ -101,13 +101,14 @@ struct dcesrv_call_state {
         */
 #define DCESRV_CALL_STATE_FLAG_ASYNC (1<<0)
 #define DCESRV_CALL_STATE_FLAG_MAY_ASYNC (1<<1)
+#define DCESRV_CALL_STATE_FLAG_HEADER_SIGNING (1<<2)
        uint32_t state_flags;
 
        /* the time the request arrived in the server */
        struct timeval time;
 
        /* the backend can use this event context for async replies */
-       struct event_context *event_ctx;
+       struct tevent_context *event_ctx;
 
        /* the message_context that will be used for async replies */
        struct messaging_context *msg_ctx;
@@ -152,6 +153,8 @@ struct dcesrv_connection_context {
        struct dcesrv_connection_context *next, *prev;
        uint32_t context_id;
 
+       uint32_t assoc_group_id;
+
        /* the connection this is on */
        struct dcesrv_connection *conn;
 
@@ -159,7 +162,7 @@ struct dcesrv_connection_context {
        const struct dcesrv_interface *iface;
 
        /* private data for the interface implementation */
-       void *private;
+       void *private_data;
 
        /* current rpc handles - this is really the wrong scope for
           them, but it will do for now */
@@ -196,7 +199,7 @@ struct dcesrv_connection {
        struct dcesrv_auth auth_state;
 
        /* the event_context that will be used for this connection */
-       struct event_context *event_ctx;
+       struct tevent_context *event_ctx;
 
        /* the message_context that will be used for this connection */
        struct messaging_context *msg_ctx;
@@ -209,6 +212,8 @@ struct dcesrv_connection {
 
        bool processing;
 
+       const char *packet_log_dir;
+
        /* this is the default state_flags for dcesrv_call_state structs */
        uint32_t state_flags;
 
@@ -296,7 +301,7 @@ NTSTATUS dcesrv_endpoint_search_connect(struct dcesrv_context *dce_ctx,
                                        TALLOC_CTX *mem_ctx,
                                        const struct dcerpc_binding *ep_description,
                                        struct auth_session_info *session_info,
-                                       struct event_context *event_ctx,
+                                       struct tevent_context *event_ctx,
                                        struct messaging_context *msg_ctx,
                                        struct server_id server_id,
                                        uint32_t state_flags,
@@ -309,7 +314,7 @@ NTSTATUS dcesrv_endpoint_connect(struct dcesrv_context *dce_ctx,
                                 TALLOC_CTX *mem_ctx,
                                 const struct dcesrv_endpoint *ep,
                                 struct auth_session_info *session_info,
-                                struct event_context *event_ctx,
+                                struct tevent_context *event_ctx,
                                 struct messaging_context *msg_ctx,
                                 struct server_id server_id,
                                 uint32_t state_flags,
@@ -329,5 +334,43 @@ struct socket_address *dcesrv_connection_get_peer_addr(struct dcesrv_connection
 
 NTSTATUS dcesrv_fetch_session_key(struct dcesrv_connection *p, DATA_BLOB *session_key);
 
+/* a useful macro for generating a RPC fault in the backend code */
+#define DCESRV_FAULT(code) do { \
+       dce_call->fault_code = code; \
+       return r->out.result; \
+} while(0)
+
+/* a useful macro for generating a RPC fault in the backend code */
+#define DCESRV_FAULT_VOID(code) do { \
+       dce_call->fault_code = code; \
+       return; \
+} while(0)
+
+/* a useful macro for checking the validity of a dcerpc policy handle
+   and giving the right fault code if invalid */
+#define DCESRV_CHECK_HANDLE(h) do {if (!(h)) DCESRV_FAULT(DCERPC_FAULT_CONTEXT_MISMATCH); } while (0)
+
+/* this checks for a valid policy handle, and gives a fault if an
+   invalid handle or retval if the handle is of the
+   wrong type */
+#define DCESRV_PULL_HANDLE_RETVAL(h, inhandle, t, retval) do { \
+       (h) = dcesrv_handle_fetch(dce_call->context, (inhandle), DCESRV_HANDLE_ANY); \
+       DCESRV_CHECK_HANDLE(h); \
+       if ((t) != DCESRV_HANDLE_ANY && (h)->wire_handle.handle_type != (t)) { \
+               return retval; \
+       } \
+} while (0)
+
+/* this checks for a valid policy handle and gives a dcerpc fault 
+   if its the wrong type of handle */
+#define DCESRV_PULL_HANDLE_FAULT(h, inhandle, t) do { \
+       (h) = dcesrv_handle_fetch(dce_call->context, (inhandle), t); \
+       DCESRV_CHECK_HANDLE(h); \
+} while (0)
+
+#define DCESRV_PULL_HANDLE(h, inhandle, t) DCESRV_PULL_HANDLE_RETVAL(h, inhandle, t, NT_STATUS_INVALID_HANDLE)
+#define DCESRV_PULL_HANDLE_WERR(h, inhandle, t) DCESRV_PULL_HANDLE_RETVAL(h, inhandle, t, WERR_BADFID)
+
+
 
 #endif /* SAMBA_DCERPC_SERVER_H */