void smb_rq_done(struct smb_rq *rqp) { mb_done(&rqp->rq_rp); mb_done(&rqp->rq_rq); free(rqp); }
void smb_t2_done(struct smb_t2rq *t2p) { mb_done(&t2p->t2_tparam); mb_done(&t2p->t2_tdata); md_done(&t2p->t2_rparam); md_done(&t2p->t2_rdata); if (t2p->t2_flags & SMBT2_ALLOCED) free(t2p, M_SMBRQ); }
void smb_t2_done(struct smb_t2rq *t2p) { mb_done(&t2p->t2_tparam); mb_done(&t2p->t2_tdata); md_done(&t2p->t2_rparam); md_done(&t2p->t2_rdata); mutex_destroy(&t2p->t2_lock); cv_destroy(&t2p->t2_cond); if (t2p->t2_flags & SMBT2_ALLOCED) kmem_free(t2p, sizeof (*t2p)); }
void smb_nt_done(struct smb_ntrq *ntp) { mb_done(&ntp->nt_tsetup); mb_done(&ntp->nt_tparam); mb_done(&ntp->nt_tdata); md_done(&ntp->nt_rparam); md_done(&ntp->nt_rdata); cv_destroy(&ntp->nt_cond); mutex_destroy(&ntp->nt_lock); if (ntp->nt_flags & SMBT2_ALLOCED) kmem_free(ntp, sizeof (*ntp)); }
void nbns_rq_done(struct nbns_rq *rqp) { if (rqp == NULL) return; if (rqp->nr_fd >= 0) close(rqp->nr_fd); mb_done(&rqp->nr_rq); mb_done(&rqp->nr_rp); if (rqp->nr_if) free(rqp->nr_if); free(rqp); }
static int smb_rq_new(struct smb_rq *rqp, u_char cmd) { struct smb_vc *vcp = rqp->sr_vc; struct mbchain *mbp = &rqp->sr_rq; int error; rqp->sr_sendcnt = 0; mb_done(mbp); md_done(&rqp->sr_rp); error = mb_init(mbp); if (error) return error; mb_put_mem(mbp, SMB_SIGNATURE, SMB_SIGLEN, MB_MSYSTEM); mb_put_uint8(mbp, cmd); mb_put_uint32le(mbp, 0); /* DosError */ mb_put_uint8(mbp, vcp->vc_hflags); mb_put_uint16le(mbp, vcp->vc_hflags2); mb_put_mem(mbp, tzero, 12, MB_MSYSTEM); rqp->sr_rqtid = (u_int16_t*)mb_reserve(mbp, sizeof(u_int16_t)); mb_put_uint16le(mbp, 1 /*scred->sc_p->p_pid & 0xffff*/); rqp->sr_rquid = (u_int16_t*)mb_reserve(mbp, sizeof(u_int16_t)); mb_put_uint16le(mbp, rqp->sr_mid); return 0; }
/* * Given a request with it's body already composed, * rewind to the start and fill in the SMB header. * This is called after the request is enqueued, * so we have the final MID, seq num. etc. */ void smb_rq_fillhdr(struct smb_rq *rqp) { struct mbchain mbtmp, *mbp = &mbtmp; mblk_t *m; /* * Fill in the SMB header using a dup of the first mblk, * which points at the same data but has its own wptr, * so we can rewind without trashing the message. */ m = dupb(rqp->sr_rq.mb_top); m->b_wptr = m->b_rptr; /* rewind */ mb_initm(mbp, m); mb_put_mem(mbp, SMB_SIGNATURE, 4, MB_MSYSTEM); mb_put_uint8(mbp, rqp->sr_cmd); mb_put_uint32le(mbp, 0); /* status */ mb_put_uint8(mbp, rqp->sr_rqflags); mb_put_uint16le(mbp, rqp->sr_rqflags2); mb_put_uint16le(mbp, 0); /* pid-high */ mb_put_mem(mbp, NULL, 8, MB_MZERO); /* MAC sig. (later) */ mb_put_uint16le(mbp, 0); /* reserved */ mb_put_uint16le(mbp, rqp->sr_rqtid); mb_put_uint16le(mbp, rqp->sr_pid); mb_put_uint16le(mbp, rqp->sr_rquid); mb_put_uint16le(mbp, rqp->sr_mid); /* This will free the mblk from dupb. */ mb_done(mbp); }
static int smb_rq_new(struct smb_rq *rqp, uchar_t cmd) { struct mbchain *mbp = &rqp->sr_rq; struct smb_vc *vcp = rqp->sr_vc; int error; ASSERT(rqp != NULL); rqp->sr_sendcnt = 0; rqp->sr_cmd = cmd; mb_done(mbp); md_done(&rqp->sr_rp); error = mb_init(mbp); if (error) return (error); /* * Is this the right place to save the flags? */ rqp->sr_rqflags = vcp->vc_hflags; rqp->sr_rqflags2 = vcp->vc_hflags2; /* * The SMB header is filled in later by * smb_rq_fillhdr (see below) * Just reserve space here. */ mb_put_mem(mbp, NULL, SMB_HDRLEN, MB_MZERO); return (0); }
void smb_rq_done(struct smb_rq *rqp) { mb_done(&rqp->sr_rq); md_done(&rqp->sr_rp); smb_sl_destroy(&rqp->sr_slock); if (rqp->sr_flags & SMBR_ALLOCED) free(rqp, M_SMBRQ); }
void ncp_rq_done(struct ncp_rq *rqp) { mb_done(&rqp->rq); md_done(&rqp->rp); if (rqp->nr_flags & NCPR_ALLOCED) free(rqp, M_NCPRQ); return; }
/* * Done with a request object. Free its contents. * If it was allocated (SMBR_ALLOCED) free it too. * Some of these are stack locals, not allocated. * * No locks here - this is the last ref. */ void smb_rq_done(struct smb_rq *rqp) { /* * No smb_vc_rele() here - see smb_rq_init() */ mb_done(&rqp->sr_rq); md_done(&rqp->sr_rp); mutex_destroy(&rqp->sr_lock); cv_destroy(&rqp->sr_cond); if (rqp->sr_flags & SMBR_ALLOCED) kmem_free(rqp, sizeof (*rqp)); }
int userfw_domain_send_to_socket(struct socket *so, unsigned char *buf, size_t len) { struct mbchain m; int err; mb_init(&m); err = mb_put_mem(&m, buf, len, MB_MSYSTEM); if (err != 0) { mb_done(&m); return err; } sbappendstream(&(so->so_rcv), mb_detach(&m)); sorwakeup(so); return 0; }
static int smb_rq_new(struct smb_rq *rqp, u_char cmd) { struct smb_vc *vcp = rqp->sr_vc; struct mbchain *mbp = &rqp->sr_rq; int error; u_int16_t flags2; rqp->sr_sendcnt = 0; mb_done(mbp); md_done(&rqp->sr_rp); error = mb_init(mbp); if (error) return error; mb_put_mem(mbp, SMB_SIGNATURE, SMB_SIGLEN, MB_MSYSTEM); mb_put_uint8(mbp, cmd); mb_put_uint32le(mbp, 0); /* DosError */ mb_put_uint8(mbp, vcp->vc_hflags); flags2 = vcp->vc_hflags2; if (cmd == SMB_COM_TRANSACTION || cmd == SMB_COM_TRANSACTION_SECONDARY) flags2 &= ~SMB_FLAGS2_UNICODE; if (cmd == SMB_COM_NEGOTIATE) flags2 &= ~SMB_FLAGS2_SECURITY_SIGNATURE; mb_put_uint16le(mbp, flags2); if ((flags2 & SMB_FLAGS2_SECURITY_SIGNATURE) == 0) { mb_put_mem(mbp, tzero, 12, MB_MSYSTEM); rqp->sr_rqsig = NULL; } else { mb_put_uint16le(mbp, 0 /*scred->sc_p->p_pid >> 16*/); rqp->sr_rqsig = (u_int8_t *)mb_reserve(mbp, 8); mb_put_uint16le(mbp, 0); } rqp->sr_rqtid = mb_reserve(mbp, sizeof(u_int16_t)); mb_put_uint16le(mbp, 1 /*scred->sc_p->p_pid & 0xffff*/); rqp->sr_rquid = mb_reserve(mbp, sizeof(u_int16_t)); mb_put_uint16le(mbp, rqp->sr_mid); return 0; }