#!/usr/sbin/dtrace -Cs #pragma D option flowindent /* typedef uint16_t sa_family_t; */ /* type redeclared: struct sockaddr */ /* struct sockaddr { */ /* sa_family_t sa_family; /\* address family *\/ */ /* char sa_data[14]; /\* up to 14 bytes of direct address *\/ */ /* }; */ /* struct sockaddr_in { */ /* sa_family_t sin_family; */ /* in_port_t sin_port; */ /* struct in_addr sin_addr; */ /* char sin_zero[8]; */ /* }; */ /* typedef union lptr { */ /* uint64_t lp_ll; */ /* #ifdef _LP64 */ /* void *lp_ptr; */ /* #endif */ /* #ifdef _ILP32 */ /* void *_lp_p2[2]; */ /* #ifdef _LITTLE_ENDIAN */ /* #define lp_ptr _lp_p2[0] */ /* #define lp_pad _lp_p2[1] */ /* #else /\* _ENDIAN *\/ */ /* #define lp_pad _lp_p2[0] */ /* #define lp_ptr _lp_p2[1] */ /* #endif /\* _ENDIAN *\/ */ /* #endif /\* _ILP32 *\/ */ /* } lptr_t; */ #define SMBIOC_HASH_SZ 16 struct smb_iods { int32_t is_tran_fd; /* transport FD */ uint32_t is_vcflags; /* SMBV_... */ uint8_t is_hflags; /* SMB header flags */ uint16_t is_hflags2; /* SMB header flags2 */ uint16_t is_smbuid; /* SMB header UID */ uint16_t is_next_mid; /* SMB header MID */ uint32_t is_txmax; /* max tx/rx packet size */ uint32_t is_rwmax; /* max read/write data size */ uint32_t is_rxmax; /* max readx data size */ uint32_t is_wxmax; /* max writex data size */ uint8_t is_ssn_key[SMBIOC_HASH_SZ]; /* session key */ /* Signing state */ uint32_t is_next_seq; /* my next sequence number */ uint32_t is_u_maclen; /* MAC key length */ lptr_t is_u_mackey; /* user-space ptr! */ }; struct smbioc_ssn_work { smb_iods_t wk_iods; smb_sopt_t wk_sopt; int wk_out_state; }; /* typedef struct smbioc_ssn_work smbioc_ssn_work_t; */ #define NTLM_CHAL_SZ 8 /* challenge size */ #define SMBIOC_MAX_NAME 256 union smbioc_sockaddr { struct sockaddr sa; /* generic */ struct sockaddr_in sin; struct sockaddr_in6 sin6; }; /* typedef union smbioc_sockaddr smbioc_sockaddr_t; */ struct smbioc_ssn_ident { smbioc_sockaddr_t id_srvaddr; char id_domain[SMBIOC_MAX_NAME]; char id_user[SMBIOC_MAX_NAME]; }; /* typedef struct smbioc_ssn_ident smbioc_ssn_ident_t; */ struct smbioc_ossn { uint32_t ssn_vopt; /* i.e. SMBVOPT_CREATE */ uint32_t ssn_owner; /* Unix owner (UID) */ smbioc_ssn_ident_t ssn_id; char ssn_srvname[SMBIOC_MAX_NAME]; }; #define NTLM_HASH_SZ SMBIOC_HASH_SZ struct smb_iod_ssn { struct smbioc_ossn iod_ossn; int iod_authflags; /* SMB_AT_x */ uchar_t iod_nthash[NTLM_HASH_SZ]; uchar_t iod_lmhash[NTLM_HASH_SZ]; /* Kerberos cred. cache res. name? */ }; /* typedef struct smb_iod_ssn smb_iod_ssn_t; */ struct smb_ctx { int ct_flags; /* SMBCF_ */ int ct_dev_fd; /* device handle */ int ct_door_fd; /* to smbiod */ int ct_parsedlevel; int ct_minlevel; int ct_maxlevel; char *ct_fullserver; /* orig. server name from cmd line */ char *ct_srvaddr_s; /* hostname or IP address of server */ struct addrinfo *ct_addrinfo; /* IP addresses of the server */ struct nb_ctx *ct_nb; /* NetBIOS info. */ char *ct_locname; /* local (machine) name */ struct smb_iod_ssn ct_iod_ssn; /* smbioc_oshare_t ct_sh; XXX */ int ct_minauth; int ct_shtype_req; /* share type wanted */ char *ct_origshare; char *ct_home; char *ct_rpath; /* remote file name */ /* Connection setup SMB stuff. */ /* Strings from the SMB negotiate response. */ char *ct_srv_OS; char *ct_srv_LM; /* NTLM auth. stuff */ uchar_t ct_clnonce[NTLM_CHAL_SZ]; uchar_t ct_ntlm_chal[NTLM_CHAL_SZ]; char ct_password[SMBIOC_MAX_NAME]; /* See ssp.c */ void *ct_ssp_ctx; smbioc_ssn_work_t ct_work; }; pid$target::smb_ctx_setfullserver:entry { /* this->ctx = (struct smb_ctx*)copyin(arg0, sizeof (struct smb_ctx)); */ self->ctx = (struct smb_ctx*)copyin(arg0, sizeof (struct smb_ctx)); printf("name: %s\n", copyinstr(arg1)); /* /\* OK *\/ */ /* printf("ct_minlevel: %d, ct_maxlevel: %d\n", */ /* self->ctx->ct_minlevel, */ /* self->ctx->ct_maxlevel); */ /* printf("ctx->ct_fullserver[0]: %c\n", this->ctx->ct_fullserver[0]); */ /* printf("ctx->ct_fullserver: %s\n", */ /* this->ctx->ct_fullserver != NULL ? */ /* stringof(this->ctx->ct_fullserver) : "" */ /* ); */ } pid$target::smb_ctx_setfullserver:return { /* this->ctx = (struct smb_ctx*)copyin(self->ctx, sizeof (struct smb_ctx)); */ printf("ct_minlevel: %d, ct_maxlevel: %d\n", self->ctx->ct_minlevel, self->ctx->ct_maxlevel); printf("ctx->ct_fullserver: %s\n", self->ctx->ct_fullserver != NULL ? stringof(self->ctx->ct_fullserver) : "" ); exit(0); } /* fbt:smbsrv::entry */ /* { */ /* } */ /* * # ./smbsrv.d -p 102694 * dtrace: script './smbsrv.d' matched 2 probes * CPU FUNCTION * 0 -> smb_ctx_setfullserver name: foo * * 0 <- smb_ctx_setfullserver ct_minlevel: 0, ct_maxlevel: 3 * ctx->ct_fullserver: */