summaryrefslogtreecommitdiff
path: root/source4/rpc_server/common/common.h
diff options
context:
space:
mode:
Diffstat (limited to 'source4/rpc_server/common/common.h')
-rw-r--r--source4/rpc_server/common/common.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/source4/rpc_server/common/common.h b/source4/rpc_server/common/common.h
index 17b76840af..afc238f6b6 100644
--- a/source4/rpc_server/common/common.h
+++ b/source4/rpc_server/common/common.h
@@ -34,3 +34,14 @@
/* 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 NT_STATUS_INVALID_HANDLE if the handle is of the
+ wrong type */
+#define DCESRV_PULL_HANDLE(h, inhandle, t) do { \
+ (h) = dcesrv_handle_fetch(dce_call->conn, (inhandle), DCESRV_HANDLE_ANY); \
+ DCESRV_CHECK_HANDLE(h); \
+ if ((t) != DCESRV_HANDLE_ANY && (h)->wire_handle.handle_type != (t)) { \
+ return NT_STATUS_INVALID_HANDLE; \
+ } \
+} while (0)