Commit Graph

349 Commits

Author SHA1 Message Date
Warren
a7f50ff747 Update WebDAV: root path + 0.0.0.0 bind
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-22 07:17:45 +08:00
Warren
41f0217450 Update Caddyfile: studio.momentry.ddns.net/demo WebDAV config
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-22 06:51:51 +08:00
Warren
e7a9f886ed Fix web server bind to 0.0.0.0 for external access
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-22 06:20:17 +08:00
Warren
cd184daa20 Update AGENTS.md: CTDB architecture analysis summary
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-22 05:37:12 +08:00
Warren
060f43f0c4 Add CTDB architecture analysis document
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
2026-06-22 05:36:23 +08:00
Warren
63b765f68e Update AGENTS.md: Phase 5 complete summary
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
2026-06-22 05:31:26 +08:00
Warren
e9eca1b492 Add DFS Referral Support (Phase 5)
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-22 05:30:16 +08:00
Warren
4db72fff4a Update AGENTS.md: Phase 6 complete summary
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
2026-06-22 05:22:54 +08:00
Warren
52c38b1919 Add SMB Configuration Templates (Phase 6)
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-22 05:22:14 +08:00
Warren
054bf55490 Update AGENTS.md: Phase 1-4 complete summary
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
2026-06-22 05:15:41 +08:00
Warren
e267b43424 Add Compound Request tests (Phase 4)
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-22 05:13:02 +08:00
Warren
c89f6c96ae Update AGENTS.md: Phase 1-3 complete summary
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
2026-06-22 04:43:49 +08:00
Warren
ebe976eee4 Implement Write/Read Cache (Phase 3)
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-22 04:42:55 +08:00
Warren
9ae0402318 Document NTLMv2+LDAP incompatibility and skip Phase 2.3
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
2026-06-22 04:34:15 +08:00
Warren
3c5de4e6a3 Update AGENTS.md: LDAP Provider Phase 2.1-2.2 complete
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-22 04:13:59 +08:00
Warren
88590d3611 Add LDAP CLI parameters to SMB server (Phase 2.2)
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
2026-06-22 04:13:10 +08:00
Warren
912bc21929 Implement LDAP Provider Phase 2.1: DataProvider trait with OpenLDAP/AD support
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-22 03:34:17 +08:00
Warren
4ab282bbff Update AGENTS.md: SMB3 encryption Phase 1 complete (v1.51)
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
2026-06-22 03:19:23 +08:00
Warren
382ea2e28b Phase 1.3: SMB3 packet encryption handling complete
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- Add handle_encrypted_frame() to dispatch.rs
- Detect TRANSFORM_HEADER magic (0x534D4220)
- Decrypt incoming packets using session.encryption_key
- Encrypt outgoing responses
- All encryption tests pass (3 passed)

