Lines Matching +full:min +full:- +full:len
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2000-2001 Boris Popov
67 {-1, NULL}
81 if ((vcp->vc_sopt.sv_caps & SMB_CAP_LARGE_READX) && in smb_vc_maxread()
82 (vcp->vc_hflags2 & SMB_FLAGS2_SECURITY_SIGNATURE) == 0) in smb_vc_maxread()
85 return (vcp->vc_sopt.sv_maxtx - SMB_HDRLEN - 64); in smb_vc_maxread()
94 if ((vcp->vc_sopt.sv_caps & SMB_CAP_LARGE_WRITEX) && in smb_vc_maxwrite()
95 (vcp->vc_hflags2 & SMB_FLAGS2_SECURITY_SIGNATURE) == 0) in smb_vc_maxwrite()
98 return (vcp->vc_sopt.sv_maxtx - SMB_HDRLEN - 64); in smb_vc_maxwrite()
104 if (scred->scr_td->td_proc == vcp->vc_iod->iod_p) in smb_smb_nomux()
122 void * servercharset = vcp->vc_toserver; in smb_smb_negotiate()
123 void * localcharset = vcp->vc_tolocal; in smb_smb_negotiate()
129 vcp->vc_toserver = vcp->vc_cp_toserver; in smb_smb_negotiate()
130 vcp->vc_tolocal = vcp->vc_cp_tolocal; in smb_smb_negotiate()
132 vcp->vc_hflags = 0; in smb_smb_negotiate()
133 vcp->vc_hflags2 = 0; in smb_smb_negotiate()
134 vcp->obj.co_flags &= ~(SMBV_ENCRYPT); in smb_smb_negotiate()
135 sp = &vcp->vc_sopt; in smb_smb_negotiate()
144 for(dp = smb_dialects; dp->d_id != -1; dp++) { in smb_smb_negotiate()
146 smb_put_dstring(mbp, vcp, dp->d_name, SMB_CS_NONE); in smb_smb_negotiate()
167 sp->sv_proto = dp->d_id; in smb_smb_negotiate()
168 SMBSDEBUG("Dialect %s (%d, %d)\n", dp->d_name, dindex, wc); in smb_smb_negotiate()
170 if (dp->d_id >= SMB_DIALECT_NTLM0_12) { in smb_smb_negotiate()
173 md_get_uint8(mdp, &sp->sv_sm); in smb_smb_negotiate()
174 md_get_uint16le(mdp, &sp->sv_maxmux); in smb_smb_negotiate()
175 md_get_uint16le(mdp, &sp->sv_maxvcs); in smb_smb_negotiate()
176 md_get_uint32le(mdp, &sp->sv_maxtx); in smb_smb_negotiate()
177 md_get_uint32le(mdp, &sp->sv_maxraw); in smb_smb_negotiate()
178 md_get_uint32le(mdp, &sp->sv_skey); in smb_smb_negotiate()
179 md_get_uint32le(mdp, &sp->sv_caps); in smb_smb_negotiate()
181 md_get_uint16le(mdp, (u_int16_t*)&sp->sv_tz); in smb_smb_negotiate()
183 if (sblen && (sp->sv_sm & SMB_SM_ENCRYPT)) { in smb_smb_negotiate()
191 if (sp->sv_caps & SMB_CAP_EXT_SECURITY) in smb_smb_negotiate()
193 error = md_get_mem(mdp, vcp->vc_ch, sblen, MB_MSYSTEM); in smb_smb_negotiate()
196 vcp->vc_chlen = sblen; in smb_smb_negotiate()
197 vcp->obj.co_flags |= SMBV_ENCRYPT; in smb_smb_negotiate()
199 if (sp->sv_sm & SMB_SM_SIGS_REQUIRE) in smb_smb_negotiate()
200 vcp->vc_hflags2 |= SMB_FLAGS2_SECURITY_SIGNATURE; in smb_smb_negotiate()
201 if (vcp->vc_ucs_toserver && in smb_smb_negotiate()
202 sp->sv_caps & SMB_CAP_UNICODE) { in smb_smb_negotiate()
206 vcp->obj.co_flags |= SMBV_UNICODE; in smb_smb_negotiate()
208 vcp->vc_hflags2 |= SMB_FLAGS2_KNOWS_LONG_NAMES; in smb_smb_negotiate()
209 if (dp->d_id == SMB_DIALECT_NTLM0_12 && in smb_smb_negotiate()
210 sp->sv_maxtx < 4096 && in smb_smb_negotiate()
211 (sp->sv_caps & SMB_CAP_NT_SMBS) == 0) { in smb_smb_negotiate()
212 vcp->obj.co_flags |= SMBV_WIN95; in smb_smb_negotiate()
218 vcp->vc_hflags2 &= ~(SMB_FLAGS2_EXT_SEC|SMB_FLAGS2_DFS| in smb_smb_negotiate()
221 if (dp->d_id > SMB_DIALECT_CORE) { in smb_smb_negotiate()
223 sp->sv_sm = tw; in smb_smb_negotiate()
225 sp->sv_maxtx = tw; in smb_smb_negotiate()
226 md_get_uint16le(mdp, &sp->sv_maxmux); in smb_smb_negotiate()
227 md_get_uint16le(mdp, &sp->sv_maxvcs); in smb_smb_negotiate()
229 md_get_uint32le(mdp, &sp->sv_skey); in smb_smb_negotiate()
233 md_get_uint16le(mdp, (u_int16_t*)&sp->sv_tz); in smb_smb_negotiate()
242 if (swlen && (sp->sv_sm & SMB_SM_ENCRYPT)) { in smb_smb_negotiate()
243 error = md_get_mem(mdp, vcp->vc_ch, swlen, MB_MSYSTEM); in smb_smb_negotiate()
246 vcp->vc_chlen = swlen; in smb_smb_negotiate()
247 vcp->obj.co_flags |= SMBV_ENCRYPT; in smb_smb_negotiate()
250 vcp->vc_hflags2 |= SMB_FLAGS2_KNOWS_LONG_NAMES; in smb_smb_negotiate()
252 sp->sv_maxmux = 1; in smb_smb_negotiate()
257 vcp->vc_maxvcs = sp->sv_maxvcs; in smb_smb_negotiate()
258 if (vcp->vc_maxvcs <= 1) { in smb_smb_negotiate()
259 if (vcp->vc_maxvcs == 0) in smb_smb_negotiate()
260 vcp->vc_maxvcs = 1; in smb_smb_negotiate()
262 if (sp->sv_maxtx <= 0 || sp->sv_maxtx > 0xffff) in smb_smb_negotiate()
263 sp->sv_maxtx = 1024; in smb_smb_negotiate()
265 sp->sv_maxtx = min(sp->sv_maxtx, in smb_smb_negotiate()
268 vcp->vc_rxmax = min(smb_vc_maxread(vcp), maxqsz - 1024); in smb_smb_negotiate()
270 vcp->vc_wxmax = min(smb_vc_maxwrite(vcp), maxqsz - 1024); in smb_smb_negotiate()
271 vcp->vc_txmax = min(sp->sv_maxtx, maxqsz); in smb_smb_negotiate()
272 SMBSDEBUG("TZ = %d\n", sp->sv_tz); in smb_smb_negotiate()
273 SMBSDEBUG("CAPS = %x\n", sp->sv_caps); in smb_smb_negotiate()
274 SMBSDEBUG("MAXMUX = %d\n", sp->sv_maxmux); in smb_smb_negotiate()
275 SMBSDEBUG("MAXVCS = %d\n", sp->sv_maxvcs); in smb_smb_negotiate()
276 SMBSDEBUG("MAXRAW = %d\n", sp->sv_maxraw); in smb_smb_negotiate()
277 SMBSDEBUG("MAXTX = %d\n", sp->sv_maxtx); in smb_smb_negotiate()
282 vcp->vc_toserver = servercharset; in smb_smb_negotiate()
283 vcp->vc_tolocal = localcharset; in smb_smb_negotiate()
284 vcp->vc_hflags2 |= SMB_FLAGS2_UNICODE; in smb_smb_negotiate()
304 if (vcp->obj.co_flags & SMBV_UNICODE) in smb_smb_ssnsetup()
309 vcp->vc_smbuid = SMB_UID_UNKNOWN; in smb_smb_ssnsetup()
319 if (vcp->vc_sopt.sv_sm & SMB_SM_USER) { in smb_smb_ssnsetup()
326 iconv_convstr(vcp->vc_toupper, pbuf, in smb_smb_ssnsetup()
333 iconv_convstr(vcp->vc_toserver, pbuf, pbuf/*, in smb_smb_ssnsetup()
336 if (vcp->vc_sopt.sv_sm & SMB_SM_ENCRYPT) { in smb_smb_ssnsetup()
338 smb_encrypt(pbuf, vcp->vc_ch, encpass); in smb_smb_ssnsetup()
345 iconv_convstr(vcp->vc_toserver, pbuf, in smb_smb_ssnsetup()
348 smb_ntencrypt(pbuf, vcp->vc_ch, (u_char*)ntencpass); in smb_smb_ssnsetup()
357 plen--; in smb_smb_ssnsetup()
365 uniplen = 0/*-= 2*/; in smb_smb_ssnsetup()
379 mbp = &rqp->sr_rq; in smb_smb_ssnsetup()
380 up = vcp->vc_username; in smb_smb_ssnsetup()
391 mb_put_uint16le(mbp, vcp->vc_sopt.sv_maxtx); in smb_smb_ssnsetup()
392 mb_put_uint16le(mbp, vcp->vc_sopt.sv_maxmux); in smb_smb_ssnsetup()
393 mb_put_uint16le(mbp, vcp->vc_number); in smb_smb_ssnsetup()
394 mb_put_uint32le(mbp, vcp->vc_sopt.sv_skey); in smb_smb_ssnsetup()
411 smb_put_dstring(mbp, vcp, vcp->vc_domain, SMB_CS_NONE); /* PrimaryDomain */ in smb_smb_ssnsetup()
418 if (vcp->vc_hflags2 & SMB_FLAGS2_SECURITY_SIGNATURE) in smb_smb_ssnsetup()
423 if (rqp->sr_errclass == ERRDOS && rqp->sr_serror == ERRnoaccess) in smb_smb_ssnsetup()
427 vcp->vc_smbuid = rqp->sr_rpuid; in smb_smb_ssnsetup()
432 if (error && upper == 1 && vcp->vc_sopt.sv_sm & SMB_SM_USER) in smb_smb_ssnsetup()
444 if (vcp->vc_smbuid == SMB_UID_UNKNOWN) in smb_smb_ssnclose()
453 mbp = &rqp->sr_rq; in smb_smb_ssnclose()
508 if (SSTOVC(ssp)->vc_hflags2 & SMB_FLAGS2_UNICODE) { in smb_smb_treeconnect()
510 vcp->vc_toserver = vcp->vc_cp_toserver; in smb_smb_treeconnect()
511 vcp->vc_tolocal = vcp->vc_cp_tolocal; in smb_smb_treeconnect()
512 vcp->vc_hflags2 &= ~SMB_FLAGS2_UNICODE; in smb_smb_treeconnect()
515 ssp->ss_tid = SMB_TID_UNKNOWN; in smb_smb_treeconnect()
519 vcp = rqp->sr_vc; in smb_smb_treeconnect()
521 if (vcp->vc_sopt.sv_sm & SMB_SM_USER) { in smb_smb_treeconnect()
535 iconv_convstr(vcp->vc_toupper, pbuf, in smb_smb_treeconnect()
543 if (vcp->vc_sopt.sv_sm & SMB_SM_ENCRYPT) { in smb_smb_treeconnect()
545 smb_encrypt(pbuf, vcp->vc_ch, encpass); in smb_smb_treeconnect()
552 mbp = &rqp->sr_rq; in smb_smb_treeconnect()
563 pp = vcp->vc_srvname; in smb_smb_treeconnect()
566 pp = ssp->ss_name; in smb_smb_treeconnect()
568 pp = smb_share_typename(ssp->ss_type); in smb_smb_treeconnect()
575 ssp->ss_tid = rqp->sr_rptid; in smb_smb_treeconnect()
576 ssp->ss_vcgenid = vcp->vc_genid; in smb_smb_treeconnect()
577 ssp->ss_flags |= SMBS_CONNECTED; in smb_smb_treeconnect()
580 * our converters to do Unicode <--> Local in smb_smb_treeconnect()
582 if (vcp->obj.co_flags & SMBV_UNICODE) { in smb_smb_treeconnect()
583 vcp->vc_toserver = vcp->vc_ucs_toserver; in smb_smb_treeconnect()
584 vcp->vc_tolocal = vcp->vc_ucs_tolocal; in smb_smb_treeconnect()
585 vcp->vc_hflags2 |= SMB_FLAGS2_UNICODE; in smb_smb_treeconnect()
604 if (ssp->ss_tid == SMB_TID_UNKNOWN) in smb_smb_treedisconnect()
616 ssp->ss_tid = SMB_TID_UNKNOWN; in smb_smb_treedisconnect()
621 smb_smb_readx(struct smb_share *ssp, u_int16_t fid, int *len, int *rresid, in smb_smb_readx() argument
641 mb_put_uint32le(mbp, uio->uio_offset); in smb_smb_readx()
642 *len = min(SSTOVC(ssp)->vc_rxmax, *len); in smb_smb_readx()
643 mb_put_uint16le(mbp, *len); /* MaxCount */ in smb_smb_readx()
644 mb_put_uint16le(mbp, *len); /* MinCount (only indicates blocking) */ in smb_smb_readx()
645 mb_put_uint32le(mbp, (unsigned)*len >> 16); /* MaxCountHigh */ in smb_smb_readx()
646 mb_put_uint16le(mbp, *len); /* Remaining ("obsolete") */ in smb_smb_readx()
647 mb_put_uint32le(mbp, uio->uio_offset >> 32); /* OffsetHigh */ in smb_smb_readx()
687 md_get_mem(mdp, NULL, doff - off, MB_MSYSTEM); in smb_smb_readx()
702 smb_smb_writex(struct smb_share *ssp, u_int16_t fid, int *len, int *rresid, in smb_smb_writex() argument
721 mb_put_uint32le(mbp, uio->uio_offset); in smb_smb_writex()
723 mb_put_uint16le(mbp, 0); /* !write-thru */ in smb_smb_writex()
725 *len = min(SSTOVC(ssp)->vc_wxmax, *len); in smb_smb_writex()
726 mb_put_uint16le(mbp, (unsigned)*len >> 16); in smb_smb_writex()
727 mb_put_uint16le(mbp, *len); in smb_smb_writex()
729 mb_put_uint32le(mbp, uio->uio_offset >> 32); /* OffsetHigh */ in smb_smb_writex()
734 error = mb_put_uio(mbp, uio, *len); in smb_smb_writex()
760 int *len, int *rresid, struct uio *uio, struct smb_cred *scred) in smb_smb_read() argument
769 if (SSTOVC(ssp)->vc_sopt.sv_caps & SMB_CAP_LARGE_READX) in smb_smb_read()
770 return (smb_smb_readx(ssp, fid, len, rresid, uio, scred)); in smb_smb_read()
776 blksz = SSTOVC(ssp)->vc_txmax - SMB_HDRLEN - 16; in smb_smb_read()
777 rlen = *len = min(blksz, *len); in smb_smb_read()
783 mb_put_uint32le(mbp, uio->uio_offset); in smb_smb_read()
784 mb_put_uint16le(mbp, min(uio->uio_resid, 0xffff)); in smb_smb_read()
820 int tsize, len, resid; in smb_read() local
823 tsize = uio->uio_resid; in smb_read()
826 len = tsize; in smb_read()
827 error = smb_smb_read(ssp, fid, &len, &resid, uio, scred); in smb_read()
830 tsize -= resid; in smb_read()
831 if (resid < len) in smb_read()
838 smb_smb_write(struct smb_share *ssp, u_int16_t fid, int *len, int *rresid, in smb_smb_write() argument
848 if (*len && SSTOVC(ssp)->vc_sopt.sv_caps & SMB_CAP_LARGE_WRITEX) in smb_smb_write()
849 return (smb_smb_writex(ssp, fid, len, rresid, uio, scred)); in smb_smb_write()
851 blksz = SSTOVC(ssp)->vc_txmax - SMB_HDRLEN - 16; in smb_smb_write()
855 resid = *len = min(blksz, *len); in smb_smb_write()
864 mb_put_uint32le(mbp, uio->uio_offset); in smb_smb_write()
865 mb_put_uint16le(mbp, min(uio->uio_resid, 0xffff)); in smb_smb_write()
895 int error = 0, len, tsize, resid; in smb_write() local
898 tsize = uio->uio_resid; in smb_write()
902 len = tsize; in smb_write()
903 error = smb_smb_write(ssp, fid, &len, &resid, uio, scred); in smb_write()
906 if (resid < len) { in smb_write()
910 tsize -= resid; in smb_write()
918 * paths - uio_resid and uio_offset are what matter. in smb_write()
935 mbp = &rqp->sr_rq; in smb_smb_echo()