rpc_parse/parse_rpc.c

ソースコードを見る。

関数

const char * cli_get_pipe_name (int pipe_idx)
void init_rpc_hdr (RPC_HDR *hdr, enum RPC_PKT_TYPE pkt_type, uint8 flags, uint32 call_id, int data_len, int auth_len)
BOOL smb_io_rpc_hdr (const char *desc, RPC_HDR *rpc, prs_struct *ps, int depth)
static BOOL smb_io_rpc_iface (const char *desc, RPC_IFACE *ifc, prs_struct *ps, int depth)
static void init_rpc_addr_str (RPC_ADDR_STR *str, const char *name)
static BOOL smb_io_rpc_addr_str (const char *desc, RPC_ADDR_STR *str, prs_struct *ps, int depth)
static void init_rpc_hdr_bba (RPC_HDR_BBA *bba, uint16 max_tsize, uint16 max_rsize, uint32 assoc_gid)
static BOOL smb_io_rpc_hdr_bba (const char *desc, RPC_HDR_BBA *rpc, prs_struct *ps, int depth)
void init_rpc_context (RPC_CONTEXT *rpc_ctx, uint16 context_id, RPC_IFACE *abstract, RPC_IFACE *transfer)
void init_rpc_hdr_rb (RPC_HDR_RB *rpc, uint16 max_tsize, uint16 max_rsize, uint32 assoc_gid, RPC_CONTEXT *context)
BOOL smb_io_rpc_context (const char *desc, RPC_CONTEXT *rpc_ctx, prs_struct *ps, int depth)
BOOL smb_io_rpc_hdr_rb (const char *desc, RPC_HDR_RB *rpc, prs_struct *ps, int depth)
static void init_rpc_results (RPC_RESULTS *res, uint8 num_results, uint16 result, uint16 reason)
static BOOL smb_io_rpc_results (const char *desc, RPC_RESULTS *res, prs_struct *ps, int depth)
void init_rpc_hdr_ba (RPC_HDR_BA *rpc, uint16 max_tsize, uint16 max_rsize, uint32 assoc_gid, const char *pipe_addr, uint8 num_results, uint16 result, uint16 reason, RPC_IFACE *transfer)
BOOL smb_io_rpc_hdr_ba (const char *desc, RPC_HDR_BA *rpc, prs_struct *ps, int depth)
void init_rpc_hdr_req (RPC_HDR_REQ *hdr, uint32 alloc_hint, uint16 opnum)
BOOL smb_io_rpc_hdr_req (const char *desc, RPC_HDR_REQ *rpc, prs_struct *ps, int depth)
BOOL smb_io_rpc_hdr_resp (const char *desc, RPC_HDR_RESP *rpc, prs_struct *ps, int depth)
BOOL smb_io_rpc_hdr_fault (const char *desc, RPC_HDR_FAULT *rpc, prs_struct *ps, int depth)
void init_rpc_hdr_auth (RPC_HDR_AUTH *rai, uint8 auth_type, uint8 auth_level, uint8 auth_pad_len, uint32 auth_context_id)
BOOL smb_io_rpc_hdr_auth (const char *desc, RPC_HDR_AUTH *rai, prs_struct *ps, int depth)
BOOL rpc_auth_verifier_chk (RPC_AUTH_VERIFIER *rav, const char *signature, uint32 msg_type)
void init_rpc_auth_verifier (RPC_AUTH_VERIFIER *rav, const char *signature, uint32 msg_type)
BOOL smb_io_rpc_auth_verifier (const char *desc, RPC_AUTH_VERIFIER *rav, prs_struct *ps, int depth)
BOOL smb_io_rpc_schannel_verifier (const char *desc, RPC_AUTH_VERIFIER *rav, prs_struct *ps, int depth)
void init_rpc_auth_schannel_neg (RPC_AUTH_SCHANNEL_NEG *neg, const char *domain, const char *myname)
BOOL smb_io_rpc_auth_schannel_neg (const char *desc, RPC_AUTH_SCHANNEL_NEG *neg, prs_struct *ps, int depth)
BOOL smb_io_rpc_auth_schannel_chk (const char *desc, int auth_len, RPC_AUTH_SCHANNEL_CHK *chk, prs_struct *ps, int depth)

変数

pipe_id_info pipe_names []


関数

const char* cli_get_pipe_name ( int  pipe_idx  ) 

parse_rpc.c233 行で定義されています。

参照先 pipe_id_info::client_pipepipe_names.

参照元 cli_rpc_pipe_open()cli_rpc_pipe_open_noauth()do_cmd()run_rpc_command().

00234 {
00235         return &pipe_names[pipe_idx].client_pipe[5];
00236 }

