00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _NT_DOMAIN_H
00025 #define _NT_DOMAIN_H
00026
00027
00028
00029
00030
00031
00032 typedef struct _prs_struct {
00033 BOOL io;
00034
00035
00036
00037
00038 BOOL bigendian_data;
00039 uint8 align;
00040 BOOL is_dynamic;
00041 uint32 data_offset;
00042 uint32 buffer_size;
00043 uint32 grow_size;
00044 char *data_p;
00045 TALLOC_CTX *mem_ctx;
00046 const char *sess_key;
00047 } prs_struct;
00048
00049
00050
00051
00052
00053 #define MARSHALL 0
00054 #define UNMARSHALL 1
00055
00056 #define MARSHALLING(ps) (!(ps)->io)
00057 #define UNMARSHALLING(ps) ((ps)->io)
00058
00059 #define RPC_BIG_ENDIAN 1
00060 #define RPC_LITTLE_ENDIAN 0
00061
00062 #define RPC_PARSE_ALIGN 4
00063
00064 typedef struct _output_data {
00065
00066
00067
00068 prs_struct rdata;
00069
00070
00071 uint32 data_sent_length;
00072
00073
00074
00075
00076
00077 unsigned char current_pdu[RPC_MAX_PDU_FRAG_LEN];
00078
00079
00080 uint32 current_pdu_len;
00081
00082
00083 uint32 current_pdu_sent;
00084 } output_data;
00085
00086 typedef struct _input_data {
00087
00088
00089
00090
00091
00092
00093 unsigned char current_in_pdu[RPC_MAX_PDU_FRAG_LEN];
00094
00095
00096
00097
00098
00099
00100 uint32 pdu_needed_len;
00101
00102
00103
00104
00105
00106
00107 uint32 pdu_received_len;
00108
00109
00110
00111
00112
00113
00114 prs_struct data;
00115 } input_data;
00116
00117
00118
00119
00120
00121 struct policy {
00122 struct policy *next, *prev;
00123
00124 POLICY_HND pol_hnd;
00125
00126 void *data_ptr;
00127 void (*free_fn)(void *);
00128 };
00129
00130 struct handle_list {
00131 struct policy *Policy;
00132 size_t count;
00133 size_t pipe_ref_count;
00134 };
00135
00136
00137 struct dcinfo {
00138 uint32 sequence;
00139 DOM_CHAL seed_chal;
00140 DOM_CHAL clnt_chal;
00141 DOM_CHAL srv_chal;
00142
00143 unsigned char sess_key[16];
00144 unsigned char mach_pw[16];
00145
00146 fstring mach_acct;
00147
00148 fstring remote_machine;
00149 fstring domain;
00150
00151 BOOL challenge_sent;
00152 BOOL authenticated;
00153 };
00154
00155 typedef struct pipe_rpc_fns {
00156
00157 struct pipe_rpc_fns *next, *prev;
00158
00159
00160
00161 struct api_struct *cmds;
00162 int n_cmds;
00163 uint32 context_id;
00164
00165 } PIPE_RPC_FNS;
00166
00167
00168
00169
00170
00171
00172 enum pipe_auth_type { PIPE_AUTH_TYPE_NONE = 0, PIPE_AUTH_TYPE_NTLMSSP, PIPE_AUTH_TYPE_SCHANNEL,
00173 PIPE_AUTH_TYPE_SPNEGO_NTLMSSP, PIPE_AUTH_TYPE_KRB5, PIPE_AUTH_TYPE_SPNEGO_KRB5 };
00174
00175
00176 enum pipe_auth_level { PIPE_AUTH_LEVEL_NONE = 0,
00177 PIPE_AUTH_LEVEL_CONNECT = 1,
00178 PIPE_AUTH_LEVEL_INTEGRITY = 5,
00179 PIPE_AUTH_LEVEL_PRIVACY = 6
00180 };
00181
00182
00183 struct kerberos_auth_struct {
00184 const char *service_principal;
00185 DATA_BLOB session_key;
00186 };
00187
00188
00189 struct schannel_auth_struct {
00190 unsigned char sess_key[16];
00191 uint32 seq_num;
00192 };
00193
00194
00195
00196 struct pipe_auth_data {
00197 enum pipe_auth_type auth_type;
00198 enum pipe_auth_level auth_level;
00199 union {
00200 struct schannel_auth_struct *schannel_auth;
00201 AUTH_NTLMSSP_STATE *auth_ntlmssp_state;
00202
00203 } a_u;
00204 void (*auth_data_free_func)(struct pipe_auth_data *);
00205 };
00206
00207
00208
00209
00210
00211
00212 typedef struct pipes_struct {
00213 struct pipes_struct *next, *prev;
00214
00215 connection_struct *conn;
00216 uint16 vuid;
00217
00218 fstring name;
00219 fstring pipe_srv_name;
00220
00221
00222
00223
00224 PIPE_RPC_FNS *contexts;
00225
00226 RPC_HDR hdr;
00227 RPC_HDR_REQ hdr_req;
00228
00229
00230 TALLOC_CTX *pipe_state_mem_ctx;
00231
00232 struct pipe_auth_data auth;
00233
00234 struct dcinfo *dc;
00235
00236
00237
00238
00239 fstring user_name;
00240 fstring domain;
00241 fstring wks;
00242
00243
00244
00245
00246
00247 fstring pipe_user_name;
00248 struct current_user pipe_user;
00249 DATA_BLOB session_key;
00250
00251
00252
00253
00254
00255 BOOL pipe_bound;
00256
00257
00258
00259
00260
00261 BOOL fault_state;
00262
00263
00264
00265
00266
00267 BOOL bad_handle_fault_state;
00268
00269
00270
00271
00272
00273 BOOL rng_fault_state;
00274
00275
00276
00277
00278
00279 BOOL endian;
00280
00281
00282
00283
00284
00285 input_data in_data;
00286
00287
00288
00289
00290
00291 output_data out_data;
00292
00293
00294
00295 TALLOC_CTX *mem_ctx;
00296
00297
00298 struct handle_list *pipe_handles;
00299
00300 } pipes_struct;
00301
00302 typedef struct smb_np_struct {
00303 struct smb_np_struct *next, *prev;
00304 int pnum;
00305 connection_struct *conn;
00306 uint16 vuid;
00307 BOOL open;
00308 uint16 device_state;
00309 uint16 priority;
00310 fstring name;
00311
00312
00313
00314 int max_trans_reply;
00315
00316
00317
00318
00319
00320
00321 void *np_state;
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333 void * (*namedpipe_create)(char *pipe_name,
00334 connection_struct *conn, uint16 vuid);
00335
00336
00337
00338
00339
00340
00341
00342 ssize_t (*namedpipe_transact)(void *np_state,
00343 char *data, int len,
00344 char *rdata, int rlen,
00345 BOOL *pipe_outstanding);
00346
00347
00348
00349 ssize_t (*namedpipe_write)(void * np_state,
00350 char *data, size_t n);
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363 ssize_t (*namedpipe_read)(void * np_state,
00364 char *data, size_t max_len,
00365 BOOL *pipe_outstanding);
00366
00367
00368
00369
00370
00371
00372
00373
00374 BOOL (*namedpipe_close)(void * np_state);
00375
00376 } smb_np_struct;
00377
00378 struct api_struct {
00379 const char *name;
00380 uint8 opnum;
00381 BOOL (*fn) (pipes_struct *);
00382 };
00383
00384 typedef struct {
00385 uint32 rid;
00386 const char *name;
00387 } rid_name;
00388
00389
00390
00391
00392
00393 #define PRINT_INFO_FN(fn)\
00394 void (*fn)(const char*, uint32, uint32, void *const *const)
00395 #define JOB_INFO_FN(fn)\
00396 void (*fn)(const char*, const char*, uint32, uint32, void *const *const)
00397
00398
00399
00400 typedef struct {
00401 uint32 size;
00402 prs_struct prs;
00403 uint32 struct_start;
00404 uint32 string_at_end;
00405 } RPC_BUFFER;
00406
00407 #endif