#!/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]; */ /* }; */ /* 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 SMBIOC_HASH_SZ 16 #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; }; /* fbt:smbsrv::entry */ /* { */ /* } */ pid$target::smb_ctx_setfullserver:entry { this->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", */ /* this->ctx->ct_minlevel, */ /* this->ctx->ct_maxlevel); */ } pid$target::smb_ctx_setfullserver:return { this->ctx = (struct smb_ctx*)copyin(arg0, sizeof (struct smb_ctx)); /* dtrace: error on enabled probe ID 2 (ID 70901: pid102694:libsmbfs.so.1:smb_ctx_setfullserver:return): invalid address (0x52) in action #1 at DIF offset 40 */ printf("ct_minlevel: %d, ct_maxlevel: %d\n", this->ctx->ct_minlevel, this->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) : "" */ /* ); */ exit(0); }