void init_rpc_hdr ( RPC_HDR hdr,
enum RPC_PKT_TYPE  pkt_type,
uint8  flags,
uint32  call_id,
int  data_len,
int  auth_len 
)

parse_rpc.c242 行で定義されています。

参照先 rpc_hdr_info::auth_lenrpc_hdr_info::call_idrpc_hdr_info::flagsrpc_hdr_info::frag_lenrpc_hdr_info::majorrpc_hdr_info::minorrpc_hdr_info::pack_typerpc_hdr_info::pkt_type.

参照元 api_pipe_alter_context()create_bind_or_alt_ctx_internal()create_rpc_bind_auth3()rpc_api_pipe_req()setup_bind_nak()setup_cancel_ack_reply()setup_fault_pdu().

00244 {
00245         hdr->major        = 5;               /* RPC version 5 */
00246         hdr->minor        = 0;               /* minor version 0 */
00247         hdr->pkt_type     = pkt_type;        /* RPC packet type */
00248         hdr->flags        = flags;           /* dce/rpc flags */
00249         hdr->pack_type[0] = 0x10;            /* little-endian data representation */
00250         hdr->pack_type[1] = 0;               /* packed data representation */
00251         hdr->pack_type[2] = 0;               /* packed data representation */
00252         hdr->pack_type[3] = 0;               /* packed data representation */
00253         hdr->frag_len     = data_len;        /* fragment length, fill in later */
00254         hdr->auth_len     = auth_len;        /* authentication length */
00255         hdr->call_id      = call_id;         /* call identifier - match incoming RPC */
00256 }

BOOL smb_io_rpc_hdr ( const char *  desc,
RPC_HDR rpc,
prs_struct ps,
int  depth 
)

parse_rpc.c262 行で定義されています。

参照先 rpc_hdr_info::auth_lenrpc_hdr_info::call_idrpc_hdr_info::flagsrpc_hdr_info::frag_lenrpc_hdr_info::majorrpc_hdr_info::minorrpc_hdr_info::pack_typerpc_hdr_info::pkt_typeprs_debug().

参照元 api_pipe_alter_context()cli_pipe_get_current_pdu()create_bind_or_alt_ctx_internal()create_next_pdu_noauth()create_next_pdu_ntlmssp()create_next_pdu_schannel()create_rpc_bind_auth3()rpc_api_pipe_req()rpc_finish_spnego_ntlmssp_bind()rpc_pipe_bind()setup_bind_nak()setup_cancel_ack_reply()setup_fault_pdu()unmarshall_rpc_header().

00263 {
00264         if (rpc == NULL)
00265                 return False;
00266 
00267         prs_debug(ps, depth, desc, "smb_io_rpc_hdr");
00268         depth++;
00269 
00270         if(!prs_uint8 ("major     ", ps, depth, &rpc->major))
00271                 return False;
00272 
00273         if(!prs_uint8 ("minor     ", ps, depth, &rpc->minor))
00274                 return False;
00275         if(!prs_uint8 ("pkt_type  ", ps, depth, &rpc->pkt_type))
00276                 return False;
00277         if(!prs_uint8 ("flags     ", ps, depth, &rpc->flags))
00278                 return False;
00279 
00280         /* We always marshall in little endian format. */
00281         if (MARSHALLING(ps))
00282                 rpc->pack_type[0] = 0x10;
00283 
00284         if(!prs_uint8("pack_type0", ps, depth, &rpc->pack_type[0]))
00285                 return False;
00286         if(!prs_uint8("pack_type1", ps, depth, &rpc->pack_type[1]))
00287                 return False;
00288         if(!prs_uint8("pack_type2", ps, depth, &rpc->pack_type[2]))
00289                 return False;
00290         if(!prs_uint8("pack_type3", ps, depth, &rpc->pack_type[3]))
00291                 return False;
00292 
00293         /*
00294          * If reading and pack_type[0] == 0 then the data is in big-endian
00295          * format. Set the flag in the prs_struct to specify reverse-endainness.
00296          */
00297 
00298         if (UNMARSHALLING(ps) && rpc->pack_type[0] == 0) {
00299                 DEBUG(10,("smb_io_rpc_hdr: PDU data format is big-endian. Setting flag.\n"));
00300                 prs_set_endian_data(ps, RPC_BIG_ENDIAN);
00301         }
00302 
00303         if(!prs_uint16("frag_len  ", ps, depth, &rpc->frag_len))
00304                 return False;
00305         if(!prs_uint16("auth_len  ", ps, depth, &rpc->auth_len))
00306                 return False;
00307         if(!prs_uint32("call_id   ", ps, depth, &rpc->call_id))
00308                 return False;
00309         return True;
00310 }

