Skip to content

v0.1.4

Choose a tag to compare

@github-actions github-actions released this 21 Oct 07:32
· 89 commits to main since this release
v0.1.4
f493ab7

Added

  • Leases: smbtorture smb2.lease 28/36 (was 3/36 at v0.1.3;
    Samba 4.19.5 reference: 34/36). Deferred CREATEs now pend as
    STATUS_PENDING and complete on lease-break ACK or the 35 s timeout
    (L1), and lease/oplock grant rules match Samba's — upgrades grant only
    the requested level per the current-open context, overwrite/truncate
    breaks to NONE, rename and sharing violations break only handle caching,
    stepped re-breaks keep read caching while write/handle caching is held
    (L2). Remaining 8 failures tracked in tests/conformance/results.md
    (L1.1 rename_wait intermittent, L2.1 ACK_REQUIRED, L2.2 v2 epoch).
  • Durable handles v2/v1 conformance — smb2.durable-v2-open 14/15
    (was 0/15; smbtorture 4.19.5). DHnQ/DHnC v1 contexts are parsed alongside
    DH2Q/DH2C; reconnects look up the durable open by the persistent file id
    (Samba's model), verify the CreateGuid for v2, and honor orphan gating — a
    durable only reconnects after its owning connection dropped. Durable
    opens survive metadata changes, multiple reconnect cycles, and
    PreviousSessionId session reconnects (old session torn down; its traffic
    then fails with USER_SESSION_DELETED, mirroring Samba). Lease-backed
    durables validate the lease key and are scoped to the client GUID.
  • Background durable sweeper task: expired orphaned durables are evicted
    (VFS handles closed) without waiting for client traffic to touch the
    table; a live connection's durable never expires — the timeout counts
    from the disconnect.

Fixed

  • Cargo builds with -D warnings failed (the setting CI uses): 21
    clippy lints (needless clones, ignored Results, unit-assert
    comparisons) and one tokio set_times shadowing in the vfs. No
    behavior changes intended; the rustls-webpki 0.103.16 bump is for
    RUSTSEC-2026-0382.
  • CREATE responses reported wrong create_action and file attributes.
    Every open answered create_action=Opened; created files now correctly
    report Created, superseded files Superseded, overwritten files
    Overwritten (the VFS create now reports the action). New files reported
    FILE_ATTRIBUTE_ARCHIVE|NORMAL; NORMAL is now only set when no other
    attribute applies (MS-FSCC). Side effect: smb2.create 5/12 → 6/11,
    smb2.lease 3/36 → 8/31 (assertions on those fields), smb2.session
    44/22 → 46/20.
  • Concurrent v1 durable opens corrupted each other. All DHnQ durables
    shared one zero-GUID table key, so a second v1 open evicted the first
    and closed its file handle mid-session (Linux cifs clients request a v1
    durable on every SMB 2.1 open). v1 durables are keyed by their SMB
    persistent file id, matching Samba.
  • A durable open's VFS handle could be closed while still in use when
    the durable timeout elapsed on a live connection; the timeout now starts
    at disconnect (Samba: disconnect_time), not at open.
  • Strict CREATE parsing rejected legitimate durable-reconnect requests.
    Unknown OplockLevel / ImpersonationLevel / CreateDisposition wire values
    failed the whole request decode; these fields are advisory and ignored
    on reconnects (MS-SMB2 3.3.5.9.12), so they now parse leniently.