Changeset 745 for trunk/server/source4/librpc/rpc/dcerpc.h
- Timestamp:
- Nov 27, 2012, 4:43:17 PM (13 years ago)
- Location:
- trunk/server
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server
- Property svn:mergeinfo changed
/vendor/current merged: 581,587,591,594,597,600,615,618,740
- Property svn:mergeinfo changed
-
trunk/server/source4/librpc/rpc/dcerpc.h
r414 r745 25 25 * the so version number. */ 26 26 27 #ifndef __ DCERPC_H__28 #define __ DCERPC_H__27 #ifndef __S4_DCERPC_H__ 28 #define __S4_DCERPC_H__ 29 29 30 30 #include "../lib/util/data_blob.h" 31 31 #include "librpc/gen_ndr/dcerpc.h" 32 32 #include "../librpc/ndr/libndr.h" 33 34 enum dcerpc_transport_t { 35 NCA_UNKNOWN, NCACN_NP, NCACN_IP_TCP, NCACN_IP_UDP, NCACN_VNS_IPC, 36 NCACN_VNS_SPP, NCACN_AT_DSP, NCADG_AT_DDP, NCALRPC, NCACN_UNIX_STREAM, 37 NCADG_UNIX_DGRAM, NCACN_HTTP, NCADG_IPX, NCACN_SPX }; 33 #include "../librpc/rpc/rpc_common.h" 34 35 struct tevent_context; 36 struct tevent_req; 37 struct dcerpc_binding_handle; 38 struct tstream_context; 38 39 39 40 /* 40 41 this defines a generic security context for signed/sealed dcerpc pipes. 41 42 */ 42 struct dce rpc_connection;43 struct dcecli_connection; 43 44 struct gensec_settings; 44 struct dce rpc_security {45 struct dcecli_security { 45 46 struct dcerpc_auth *auth_info; 46 47 struct gensec_security *generic_state; 47 48 48 49 /* get the session key */ 49 NTSTATUS (*session_key)(struct dce rpc_connection *, DATA_BLOB *);50 NTSTATUS (*session_key)(struct dcecli_connection *, DATA_BLOB *); 50 51 }; 51 52 … … 53 54 this holds the information that is not specific to a particular rpc context_id 54 55 */ 55 struct dcerpc_connection { 56 struct rpc_request; 57 struct dcecli_connection { 56 58 uint32_t call_id; 57 59 uint32_t srv_max_xmit_frag; 58 60 uint32_t srv_max_recv_frag; 59 61 uint32_t flags; 60 struct dce rpc_security security_state;62 struct dcecli_security security_state; 61 63 const char *binding_string; 62 64 struct tevent_context *event_ctx; 63 struct smb_iconv_convenience *iconv_convenience;64 65 65 66 /** Directory in which to save ndrdump-parseable files */ … … 73 74 void *private_data; 74 75 75 NTSTATUS (*shutdown_pipe)(struct dce rpc_connection *, NTSTATUS status);76 77 const char *(*peer_name)(struct dce rpc_connection *);78 79 const char *(*target_hostname)(struct dce rpc_connection *);76 NTSTATUS (*shutdown_pipe)(struct dcecli_connection *, NTSTATUS status); 77 78 const char *(*peer_name)(struct dcecli_connection *); 79 80 const char *(*target_hostname)(struct dcecli_connection *); 80 81 81 82 /* send a request to the server */ 82 NTSTATUS (*send_request)(struct dce rpc_connection *, DATA_BLOB *, bool trigger_read);83 NTSTATUS (*send_request)(struct dcecli_connection *, DATA_BLOB *, bool trigger_read); 83 84 84 85 /* send a read request to the server */ 85 NTSTATUS (*send_read)(struct dce rpc_connection *);86 NTSTATUS (*send_read)(struct dcecli_connection *); 86 87 87 88 /* a callback to the dcerpc code when a full fragment 88 89 has been received */ 89 void (*recv_data)(struct dce rpc_connection *, DATA_BLOB *, NTSTATUS status);90 void (*recv_data)(struct dcecli_connection *, DATA_BLOB *, NTSTATUS status); 90 91 } transport; 91 92 … … 104 105 */ 105 106 struct dcerpc_pipe { 107 struct dcerpc_binding_handle *binding_handle; 108 106 109 uint32_t context_id; 107 110 … … 111 114 struct ndr_syntax_id transfer_syntax; 112 115 113 struct dce rpc_connection *conn;116 struct dcecli_connection *conn; 114 117 struct dcerpc_binding *binding; 115 118 … … 123 126 /* default timeout for all rpc requests, in seconds */ 124 127 #define DCERPC_REQUEST_TIMEOUT 60 125 126 127 /* dcerpc pipe flags */128 #define DCERPC_DEBUG_PRINT_IN (1<<0)129 #define DCERPC_DEBUG_PRINT_OUT (1<<1)130 #define DCERPC_DEBUG_PRINT_BOTH (DCERPC_DEBUG_PRINT_IN | DCERPC_DEBUG_PRINT_OUT)131 132 #define DCERPC_DEBUG_VALIDATE_IN (1<<2)133 #define DCERPC_DEBUG_VALIDATE_OUT (1<<3)134 #define DCERPC_DEBUG_VALIDATE_BOTH (DCERPC_DEBUG_VALIDATE_IN | DCERPC_DEBUG_VALIDATE_OUT)135 136 #define DCERPC_CONNECT (1<<4)137 #define DCERPC_SIGN (1<<5)138 #define DCERPC_SEAL (1<<6)139 140 #define DCERPC_PUSH_BIGENDIAN (1<<7)141 #define DCERPC_PULL_BIGENDIAN (1<<8)142 143 #define DCERPC_SCHANNEL (1<<9)144 145 #define DCERPC_ANON_FALLBACK (1<<10)146 147 /* use a 128 bit session key */148 #define DCERPC_SCHANNEL_128 (1<<12)149 150 /* check incoming pad bytes */151 #define DCERPC_DEBUG_PAD_CHECK (1<<13)152 153 /* set LIBNDR_FLAG_REF_ALLOC flag when decoding NDR */154 #define DCERPC_NDR_REF_ALLOC (1<<14)155 156 #define DCERPC_AUTH_OPTIONS (DCERPC_SEAL|DCERPC_SIGN|DCERPC_SCHANNEL|DCERPC_AUTH_SPNEGO|DCERPC_AUTH_KRB5|DCERPC_AUTH_NTLM)157 158 /* select spnego auth */159 #define DCERPC_AUTH_SPNEGO (1<<15)160 161 /* select krb5 auth */162 #define DCERPC_AUTH_KRB5 (1<<16)163 164 #define DCERPC_SMB2 (1<<17)165 166 /* select NTLM auth */167 #define DCERPC_AUTH_NTLM (1<<18)168 169 /* this triggers the DCERPC_PFC_FLAG_CONC_MPX flag in the bind request */170 #define DCERPC_CONCURRENT_MULTIPLEX (1<<19)171 172 /* this triggers the DCERPC_PFC_FLAG_SUPPORT_HEADER_SIGN flag in the bind request */173 #define DCERPC_HEADER_SIGNING (1<<20)174 175 /* use NDR64 transport */176 #define DCERPC_NDR64 (1<<21)177 178 /* this describes a binding to a particular transport/pipe */179 struct dcerpc_binding {180 enum dcerpc_transport_t transport;181 struct ndr_syntax_id object;182 const char *host;183 const char *target_hostname;184 const char *endpoint;185 const char **options;186 uint32_t flags;187 uint32_t assoc_group_id;188 };189 128 190 129 … … 199 138 200 139 201 enum rpc_request_state {202 RPC_REQUEST_QUEUED,203 RPC_REQUEST_PENDING,204 RPC_REQUEST_DONE205 };206 207 /*208 handle for an async dcerpc request209 */210 struct rpc_request {211 struct rpc_request *next, *prev;212 struct dcerpc_pipe *p;213 NTSTATUS status;214 uint32_t call_id;215 enum rpc_request_state state;216 DATA_BLOB payload;217 uint32_t flags;218 uint32_t fault_code;219 220 /* this is used to distinguish bind and alter_context requests221 from normal requests */222 void (*recv_handler)(struct rpc_request *conn,223 DATA_BLOB *blob, struct ncacn_packet *pkt);224 225 const struct GUID *object;226 uint16_t opnum;227 DATA_BLOB request_data;228 bool async_call;229 bool ignore_timeout;230 231 /* use by the ndr level async recv call */232 struct {233 const struct ndr_interface_table *table;234 uint32_t opnum;235 void *struct_ptr;236 TALLOC_CTX *mem_ctx;237 } ndr;238 239 struct {240 void (*callback)(struct rpc_request *);241 void *private_data;242 } async;243 };244 245 140 struct epm_tower; 246 141 struct epm_floor; … … 257 152 struct tevent_context *ev, 258 153 struct loadparm_context *lp_ctx); 259 NTSTATUS dcerpc_ndr_request_recv(struct rpc_request *req);260 struct rpc_request *dcerpc_ndr_request_send(struct dcerpc_pipe *p,261 const struct GUID *object,262 const struct ndr_interface_table *table,263 uint32_t opnum,264 bool async,265 TALLOC_CTX *mem_ctx,266 void *r);267 154 const char *dcerpc_server_name(struct dcerpc_pipe *p); 268 struct dcerpc_pipe *dcerpc_pipe_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev, 269 struct smb_iconv_convenience *ic); 155 struct dcerpc_pipe *dcerpc_pipe_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev); 270 156 NTSTATUS dcerpc_pipe_open_smb(struct dcerpc_pipe *p, 271 157 struct smbcli_tree *tree, … … 278 164 NTSTATUS dcerpc_secondary_connection_recv(struct composite_context *c, 279 165 struct dcerpc_pipe **p2); 280 NTSTATUS dcerpc_parse_binding(TALLOC_CTX *mem_ctx, const char *s, struct dcerpc_binding **b_out);281 166 282 167 struct composite_context* dcerpc_pipe_connect_b_send(TALLOC_CTX *parent_ctx, … … 297 182 struct tevent_context *ev, 298 183 struct loadparm_context *lp_ctx); 299 const char *dcerpc_errstr(TALLOC_CTX *mem_ctx, uint32_t fault_code);300 184 301 185 NTSTATUS dcerpc_pipe_auth(TALLOC_CTX *mem_ctx, … … 305 189 struct cli_credentials *credentials, 306 190 struct loadparm_context *lp_ctx); 307 char *dcerpc_binding_string(TALLOC_CTX *mem_ctx, const struct dcerpc_binding *b);308 191 NTSTATUS dcerpc_secondary_connection(struct dcerpc_pipe *p, 309 192 struct dcerpc_pipe **p2, … … 317 200 struct tevent_context *dcerpc_event_context(struct dcerpc_pipe *p); 318 201 NTSTATUS dcerpc_init(struct loadparm_context *lp_ctx); 319 struct smbcli_tree *dcerpc_smb_tree(struct dce rpc_connection *c);320 uint16_t dcerpc_smb_fnum(struct dce rpc_connection *c);202 struct smbcli_tree *dcerpc_smb_tree(struct dcecli_connection *c); 203 uint16_t dcerpc_smb_fnum(struct dcecli_connection *c); 321 204 NTSTATUS dcerpc_secondary_context(struct dcerpc_pipe *p, 322 205 struct dcerpc_pipe **pp2, … … 357 240 struct dcerpc_binding *b); 358 241 void dcerpc_log_packet(const char *lockdir, 359 const struct ndr_interface_table *ndr, 360 uint32_t opnum, uint32_t flags, 361 DATA_BLOB *pkt); 362 NTSTATUS dcerpc_binding_build_tower(TALLOC_CTX *mem_ctx, 363 const struct dcerpc_binding *binding, 364 struct epm_tower *tower); 365 366 NTSTATUS dcerpc_floor_get_lhs_data(const struct epm_floor *epm_floor, struct ndr_syntax_id *syntax); 367 368 enum dcerpc_transport_t dcerpc_transport_by_tower(const struct epm_tower *tower); 369 const char *derpc_transport_string_by_transport(enum dcerpc_transport_t t); 370 371 NTSTATUS dcerpc_ndr_request(struct dcerpc_pipe *p, 372 const struct GUID *object, 373 const struct ndr_interface_table *table, 374 uint32_t opnum, 375 TALLOC_CTX *mem_ctx, 376 void *r); 377 378 NTSTATUS dcerpc_binding_from_tower(TALLOC_CTX *mem_ctx, 379 struct epm_tower *tower, 380 struct dcerpc_binding **b_out); 381 382 NTSTATUS dcerpc_request(struct dcerpc_pipe *p, 383 struct GUID *object, 384 uint16_t opnum, 385 TALLOC_CTX *mem_ctx, 386 DATA_BLOB *stub_data_in, 387 DATA_BLOB *stub_data_out); 388 389 typedef NTSTATUS (*dcerpc_call_fn) (struct dcerpc_pipe *, TALLOC_CTX *, void *); 242 const struct ndr_interface_table *ndr, 243 uint32_t opnum, uint32_t flags, 244 const DATA_BLOB *pkt); 245 390 246 391 247 enum dcerpc_transport_t dcerpc_transport_by_endpoint_protocol(int prot); … … 393 249 const char *dcerpc_floor_get_rhs_data(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor); 394 250 395 #endif /* __ DCERPC_H__ */251 #endif /* __S4_DCERPC_H__ */
Note:
See TracChangeset
for help on using the changeset viewer.