static BOOL smb_io_rpc_iface ( const char *  desc,
RPC_IFACE ifc,
prs_struct ps,
int  depth 
) [static]

parse_rpc.c316 行で定義されています。

参照先 prs_debug()smb_io_uuid()rpc_iface_info::uuidrpc_iface_info::version.

参照元 smb_io_rpc_context()smb_io_rpc_hdr_ba().

00317 {
00318         if (ifc == NULL)
00319                 return False;
00320 
00321         prs_debug(ps, depth, desc, "smb_io_rpc_iface");
00322         depth++;
00323 
00324         if (!prs_align(ps))
00325                 return False;
00326 
00327         if (!smb_io_uuid(  "uuid", &ifc->uuid, ps, depth))
00328                 return False;
00329 
00330         if(!prs_uint32 ("version", ps, depth, &ifc->version))
00331                 return False;
00332 
00333         return True;
00334 }

static void init_rpc_addr_str ( RPC_ADDR_STR str,
const char *  name 
) [static]

parse_rpc.c340 行で定義されています。

参照先 rpc_addr_info::lenrpc_addr_info::str.

参照元 init_rpc_hdr_ba().

00341 {
00342         str->len = strlen(name) + 1;
00343         fstrcpy(str->str, name);
00344 }

static BOOL smb_io_rpc_addr_str ( const char *  desc,
RPC_ADDR_STR str,
prs_struct ps,
int  depth 
) [static]

parse_rpc.c350 行で定義されています。

参照先 rpc_addr_info::lenprs_debug()rpc_addr_info::str.

参照元 smb_io_rpc_hdr_ba().

00351 {
00352         if (str == NULL)
00353                 return False;
00354 
00355         prs_debug(ps, depth, desc, "smb_io_rpc_addr_str");
00356         depth++;
00357         if(!prs_align(ps))
00358                 return False;
00359 
00360         if(!prs_uint16 (      "len", ps, depth, &str->len))
00361                 return False;
00362         if(!prs_uint8s (True, "str", ps, depth, (uchar*)str->str, MIN(str->len, sizeof(str->str)) ))
00363                 return False;
00364         return True;
00365 }

static void init_rpc_hdr_bba ( RPC_HDR_BBA bba,
uint16  max_tsize,
uint16  max_rsize,
uint32  assoc_gid 
) [static]

parse_rpc.c371 行で定義されています。

参照先 rpc_hdr_bba_info::assoc_gidrpc_hdr_bba_info::max_rsizerpc_hdr_bba_info::max_tsize.

参照元 init_rpc_hdr_ba()init_rpc_hdr_rb().

00372 {
00373         bba->max_tsize = max_tsize; /* maximum transmission fragment size (0x1630) */
00374         bba->max_rsize = max_rsize; /* max receive fragment size (0x1630) */   
00375         bba->assoc_gid = assoc_gid; /* associated group id (0x0) */ 
00376 }

static BOOL smb_io_rpc_hdr_bba ( const char *  desc,
RPC_HDR_BBA rpc,
prs_struct ps,
int  depth 
) [static]

parse_rpc.c382 行で定義されています。

参照先 rpc_hdr_bba_info::assoc_gidrpc_hdr_bba_info::max_rsizerpc_hdr_bba_info::max_tsizeprs_debug().

参照元 smb_io_rpc_hdr_ba()smb_io_rpc_hdr_rb().

00383 {
00384         if (rpc == NULL)
00385                 return False;
00386 
00387         prs_debug(ps, depth, desc, "smb_io_rpc_hdr_bba");
00388         depth++;
00389 
00390         if(!prs_uint16("max_tsize", ps, depth, &rpc->max_tsize))
00391                 return False;
00392         if(!prs_uint16("max_rsize", ps, depth, &rpc->max_rsize))
00393                 return False;
00394         if(!prs_uint32("assoc_gid", ps, depth, &rpc->assoc_gid))
00395                 return False;
00396         return True;
00397 }

void init_rpc_context ( RPC_CONTEXT rpc_ctx,
uint16  context_id,
RPC_IFACE abstract,
RPC_IFACE transfer 
)

parse_rpc.c404 行で定義されています。

参照先 rpc_context::abstractrpc_context::context_idrpc_context::num_transfer_syntaxesrpc_context::transfer.

参照元 create_bind_or_alt_ctx_internal().

00405 {
00406         rpc_ctx->context_id   = context_id   ; /* presentation context identifier (0x0) */
00407         rpc_ctx->num_transfer_syntaxes = 1 ; /* the number of syntaxes (has always been 1?)(0x1) */
00408 
00409         /* num and vers. of interface client is using */
00410         rpc_ctx->abstract = *abstract;
00411 
00412         /* vers. of interface to use for replies */
00413         rpc_ctx->transfer = transfer;
00414 }

