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
SMB protocol:
- Fix SPNEGO DER encoding for payloads >127 bytes
- Fix Create/Write request offset calculations (off-by-one)
- Fix Create/Write response minimum size checks
- Handle STATUS_PENDING by looping for final response
- Offer SMB 3.0.0/3.0.2 dialect fallbacks in negotiate
- Add NTLMSSP Version field and echo server negotiate flags
- Cap max read/write to 64KB to avoid oversized messages
SMB3 message signing:
- SHA-512 and AES-128-CMAC via CommonCrypto FFI
- SP800-108 KDF signing key derivation from session base key
- Preauth integrity hash tracking through handshake
- Sign all post-auth messages with AES-128-CMAC
S3 layer:
- Map SMB NotFound → S3 NoSuchKey (404), PermissionDenied → 403
- Streaming PutObject via channel-backed body
Test harness:
- make test runs sccache integration against SMB share
- Cold build populates cache, warm build verifies 100% hit rate
make test# sccache integration test (requires SPIO_SMB_USER/PASS)
23
23
make fmt # auto-format
24
24
make clean # cargo clean
@@ -39,11 +39,11 @@ The binary requires these environment variables:
39
39
40
40
The codebase has three modules:
41
41
42
-
-**`s3`** — HTTP layer. Parses incoming S3 API requests and produces XML responses. `router.rs` is the central dispatch (path-style bucket routing). Covers GetObject, PutObject, CopyObject, DeleteObject, HeadObject, ListObjectsV1/V2, multipart uploads, and stub endpoints for ACL/tagging/versioning. Auth is SigV4 (header + presigned URL) in `auth.rs`. `xml.rs` is a hand-rolled XML builder. `multipart.rs` manages upload state in-memory, with parts stored as temp files under `.spio-uploads/` on the SMB share. `body.rs` implements `SpioBody`, a zero-copy streaming response body (channel-backed for large reads, inline for XML/errors).
42
+
-**`s3`** — HTTP layer. Parses incoming S3 API requests and produces XML responses. `router.rs` is the central dispatch (path-style bucket routing). Covers GetObject, PutObject, CopyObject, DeleteObject, HeadObject, ListObjectsV1/V2, multipart uploads, and stub endpoints for ACL/tagging/versioning. `xml.rs` is a hand-rolled XML builder. `multipart.rs` manages upload state in-memory, with parts stored as temp files under `.spio-uploads/` on the SMB share. `body.rs` implements `SpioBody`, a zero-copy streaming response body (channel-backed for large reads, inline for XML/errors).
0 commit comments