Ignore:
Timestamp:
Nov 27, 2012, 4:43:17 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: updated trunk to 3.6.0

Location:
trunk/server
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/source4/librpc/rpc/dcerpc.h

    r414 r745  
    2525 * the so version number. */
    2626
    27 #ifndef __DCERPC_H__
    28 #define __DCERPC_H__
     27#ifndef __S4_DCERPC_H__
     28#define __S4_DCERPC_H__
    2929
    3030#include "../lib/util/data_blob.h"
    3131#include "librpc/gen_ndr/dcerpc.h"
    3232#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
     35struct tevent_context;
     36struct tevent_req;
     37struct dcerpc_binding_handle;
     38struct tstream_context;
    3839
    3940/*
    4041  this defines a generic security context for signed/sealed dcerpc pipes.
    4142*/
    42 struct dcerpc_connection;
     43struct dcecli_connection;
    4344struct gensec_settings;
    44 struct dcerpc_security {
     45struct dcecli_security {
    4546        struct dcerpc_auth *auth_info;
    4647        struct gensec_security *generic_state;
    4748
    4849        /* get the session key */
    49         NTSTATUS (*session_key)(struct dcerpc_connection *, DATA_BLOB *);
     50        NTSTATUS (*session_key)(struct dcecli_connection *, DATA_BLOB *);
    5051};
    5152
     
    5354  this holds the information that is not specific to a particular rpc context_id
    5455*/
    55 struct dcerpc_connection {
     56struct rpc_request;
     57struct dcecli_connection {
    5658        uint32_t call_id;
    5759        uint32_t srv_max_xmit_frag;
    5860        uint32_t srv_max_recv_frag;
    5961        uint32_t flags;
    60         struct dcerpc_security security_state;
     62        struct dcecli_security security_state;
    6163        const char *binding_string;
    6264        struct tevent_context *event_ctx;
    63         struct smb_iconv_convenience *iconv_convenience;
    6465
    6566        /** Directory in which to save ndrdump-parseable files */
     
    7374                void *private_data;
    7475
    75                 NTSTATUS (*shutdown_pipe)(struct dcerpc_connection *, NTSTATUS status);
    76 
    77                 const char *(*peer_name)(struct dcerpc_connection *);
    78 
    79                 const char *(*target_hostname)(struct dcerpc_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 *);
    8081
    8182                /* send a request to the server */
    82                 NTSTATUS (*send_request)(struct dcerpc_connection *, DATA_BLOB *, bool trigger_read);
     83                NTSTATUS (*send_request)(struct dcecli_connection *, DATA_BLOB *, bool trigger_read);
    8384
    8485                /* send a read request to the server */
    85                 NTSTATUS (*send_read)(struct dcerpc_connection *);
     86                NTSTATUS (*send_read)(struct dcecli_connection *);
    8687
    8788                /* a callback to the dcerpc code when a full fragment
    8889                   has been received */
    89                 void (*recv_data)(struct dcerpc_connection *, DATA_BLOB *, NTSTATUS status);
     90                void (*recv_data)(struct dcecli_connection *, DATA_BLOB *, NTSTATUS status);
    9091        } transport;
    9192
     
    104105*/
    105106struct dcerpc_pipe {
     107        struct dcerpc_binding_handle *binding_handle;
     108
    106109        uint32_t context_id;
    107110
     
    111114        struct ndr_syntax_id transfer_syntax;
    112115
    113         struct dcerpc_connection *conn;
     116        struct dcecli_connection *conn;
    114117        struct dcerpc_binding *binding;
    115118
     
    123126/* default timeout for all rpc requests, in seconds */
    124127#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 };
    189128
    190129
     
    199138
    200139
    201 enum rpc_request_state {
    202         RPC_REQUEST_QUEUED,
    203         RPC_REQUEST_PENDING,
    204         RPC_REQUEST_DONE
    205 };
    206 
    207 /*
    208   handle for an async dcerpc request
    209 */
    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 requests
    221            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 
    245140struct epm_tower;
    246141struct epm_floor;
     
    257152                             struct tevent_context *ev,
    258153                             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);
    267154const 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);
     155struct dcerpc_pipe *dcerpc_pipe_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev);
    270156NTSTATUS dcerpc_pipe_open_smb(struct dcerpc_pipe *p,
    271157                              struct smbcli_tree *tree,
     
    278164NTSTATUS dcerpc_secondary_connection_recv(struct composite_context *c,
    279165                                          struct dcerpc_pipe **p2);
    280 NTSTATUS dcerpc_parse_binding(TALLOC_CTX *mem_ctx, const char *s, struct dcerpc_binding **b_out);
    281166
    282167struct composite_context* dcerpc_pipe_connect_b_send(TALLOC_CTX *parent_ctx,
     
    297182                               struct tevent_context *ev,
    298183                               struct loadparm_context *lp_ctx);
    299 const char *dcerpc_errstr(TALLOC_CTX *mem_ctx, uint32_t fault_code);
    300184
    301185NTSTATUS dcerpc_pipe_auth(TALLOC_CTX *mem_ctx,
     
    305189                          struct cli_credentials *credentials,
    306190                          struct loadparm_context *lp_ctx);
    307 char *dcerpc_binding_string(TALLOC_CTX *mem_ctx, const struct dcerpc_binding *b);
    308191NTSTATUS dcerpc_secondary_connection(struct dcerpc_pipe *p,
    309192                                     struct dcerpc_pipe **p2,
     
    317200struct tevent_context *dcerpc_event_context(struct dcerpc_pipe *p);
    318201NTSTATUS dcerpc_init(struct loadparm_context *lp_ctx);
    319 struct smbcli_tree *dcerpc_smb_tree(struct dcerpc_connection *c);
    320 uint16_t dcerpc_smb_fnum(struct dcerpc_connection *c);
     202struct smbcli_tree *dcerpc_smb_tree(struct dcecli_connection *c);
     203uint16_t dcerpc_smb_fnum(struct dcecli_connection *c);
    321204NTSTATUS dcerpc_secondary_context(struct dcerpc_pipe *p,
    322205                                  struct dcerpc_pipe **pp2,
     
    357240                                                           struct dcerpc_binding *b);
    358241void 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
    390246
    391247enum dcerpc_transport_t dcerpc_transport_by_endpoint_protocol(int prot);
     
    393249const char *dcerpc_floor_get_rhs_data(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor);
    394250
    395 #endif /* __DCERPC_H__ */
     251#endif /* __S4_DCERPC_H__ */
Note: See TracChangeset for help on using the changeset viewer.