void init_rpc_hdr_rb ( RPC_HDR_RB rpc,
uint16  max_tsize,
uint16  max_rsize,
uint32  assoc_gid,
RPC_CONTEXT context 
)

parse_rpc.c421 行で定義されています。

参照先 rpc_bind_req_info::bbainit_rpc_hdr_bba()rpc_bind_req_info::num_contextsrpc_bind_req_info::rpc_context.

参照元 create_bind_or_alt_ctx_internal().

00424 {
00425         init_rpc_hdr_bba(&rpc->bba, max_tsize, max_rsize, assoc_gid);
00426 
00427         rpc->num_contexts = 1;
00428         rpc->rpc_context = context;
00429 }

BOOL smb_io_rpc_context ( const char *  desc,
RPC_CONTEXT rpc_ctx,
prs_struct ps,
int  depth 
)

parse_rpc.c435 行で定義されています。

参照先 rpc_context::abstractrpc_context::context_idrpc_context::num_transfer_syntaxessmb_io_rpc_iface()rpc_context::transfer.

参照元 smb_io_rpc_hdr_rb().

00436 {
00437         int i;
00438 
00439         if (rpc_ctx == NULL)
00440                 return False;
00441 
00442         if(!prs_align(ps))
00443                 return False;
00444         if(!prs_uint16("context_id  ", ps, depth, &rpc_ctx->context_id ))
00445                 return False;
00446         if(!prs_uint8 ("num_transfer_syntaxes", ps, depth, &rpc_ctx->num_transfer_syntaxes))
00447                 return False;
00448 
00449         /* num_transfer_syntaxes must not be zero. */
00450         if (rpc_ctx->num_transfer_syntaxes == 0)
00451                 return False;
00452 
00453         if(!smb_io_rpc_iface("", &rpc_ctx->abstract, ps, depth))
00454                 return False;
00455 
00456         if (UNMARSHALLING(ps)) {
00457                 if (!(rpc_ctx->transfer = PRS_ALLOC_MEM(ps, RPC_IFACE, rpc_ctx->num_transfer_syntaxes))) {
00458                         return False;
00459                 }
00460         }
00461 
00462         for (i = 0; i < rpc_ctx->num_transfer_syntaxes; i++ ) {
00463                 if (!smb_io_rpc_iface("", &rpc_ctx->transfer[i], ps, depth))
00464                         return False;
00465         }
00466         return True;
00467 } 

BOOL smb_io_rpc_hdr_rb ( const char *  desc,
RPC_HDR_RB rpc,
prs_struct ps,
int  depth 
)

parse_rpc.c473 行で定義されています。

参照先 rpc_bind_req_info::bbarpc_bind_req_info::num_contextsprs_debug()rpc_bind_req_info::rpc_contextsmb_io_rpc_context()smb_io_rpc_hdr_bba().

参照元 api_pipe_alter_context()create_bind_or_alt_ctx_internal().

00474 {
00475         int i;
00476         
00477         if (rpc == NULL)
00478                 return False;
00479 
00480         prs_debug(ps, depth, desc, "smb_io_rpc_hdr_rb");
00481         depth++;
00482 
00483         if(!smb_io_rpc_hdr_bba("", &rpc->bba, ps, depth))
00484                 return False;
00485 
00486         if(!prs_uint8("num_contexts", ps, depth, &rpc->num_contexts))
00487                 return False;
00488 
00489         /* 3 pad bytes following - will be mopped up by the prs_align in smb_io_rpc_context(). */
00490 
00491         /* num_contexts must not be zero. */
00492         if (rpc->num_contexts == 0)
00493                 return False;
00494 
00495         if (UNMARSHALLING(ps)) {
00496                 if (!(rpc->rpc_context = PRS_ALLOC_MEM(ps, RPC_CONTEXT, rpc->num_contexts))) {
00497                         return False;
00498                 }
00499         }
00500 
00501         for (i = 0; i < rpc->num_contexts; i++ ) {
00502                 if (!smb_io_rpc_context("", &rpc->rpc_context[i], ps, depth))
00503                         return False;
00504         }
00505 
00506         return True;
00507 }

static void init_rpc_results ( RPC_RESULTS res,
uint8  num_results,
uint16  result,
uint16  reason 
) [static]

parse_rpc.c515 行で定義されています。

参照先 rpc_results_info::num_resultsrpc_results_info::reasonrpc_results_info::result.

参照元 init_rpc_hdr_ba().

00517 {
00518         res->num_results = num_results; /* the number of results (0x01) */
00519         res->result      = result     ;  /* result (0x00 = accept) */
00520         res->reason      = reason     ;  /* reason (0x00 = no reason specified) */
00521 }