Phase 1 SMB3 encryption complete: ~380 lines total
2026-06-22 03:18:22 +08:00
Warren
98239c09d4 Phase 1.2: SMB3 encryption negotiation + session state
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Add encryption_supported and encryption_cipher to Connection state
- Add encryption_key and encryption_enabled to Session state
- Add EncryptionCapabilities context to NegotiateResponse (SMB 3.1.1)
- Derive encryption_key from session_base_key in session_setup
- Export derive_encryption_key as public method
- Fix Session::new() signature with 8 parameters
- All encryption tests pass (3 passed)
2026-06-22 02:56:02 +08:00
Warren
104e7f5f9c Phase 1.1: SMB3 encryption module (AES-CTR + HMAC)
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- Add encryption.rs with Smb3Encryption struct
- Implement AES-128-CTR + HMAC-SHA256 (simplified approach)
- Add TransformHeader struct for SMB2 TRANSFORM_HEADER
- 3 unit tests pass (encrypt/decrypt roundtrip + signature verification)
- Total: ~180 lines of code
2026-06-22 02:20:59 +08:00
Warren
097521b35d P2: Fix S3 multipart route - use query param for action
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Change route from /s3/multipart/:bucket/*key/init to /s3/multipart/:bucket/*key?action=init
- Add multipart_handler to unify all multipart operations
- Use Response type instead of impl IntoResponse for type compatibility
2026-06-22 01:22:16 +08:00
Warren
aae8669c9f P1: Update AGENTS.md with S3 improvements (P0-P3) + benchmark scripts
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-22 01:15:49 +08:00
Warren
08244032a8 P0: Add S3 benchmark script
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- PUT/GET 1-100MB files
- LIST bucket, HEAD object
- DELETE cleanup
- Multipart upload simulation (5x10MB)

Tests throughput for all S3 operations
2026-06-22 00:06:35 +08:00
Warren
7d229d0b62 P0: Add performance benchmark scripts
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- webdav_benchmark.sh: PROPFIND, upload/download 1-100MB
- ssh_benchmark.sh: SCP, rsync upload/download, delta transfer
- Tests throughput for all file sizes

Ready for performance testing
2026-06-21 23:55:25 +08:00
Warren
321310582b E: Security improvements - auth + policy enforcement
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Add Signature V4 auth to multipart endpoints (init/upload/complete/abort)
- Add policy checks to main S3 handlers (get/put/delete)
- extract_user_from_auth() helper for policy evaluation
- check_bucket_policy() integrated into all handlers
- Policy denied returns 403 FORBIDDEN

Tests: 299 passed, 0 failed
2026-06-21 23:43:24 +08:00
Warren
9b02bbac27 A: Code quality improvements - fix clippy warnings
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- Remove unused imports in server.rs (Body, HeaderValue, RwLock)
- Remove unused imports in forward_acl.rs (tests still need Ipv4Addr)
- Remove unused imports in host_key.rs (Read, Write)
- Remove unused imports in kex_exchange.rs (HostKeyType)
- Remove unused imports in known_hosts.rs (tests need Ipv4Addr)
- Remove unused imports in multiplex.rs (Arc)
- Auto-fix other unused imports via clippy --fix

Tests: 303 passed, 0 failed (4 new tests added)
2026-06-21 23:08:07 +08:00
Warren
02d98419e1 P3: Bucket Policy implementation complete
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- BucketPolicy struct with Version + Statement array
- PolicyStatement: Effect, Principal, Action, Resource, Condition
- Principal matching (wildcard + user-specific)
- Action/Resource pattern matching with wildcards
- GetBucketPolicy: GET /s3/policy/:bucket
- PutBucketPolicy: PUT /s3/policy/:bucket
- DeleteBucketPolicy: DELETE /s3/policy/:bucket
- Policy persistence to data/s3_policies/:bucket/policy.json
- check_bucket_policy() for authorization
- 6 unit tests

Tests: 299 passed, 0 failed
2026-06-21 22:50:53 +08:00
Warren
ca0f541a79 P2: S3 Multipart Upload support complete
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- InitiateMultipartUpload: POST /s3/multipart/:bucket/:key/init
- UploadPart: PUT /s3/multipart/:bucket/:key/part
- CompleteMultipartUpload: POST /s3/multipart/:bucket/:key/complete
- AbortMultipartUpload: DELETE /s3/multipart/:bucket/:key/abort
- In-memory upload tracking with once_cell::Lazy
- Part files stored in temp dir during upload
- Final file assembled on CompleteMultipartUpload
- XML responses for all operations

Tests: 293 passed, 0 failed
2026-06-21 22:44:17 +08:00
Warren
5487ad63a6 P1: AsyncS3Vfs native async implementation using reqwest
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Replace spawn_blocking + ureq with native async reqwest
- AsyncS3Vfs uses reqwest::Client for HTTP operations
- rusty-s3 for presigned URL generation + XML parsing
- AsyncS3File with async read/write/seek/flush
- reqwest dependency added under async-vfs feature

Tests: 297 passed (293 + 4 new s3_auth tests)
2026-06-21 22:22:05 +08:00
Warren
f5074b2ce2 P0: AWS Signature V4 implementation complete
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- Full Canonical Request with signed headers
- Proper URI encoding (encode_slash option)
- X-Amz-Date timestamp support
- SignedHeaders extraction from Authorization header
- Payload hash from X-Amz-Content-Sha256
- 4 unit tests passing

Tests: 297 passed (293 + 4 new)
2026-06-21 22:14:34 +08:00
Warren
49873cb302 Phase 5.1: AsyncVfsDavFs spawn_blocking wrapper complete
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- AsyncVfsDavFs wraps VfsDavFs with spawn_blocking
- All DavFileSystem methods offloaded to blocking thread pool
- Uses tokio::runtime::Runtime::block_on inside spawn_blocking
- Prevents blocking async executor during VFS operations

Tests: 293 passed, 0 failed
2026-06-21 21:33:43 +08:00
Warren
c2ff6fc90e Phase 5: WebDAV async integration analysis - API mismatch found
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- dav-server DavFileSystem API changed (20+ compile errors)
- read_dir takes ReadDirMeta, not depth
- have_props/get_props/get_prop/patch_props new methods
- DavFile needs write_buf method
- DavMetaData/DavDirEntry async return types changed

Recommended approach: spawn_blocking wrapper (~2h)
Alternative: full rewrite (~8h)

Phase 5 blocked pending API analysis
2026-06-21 21:28:39 +08:00
Warren
23e0996b81 Phase 5: WebDAV async integration design framework
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Detailed design notes for AsyncVfsDavFs
- AsyncVfsDavFile implementation pattern
- DavFileSystem trait async implementation
- Estimated: ~3 hours for full implementation

Phase 5 framework documented for future implementation
2026-06-21 21:20:47 +08:00
Warren
94a7584e64 P1: AsyncSmbVfs implementation (Phase 4)
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- AsyncSmbVfs: spawn_blocking wrapper over SmbVfs
- AsyncSmbFile: tokio::sync::Mutex for async state
- Add Clone derive to SmbVfs (Arc<Mutex<Tree>>)
- Remove manual Clone impl (derive handles it)

Phase 4 complete: AsyncSmbVfs working
Phase 5 pending: WebDAV integration

Tests: 293 passed, 0 failed
2026-06-21 21:16:50 +08:00
Warren
5c9b51fc49 P1: AsyncS3Vfs implementation (Phase 3)
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- AsyncS3Vfs: spawn_blocking wrapper over S3Vfs
- AsyncS3File: tokio::sync::Mutex for async state
- Add Clone derive to S3Vfs
- All backend methods wrapped with spawn_blocking

Phase 3 complete: AsyncS3Vfs working
Phase 4 pending: AsyncSmbVfs
Phase 5 pending: WebDAV integration

Tests: 293 passed, 0 failed
2026-06-21 21:08:48 +08:00
Warren
790efe13f4 P1: AsyncLocalFs implementation (Phase 2)
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- AsyncLocalFile: tokio::fs::File wrapper
- AsyncLocalFs: AsyncVfsBackend impl using tokio::fs
- Key methods: read_dir, open_file, stat, create_dir, remove_file, rename
- 4 async tests passing

Phase 2 complete: AsyncLocalFs working
Phase 3 pending: AsyncS3Vfs
Phase 4 pending: AsyncSmbVfs
Phase 5 pending: WebDAV integration

Tests: 293 passed, 0 failed
2026-06-21 20:59:41 +08:00
Warren
6242a5eaab P1: AsyncVfsBackend trait design (Phase 1 - framework)
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Add AsyncVfsBackend + AsyncVfsFile trait definitions
- Use cfg(feature = "async-vfs") for optional compilation
- Design notes for Phase 2-5 implementation
- Estimated: ~13 hours (multi-day project)

Phase 2: AsyncLocalFs (tokio::fs)
Phase 3: AsyncS3Vfs (async client)
Phase 4: AsyncSmbVfs (async wrapper)
Phase 5: WebDAV integration

Tests: 289 passed, 0 failed
2026-06-21 20:52:31 +08:00
Warren
ed55c6050e P2: Streaming read optimization (64KB chunk cache)
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- Add read_cache + read_cache_offset fields to VfsDavFile
- Read-ahead 64KB chunks to reduce VFS calls
- Serve from cache when data is available
- Invalidate cache on seek()
- Reduces memory allocations and VFS syscall overhead

Tests: 289 passed, 0 failed
2026-06-21 19:16:12 +08:00
Warren
9c82830959 P1: WebDAV ACL enforcement (RFC 3744)
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Add enable_acl field to VfsDavFs
- Add check_acl() helper method
- ACL checks in open(), read_dir(), create_dir(), remove_dir(), remove_file(), rename()
- Uses VfsAceMask for permission checks (ReadData, WriteData, etc.)
- Returns FsError::Forbidden if ACL denies access

Tests: 289 passed, 0 failed
2026-06-21 18:37:48 +08:00
Warren
2a0376cc58 Update AGENTS.md: Phase 22 complete with 10 commits summary
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-21 18:31:08 +08:00
Warren
a56207db0b P3: Quota enforcement - check before write in flush()
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Check VfsBackend quota before writing buffered data
- Return FsError::InsufficientStorage (507) if limit exceeded
- Log warning with current/adding/limit values

Tests: 289 passed, 0 failed
2026-06-21 18:24:44 +08:00
Warren
12ec190831 Add Range request test: verify dav-server partial content support
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- test_range_request: GET with Range header returns 206 + partial content
- Verify Content-Range header present
- Test bytes=5-10 returns correct 6-byte slice

Tests: 289 passed, 0 failed
2026-06-21 18:21:48 +08:00
Warren
b71510b2e8 P0 fix: Mutex/RwLock poison recovery for webdav_locks and webdav_version
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Add recover_mutex() helper in webdav_locks.rs
- Add recover_rwlock() helper in webdav_version.rs
- Replace all .unwrap() calls with recovery pattern
- Tests: 288 passed, 0 failed
2026-06-21 18:11:48 +08:00
Warren
1408646424 AGENTS.md: Update WebDAV Phase 22 documentation
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- Document all P0-P3 improvements completed
- Add Phase 22 section with detailed changes
- Update Phase 21 status (all completed)
2026-06-21 17:28:31 +08:00
Warren
0322e2d4b6 WebDAV error handling improvements: map_vfs_error helper
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Add map_vfs_error() to map VfsError to FsError properly
- NotFound → NotFound, PermissionDenied → Forbidden, etc.
- Update create_dir/remove_dir/remove_file/rename/set_atime/set_mtime/get_quota
- Add executable() method to VfsDavMetaData (mode & 0o111)

Tests: 288 passed, 0 failed
2026-06-21 16:50:23 +08:00
Warren
43c135e877 WebDAV additional fixes: dead props compaction + accessed metadata
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- save_props/patch_props: filter empty entries before persisting
- VfsDavMetaData: add accessed field + accessed() method

Tests: 288 passed, 0 failed
2026-06-21 16:45:03 +08:00
Warren
ab11983c1b WebDAV MKCOL: return 405 Exists if directory already exists (RFC 4918)
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
P3 fix:
- create_dir: check vfs.exists() before creating
- Return FsError::Exists (405 Method Not Allowed) if path exists

Tests: 36 webdav tests pass
2026-06-21 16:16:43 +08:00
Warren
5000ba7c14 WebDAV async + cache TTL: spawn_blocking for props persistence, 5min TTL eviction
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
P2 improvements:
- patch_props: use tokio::spawn_blocking for blocking VFS writes
- WEBDAV_HANDLER_CACHE: add CachedHandler with Instant timestamp
- TTL check on each request (300s = 5 minutes), recreate if expired
- create_handler_for_user() helper function

Tests: 288 passed, 0 failed
2026-06-21 16:14:42 +08:00
Warren
9acd174388 WebDAV improvements: flush fix, RwLock recovery, expired lock cleanup, atomic set_times
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
P0 fixes:
- flush(): add flushed flag, proper error logging, Drop warning for data loss
- props_data RwLock: replace unwrap() with try_read/try_write recovery
- PersistedLs: add is_expired() + cleanup_expired_locks() helper

P1 improvements:
- Props persistence via VFS (load_props/save_props/patch_props)
- COPY/MOVE sync dead props (copy on COPY, move key on rename)
- Atomic set_atime/set_mtime via filetime crate (no race condition)

New files:
- webdav_locks.rs: PersistedLs with lock persistence + expiry cleanup

Tests: 288 passed, 0 failed
2026-06-21 16:07:12 +08:00