You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Full-size WRITE requests dropped the connection. The server advertised MaxWriteSize = 1 MiB but rejected any frame larger than max_frame_size (1 MiB), so a compliant client's 1 MiB WRITE (payload + SMB2/WRITE/transform headers) was treated as oversized and the connection closed. The wire limit now allows fixed header headroom above max_frame_size, and the advertised I/O sizes are derived from max_frame_size.
QUERY_DIRECTORY rejected FileDirectoryInformation and FileNamesInformation. The protocol enum for FileInformationClass used wrong MS-FSCC §2.4 codes (FileDirectoryInformation = 2 instead of 1, FileFullDirectoryInformation = 14 instead of 2) and had no FileNamesInformation (12). Requests with class 1 or 12 failed to decode and were answered with STATUS_INVALID_PARAMETER, which broke directory listing for go-smb2 / rclone. The response encoders were already keyed on the correct codes and are unchanged.
QUERY_DIRECTORY with an unsupported FileInformationClass returned STATUS_INVALID_PARAMETER. MS-SMB2 3.3.5.18 requires STATUS_INVALID_INFO_CLASS. The class byte is now decoded raw, so any non-directory class (e.g. 14 = FilePositionInformation, or undefined values) reaches the handler and gets STATUS_INVALID_INFO_CLASS.
NetrShareEnum / NetrShareGetInfo sent a NULL remark pointer for shares without a comment. Legal NDR, but go-smb2 (as bundled in rclone ≤ 1.75) reads a remark for every entry and failed share listing with "broken net share enum response format". Empty comments are now sent as the empty string, as Samba and Windows do. Referent IDs are now distinct (0x00020000, +4) instead of all 1.
NetrShareEnum wrote deferred strings in the wrong order, scrambling share names and comments. All netnames were emitted before all remarks, but NDR (C706 §14.3.12.3) requires each element's pointees in element order (name[0], remark[0], name[1], …). As soon as any share had a comment, clients paired names and comments wrongly (smbclient -L showed private with comment public). The reply is now byte-identical to Samba's for the same share set.
NetrShareGetInfo reply had an extra leading Level field. The [out] LPSHARE_INFO InfoStruct union is marshalled as discriminant + arm (MS-SRVS 3.1.4.10); rssmb wrote Level and then the discriminant, shifting every following field by 4 bytes. Strict NDR clients (e.g. impacket hNetrShareGetInfo) failed to parse the reply. It is now byte-identical to Samba's. The request parser also expected a referent ID before NetName, which is a top-level [ref] pointer with no wire representation (C706 §14.3.11.1), so real clients' requests were misread and answered with ERROR_INVALID_LEVEL.
SPNEGO first-leg negTokenResp omitted negState and supportedMech. RFC 4178 §4.2.2 requires both on the acceptor's first response. Strict clients (go-smb2 / rclone, Windows) rejected session setup with "server selected an unsupported mechanism"; smbclient and Linux CIFS tolerated the omission. Added an rclone (go-smb2) interop job to Interop CI that runs on every push and pull request to main, so a strict SPNEGO client now gates PRs.