static BOOL smb_io_rpc_results ( const char *  desc,
RPC_RESULTS res,
prs_struct ps,
int  depth 
) [static]

parse_rpc.c529 行で定義されています。

参照先 rpc_results_info::num_resultsprs_debug()rpc_results_info::reasonrpc_results_info::result.

参照元 smb_io_rpc_hdr_ba().

00530 {
00531         if (res == NULL)
00532                 return False;
00533 
00534         prs_debug(ps, depth, desc, "smb_io_rpc_results");
00535         depth++;
00536 
00537         if(!prs_align(ps))
00538                 return False;
00539         
00540         if(!prs_uint8 ("num_results", ps, depth, &res->num_results))    
00541                 return False;
00542 
00543         if(!prs_align(ps))
00544                 return False;
00545         
00546         if(!prs_uint16("result     ", ps, depth, &res->result))
00547                 return False;
00548         if(!prs_uint16("reason     ", ps, depth, &res->reason))
00549                 return False;
00550         return True;
00551 }

void init_rpc_hdr_ba ( RPC_HDR_BA rpc,
uint16  max_tsize,
uint16  max_rsize,
uint32  assoc_gid,
const char *  pipe_addr,
uint8  num_results,
uint16  result,
uint16  reason,
RPC_IFACE transfer 
)

parse_rpc.c560 行で定義されています。

参照先 rpc_hdr_ba_info::addrrpc_hdr_ba_info::bbainit_rpc_addr_str()init_rpc_hdr_bba()init_rpc_results()rpc_hdr_ba_info::resrpc_hdr_ba_info::transfer.

参照元 api_pipe_alter_context().

00565 {
00566         init_rpc_hdr_bba (&rpc->bba, max_tsize, max_rsize, assoc_gid);
00567         init_rpc_addr_str(&rpc->addr, pipe_addr);
00568         init_rpc_results (&rpc->res, num_results, result, reason);
00569 
00570         /* the transfer syntax from the request */
00571         memcpy(&rpc->transfer, transfer, sizeof(rpc->transfer));
00572 }

BOOL smb_io_rpc_hdr_ba ( const char *  desc,
RPC_HDR_BA rpc,
prs_struct ps,
int  depth 
)

parse_rpc.c578 行で定義されています。

参照先 rpc_hdr_ba_info::addrrpc_hdr_ba_info::bbaprs_debug()rpc_hdr_ba_info::ressmb_io_rpc_addr_str()smb_io_rpc_hdr_bba()smb_io_rpc_iface()smb_io_rpc_results()rpc_hdr_ba_info::transfer.

参照元 api_pipe_alter_context()rpc_pipe_bind().

00579 {
00580         if (rpc == NULL)
00581                 return False;
00582 
00583         prs_debug(ps, depth, desc, "smb_io_rpc_hdr_ba");
00584         depth++;
00585 
00586         if(!smb_io_rpc_hdr_bba("", &rpc->bba, ps, depth))
00587                 return False;
00588         if(!smb_io_rpc_addr_str("", &rpc->addr, ps, depth))
00589                 return False;
00590         if(!smb_io_rpc_results("", &rpc->res, ps, depth))
00591                 return False;
00592         if(!smb_io_rpc_iface("", &rpc->transfer, ps, depth))
00593                 return False;
00594         return True;
00595 }

void init_rpc_hdr_req ( RPC_HDR_REQ hdr,
uint32  alloc_hint,
uint16  opnum 
)

parse_rpc.c601 行で定義されています。

参照先 rpc_hdr_req_info::alloc_hintrpc_hdr_req_info::context_idrpc_hdr_req_info::opnum.

参照元 rpc_api_pipe_req().

00602 {
00603         hdr->alloc_hint   = alloc_hint; /* allocation hint */
00604         hdr->context_id   = 0;         /* presentation context identifier */
00605         hdr->opnum        = opnum;     /* opnum */
00606 }

BOOL smb_io_rpc_hdr_req ( const char *  desc,
RPC_HDR_REQ rpc,
prs_struct ps,
int  depth 
)

parse_rpc.c612 行で定義されています。

参照先 rpc_hdr_req_info::alloc_hintrpc_hdr_req_info::context_idrpc_hdr_req_info::opnumprs_debug().

参照元 process_request_pdu()rpc_api_pipe_req().

00613 {
00614         if (rpc == NULL)
00615                 return False;
00616 
00617         prs_debug(ps, depth, desc, "smb_io_rpc_hdr_req");
00618         depth++;
00619 
00620         if(!prs_uint32("alloc_hint", ps, depth, &rpc->alloc_hint))
00621                 return False;
00622         if(!prs_uint16("context_id", ps, depth, &rpc->context_id))
00623                 return False;
00624         if(!prs_uint16("opnum     ", ps, depth, &rpc->opnum))
00625                 return False;
00626         return True;
00627 }

