rendered paste body
#!/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) : "<NULL>" */
/* ); */
}
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) : "<NULL>"
);
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: <NULL>
*/