From 593f3208e68131bb2963fe08cbd26a72ec9b52f2 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 15 Sep 2009 20:29:35 +0200 Subject: [PATCH] dcerpc ... --- source4/librpc/rpc/dcerpc.h | 113 ++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/source4/librpc/rpc/dcerpc.h b/source4/librpc/rpc/dcerpc.h index ef830865e8bf..635fa2651827 100644 --- a/source4/librpc/rpc/dcerpc.h +++ b/source4/librpc/rpc/dcerpc.h @@ -138,6 +138,119 @@ struct dcerpc_pipe { #define DCERPC_REQUEST_TIMEOUT 60 +/* dcerpc pipe flags */ +#define DCERPC_DEBUG_PRINT_IN (1<<0) +#define DCERPC_DEBUG_PRINT_OUT (1<<1) +#define DCERPC_DEBUG_PRINT_BOTH (DCERPC_DEBUG_PRINT_IN | DCERPC_DEBUG_PRINT_OUT) + +#define DCERPC_DEBUG_VALIDATE_IN (1<<2) +#define DCERPC_DEBUG_VALIDATE_OUT (1<<3) +#define DCERPC_DEBUG_VALIDATE_BOTH (DCERPC_DEBUG_VALIDATE_IN | DCERPC_DEBUG_VALIDATE_OUT) + +#define DCERPC_CONNECT (1<<4) +#define DCERPC_SIGN (1<<5) +#define DCERPC_SEAL (1<<6) + +#define DCERPC_PUSH_BIGENDIAN (1<<7) +#define DCERPC_PULL_BIGENDIAN (1<<8) + +#define DCERPC_SCHANNEL (1<<9) + +#define DCERPC_ANON_FALLBACK (1<<10) + +/* use a 128 bit session key */ +#define DCERPC_SCHANNEL_128 (1<<12) + +/* check incoming pad bytes */ +#define DCERPC_DEBUG_PAD_CHECK (1<<13) + +/* set LIBNDR_FLAG_REF_ALLOC flag when decoding NDR */ +#define DCERPC_NDR_REF_ALLOC (1<<14) + +#define DCERPC_AUTH_OPTIONS (DCERPC_SEAL|DCERPC_SIGN|DCERPC_SCHANNEL|DCERPC_AUTH_SPNEGO|DCERPC_AUTH_KRB5|DCERPC_AUTH_NTLM) + +/* select spnego auth */ +#define DCERPC_AUTH_SPNEGO (1<<15) + +/* select krb5 auth */ +#define DCERPC_AUTH_KRB5 (1<<16) + +#define DCERPC_SMB2 (1<<17) + +/* select NTLM auth */ +#define DCERPC_AUTH_NTLM (1<<18) + +/* this triggers the DCERPC_PFC_FLAG_CONC_MPX flag in the bind request */ +#define DCERPC_CONCURRENT_MULTIPLEX (1<<19) + +/* this triggers the DCERPC_PFC_FLAG_SUPPORT_HEADER_SIGN flag in the bind request */ +#define DCERPC_HEADER_SIGNING (1<<20) + +/* use NDR64 transport */ +#define DCERPC_NDR64 (1<<21) + +/* this describes a binding to a particular transport/pipe */ +struct dcerpc_binding { + enum dcerpc_transport_t transport; + struct ndr_syntax_id object; + const char *host; + const char *target_hostname; + const char *endpoint; + const char **options; + uint32_t flags; + uint32_t assoc_group_id; +}; +#if 0 +struct dcerpc_pdu { + void *bla; +}; + +struct dcerpc_transport_connection { + enum dcerpc_transport_t transport; + struct tstream_context *stream; + uint32_t call_id; + uint32_t srv_max_xmit_frag; + uint32_t srv_max_recv_frag; + uint32_t flags; + struct smb_iconv_convenience *iconv_convenience; + struct tevent_queue *send_queue; +}; + +struct dcerpc_auth_context { + uint32_t context_id; + uint8_t auth_level; + struct gensec_context *gensec; +}; + +struct dcerpc_syntax_context { + uint32_t context_id; + struct ndr_syntax_id object; + struct ndr_syntax_id interface_id; + uint32_t ndr_flags; + struct ndr_table *table; +}; + +struct dcerpc_established_binding { + struct dcerpc_transport_connection *transport; + struct dcerpc_auth_context *auth; + struct dcerpc_syntax_context *syntax; +}; + +struct tevent_req *dcerpc_request_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct dcerpc_transport_connection *conn, + struct dcerpc_auth_context *auth, + struct dcerpc_syntax_context *syntax, + uint32_t opnum; + void *r); +NTSTATUS dcerpc_request_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx); + +NTSTATUS dcerpc_foo(struct dcerpc_established_binding *binding, + int param1, /* in */ + int *val, /* ref, out */ + WERROR *result); +#endif + struct dcerpc_pipe_connect { struct dcerpc_pipe *pipe; struct dcerpc_binding *binding; -- 2.34.1