BOOL smb_io_rpc_hdr_resp ( const char *  desc,
RPC_HDR_RESP rpc,
prs_struct ps,
int  depth 
)

parse_rpc.c633 行で定義されています。

参照先 rpc_hdr_resp_info::alloc_hintrpc_hdr_resp_info::cancel_countrpc_hdr_resp_info::context_idprs_debug()rpc_hdr_resp_info::reserved.

参照元 cli_pipe_validate_current_pdu()create_next_pdu_noauth()create_next_pdu_ntlmssp()create_next_pdu_schannel()setup_fault_pdu().

00634 {
00635         if (rpc == NULL)
00636                 return False;
00637 
00638         prs_debug(ps, depth, desc, "smb_io_rpc_hdr_resp");
00639         depth++;
00640 
00641         if(!prs_uint32("alloc_hint", ps, depth, &rpc->alloc_hint))
00642                 return False;
00643         if(!prs_uint16("context_id", ps, depth, &rpc->context_id))
00644                 return False;
00645         if(!prs_uint8 ("cancel_ct ", ps, depth, &rpc->cancel_count))
00646                 return False;
00647         if(!prs_uint8 ("reserved  ", ps, depth, &rpc->reserved))
00648                 return False;
00649         return True;
00650 }

BOOL smb_io_rpc_hdr_fault ( const char *  desc,
RPC_HDR_FAULT rpc,
prs_struct ps,
int  depth 
)

parse_rpc.c656 行で定義されています。

参照先 prs_debug()rpc_hdr_fault_info::reservedrpc_hdr_fault_info::status.

参照元 cli_pipe_validate_current_pdu()setup_fault_pdu().

00657 {
00658         if (rpc == NULL)
00659                 return False;
00660 
00661         prs_debug(ps, depth, desc, "smb_io_rpc_hdr_fault");
00662         depth++;
00663 
00664         if(!prs_dcerpc_status("status  ", ps, depth, &rpc->status))
00665                 return False;
00666         if(!prs_uint32("reserved", ps, depth, &rpc->reserved))
00667                 return False;
00668 
00669     return True;
00670 }

void init_rpc_hdr_auth ( RPC_HDR_AUTH rai,
uint8  auth_type,
uint8  auth_level,
uint8  auth_pad_len,
uint32  auth_context_id 
)

parse_rpc.c676 行で定義されています。

参照先 rpc_hdr_auth_info::auth_context_idrpc_hdr_auth_info::auth_levelrpc_hdr_auth_info::auth_pad_lenrpc_hdr_auth_info::auth_reservedrpc_hdr_auth_info::auth_type.

参照元 add_ntlmssp_auth_footer()add_schannel_auth_footer()create_krb5_auth_bind_req()create_next_pdu_ntlmssp()create_next_pdu_schannel()create_ntlmssp_auth_rpc_bind_req()create_rpc_alter_context()create_rpc_bind_auth3()create_schannel_auth_rpc_bind_req()create_spnego_ntlmssp_auth_rpc_bind_req()pipe_ntlmssp_auth_bind()pipe_schannel_auth_bind()pipe_spnego_auth_bind_continue()pipe_spnego_auth_bind_negotiate().

00680 {
00681         rai->auth_type     = auth_type;
00682         rai->auth_level    = auth_level;
00683         rai->auth_pad_len  = auth_pad_len;
00684         rai->auth_reserved = 0;
00685         rai->auth_context_id = auth_context_id;
00686 }

BOOL smb_io_rpc_hdr_auth ( const char *  desc,
RPC_HDR_AUTH rai,
prs_struct ps,
int  depth 
)

parse_rpc.c692 行で定義されています。

参照先 rpc_hdr_auth_info::auth_context_idrpc_hdr_auth_info::auth_levelrpc_hdr_auth_info::auth_pad_lenrpc_hdr_auth_info::auth_reservedrpc_hdr_auth_info::auth_typeprs_debug().

参照元 add_ntlmssp_auth_footer()add_schannel_auth_footer()api_pipe_alter_context()api_pipe_bind_auth3()api_pipe_ntlmssp_auth_process()api_pipe_schannel_process()cli_pipe_verify_ntlmssp()cli_pipe_verify_schannel()create_bind_or_alt_ctx_internal()create_next_pdu_ntlmssp()create_next_pdu_schannel()create_rpc_bind_auth3()pipe_ntlmssp_auth_bind()pipe_schannel_auth_bind()pipe_spnego_auth_bind_continue()pipe_spnego_auth_bind_negotiate()rpc_finish_auth3_bind()rpc_finish_spnego_ntlmssp_bind().

00693 {
00694         if (rai == NULL)
00695                 return False;
00696 
00697         prs_debug(ps, depth, desc, "smb_io_rpc_hdr_auth");
00698         depth++;
00699 
00700         if(!prs_align(ps))
00701                 return False;
00702 
00703         if(!prs_uint8 ("auth_type    ", ps, depth, &rai->auth_type))
00704                 return False;
00705         if(!prs_uint8 ("auth_level   ", ps, depth, &rai->auth_level))
00706                 return False;
00707         if(!prs_uint8 ("auth_pad_len ", ps, depth, &rai->auth_pad_len))
00708                 return False;
00709         if(!prs_uint8 ("auth_reserved", ps, depth, &rai->auth_reserved))
00710                 return False;
00711         if(!prs_uint32("auth_context_id", ps, depth, &rai->auth_context_id))
00712                 return False;
00713 
00714         return True;
00715 }

BOOL rpc_auth_verifier_chk ( RPC_AUTH_VERIFIER rav,
const char *  signature,
uint32  msg_type 
)

parse_rpc.c721 行で定義されています。

参照先 rpc_auth_verif_info::msg_typerpc_auth_verif_info::signaturestrequal().

00723 {
00724         return (strequal(rav->signature, signature) && rav->msg_type == msg_type);
00725 }

void init_rpc_auth_verifier ( RPC_AUTH_VERIFIER rav,
const char *  signature,
uint32  msg_type 
)

parse_rpc.c731 行で定義されています。

参照先 rpc_auth_verif_info::msg_typerpc_auth_verif_info::signature.

参照元 pipe_schannel_auth_bind().

00733 {
00734         fstrcpy(rav->signature, signature); /* "NTLMSSP" */
00735         rav->msg_type = msg_type; /* NTLMSSP_MESSAGE_TYPE */
00736 }

BOOL smb_io_rpc_auth_verifier ( const char *  desc,
RPC_AUTH_VERIFIER rav,
prs_struct ps,
int  depth 
)

parse_rpc.c742 行で定義されています。

参照先 rpc_auth_verif_info::msg_typeprs_debug()rpc_auth_verif_info::signature.

00743 {
00744         if (rav == NULL)
00745                 return False;
00746 
00747         prs_debug(ps, depth, desc, "smb_io_rpc_auth_verifier");
00748         depth++;
00749 
00750         /* "NTLMSSP" */
00751         if(!prs_string("signature", ps, depth, rav->signature,
00752                         sizeof(rav->signature)))
00753                 return False;
00754         if(!prs_uint32("msg_type ", ps, depth, &rav->msg_type)) /* NTLMSSP_MESSAGE_TYPE */
00755                 return False;
00756 
00757         return True;
00758 }

BOOL smb_io_rpc_schannel_verifier ( const char *  desc,
RPC_AUTH_VERIFIER rav,
prs_struct ps,
int  depth 
)

parse_rpc.c764 行で定義されています。

参照先 rpc_auth_verif_info::msg_typeprs_debug()rpc_auth_verif_info::signature.

参照元 pipe_schannel_auth_bind().

00765 {
00766         if (rav == NULL)
00767                 return False;
00768 
00769         prs_debug(ps, depth, desc, "smb_io_rpc_schannel_verifier");
00770         depth++;
00771 
00772         if(!prs_string("signature", ps, depth, rav->signature, sizeof(rav->signature)))
00773                 return False;
00774         if(!prs_uint32("msg_type ", ps, depth, &rav->msg_type))
00775                 return False;
00776 
00777         return True;
00778 }

void init_rpc_auth_schannel_neg ( RPC_AUTH_SCHANNEL_NEG neg,
const char *  domain,
const char *  myname 
)

parse_rpc.c784 行で定義されています。

参照先 rpc_auth_schannel_neg_info::domainrpc_auth_schannel_neg_info::mynamerpc_auth_schannel_neg_info::type1rpc_auth_schannel_neg_info::type2.

参照元 create_schannel_auth_rpc_bind_req().

00786 {
00787         neg->type1 = 0;
00788         neg->type2 = 0x3;
00789         fstrcpy(neg->domain, domain);
00790         fstrcpy(neg->myname, myname);
00791 }

BOOL smb_io_rpc_auth_schannel_neg ( const char *  desc,
RPC_AUTH_SCHANNEL_NEG neg,
prs_struct ps,
int  depth 
)

parse_rpc.c797 行で定義されています。

参照先 rpc_auth_schannel_neg_info::domainrpc_auth_schannel_neg_info::mynameprs_debug()rpc_auth_schannel_neg_info::type1rpc_auth_schannel_neg_info::type2.

参照元 create_schannel_auth_rpc_bind_req()pipe_schannel_auth_bind().

00799 {
00800         if (neg == NULL)
00801                 return False;
00802 
00803         prs_debug(ps, depth, desc, "smb_io_rpc_auth_schannel_neg");
00804         depth++;
00805 
00806         if(!prs_align(ps))
00807                 return False;
00808 
00809         if(!prs_uint32("type1", ps, depth, &neg->type1))
00810                 return False;
00811         if(!prs_uint32("type2", ps, depth, &neg->type2))
00812                 return False;
00813         if(!prs_string("domain  ", ps, depth, neg->domain, sizeof(neg->domain)))
00814                 return False;
00815         if(!prs_string("myname  ", ps, depth, neg->myname, sizeof(neg->myname)))
00816                 return False;
00817 
00818         return True;
00819 }

BOOL smb_io_rpc_auth_schannel_chk ( const char *  desc,
int  auth_len,
RPC_AUTH_SCHANNEL_CHK chk,
prs_struct ps,
int  depth 
)

parse_rpc.c825 行で定義されています。

参照先 rpc_auth_schannel_chk_info::confounderrpc_auth_schannel_chk_info::packet_digestprs_debug()rpc_auth_schannel_chk_info::seq_numrpc_auth_schannel_chk_info::sig.

参照元 add_schannel_auth_footer()api_pipe_schannel_process()cli_pipe_verify_schannel()create_next_pdu_schannel().

00828 {
00829         if (chk == NULL)
00830                 return False;
00831 
00832         prs_debug(ps, depth, desc, "smb_io_rpc_auth_schannel_chk");
00833         depth++;
00834 
00835         if ( !prs_uint8s(False, "sig  ", ps, depth, chk->sig, sizeof(chk->sig)) )
00836                 return False;
00837                 
00838         if ( !prs_uint8s(False, "seq_num", ps, depth, chk->seq_num, sizeof(chk->seq_num)) )
00839                 return False;
00840                 
00841         if ( !prs_uint8s(False, "packet_digest", ps, depth, chk->packet_digest, sizeof(chk->packet_digest)) )
00842                 return False;
00843         
00844         if ( auth_len == RPC_AUTH_SCHANNEL_SIGN_OR_SEAL_CHK_LEN ) {
00845                 if ( !prs_uint8s(False, "confounder", ps, depth, chk->confounder, sizeof(chk->confounder)) )
00846                         return False;
00847         }
00848 
00849         return True;
00850 }


変数

struct pipe_id_info pipe_names[]

初期値:

{
        
        { PIPE_LSARPC  , SYNT_LSARPC_V0        , PIPE_LSASS    , TRANS_SYNT_V2 },
        { PIPE_LSARPC  , SYNT_LSARPC_V0_DS     , PIPE_LSASS    , TRANS_SYNT_V2 },
        { PIPE_SAMR    , SYNT_SAMR_V1          , PIPE_LSASS    , TRANS_SYNT_V2 },
        { PIPE_NETLOGON, SYNT_NETLOGON_V1      , PIPE_LSASS    , TRANS_SYNT_V2 },
        { PIPE_SRVSVC  , SYNT_SRVSVC_V3        , PIPE_NTSVCS   , TRANS_SYNT_V2 },
        { PIPE_WKSSVC  , SYNT_WKSSVC_V1        , PIPE_NTSVCS   , TRANS_SYNT_V2 },
        { PIPE_WINREG  , SYNT_WINREG_V1        , PIPE_WINREG   , TRANS_SYNT_V2 },
        { PIPE_SPOOLSS , SYNT_SPOOLSS_V1       , PIPE_SPOOLSS  , TRANS_SYNT_V2 },
        { PIPE_NETDFS  , SYNT_NETDFS_V3        , PIPE_NETDFS   , TRANS_SYNT_V2 },
        { PIPE_ECHO    , SYNT_ECHO_V1          , PIPE_ECHO     , TRANS_SYNT_V2 },
        { PIPE_SHUTDOWN, SYNT_SHUTDOWN_V1      , PIPE_SHUTDOWN , TRANS_SYNT_V2 },
        { PIPE_SVCCTL  , SYNT_SVCCTL_V2        , PIPE_NTSVCS   , TRANS_SYNT_V2 },
        { PIPE_EVENTLOG, SYNT_EVENTLOG_V0      , PIPE_EVENTLOG , TRANS_SYNT_V2 },
        { PIPE_NTSVCS  , SYNT_NTSVCS_V1        , PIPE_NTSVCS   , TRANS_SYNT_V2 },
        { NULL         , SYNT_NONE_V0          , NULL          , SYNT_NONE_V0  }
}

parse_rpc.c209 行で定義されています。


Sambaに対してSat Aug 29 21:24:11 2009に生成されました。  doxygen 1.4.7