Skip to content

Add password-protected .accdb/.mdb file support#3

Merged
dominion525 merged 6 commits into
mainfrom
feature/password-protection
Feb 18, 2026
Merged

Add password-protected .accdb/.mdb file support#3
dominion525 merged 6 commits into
mainfrom
feature/password-protection

Conversation

@dominion525

Copy link
Copy Markdown
Owner

Summary

  • Add support for reading password-protected .accdb files (Agile Encryption)
  • Add support for reading password-protected .mdb files (RC4 encryption)
  • Replace unwrap() with safe error handling in data/file/prop
  • Bump MSRV from 1.82 to 1.85
  • Add quality check script (scripts/quality-check.sh)

Verification

  • All tests passed (502 passed)
  • No Clippy warnings
  • No cargo audit issues
  • Coverage at 95.73%

🤖 Generated with Claude Code

dominion525 and others added 6 commits February 17, 2026 04:43
- LOOKUP_FLAG rows contain valid row data relocated to the page,
  not overflow pointers as previously assumed
- Stale entries (find_row failure) are logged but not counted as
  skipped_rows
- Eliminates VBA read failures on databases where Access relocated
  MSysAccessStorage rows to overflow pages
- Add test with overflow_enc_vbaV2003.mdb

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Support reading Access 2007+ databases encrypted with Agile Encryption
(AES-CBC). The --password global option enables decryption for all
subcommands (tables, schema, export, vba, queries, prop, ver).

Key changes:
- agile.rs: EncryptionInfo XML parsing, key derivation, password
  verification, and per-page AES-CBC decryption
- file.rs: detect encryption in open(), decrypt in open_with_password()
- CLI: --password global option with integration tests
- Security: quick-xml for XML parsing, subtle for constant-time hash
  comparison, zeroize for automatic key material cleanup

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Bump jetdb and jetdb-cli to 0.2.0
- Update READMEs: add --password example, document Agile Encryption
  support, remove resolved LOOKUP_FLAG limitation, add MS-OFFCRYPTO
  acknowledgment
- Update lib_doc.md: add open_with_password section and examples

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- data.rs: use let-else and .ok()? instead of .try_into().unwrap()
- prop.rs: return InvalidProperty error instead of panicking on slice conversion
- file.rs: collapse nested if into if-let with &&

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- scripts/quality-check.sh: run 6 CI checks in sequence with formatted summary
- crates/complexity-filter/: Rust crate for extracting complexity metrics from NDJSON (excluded from workspace)
- AGENTS.md: add Quality Check section
- .gitignore: use **/target/ to cover non-workspace crates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@dominion525 dominion525 merged commit e1f82dc into main Feb 18, 2026
8 checks passed
@dominion525 dominion525 deleted the feature/password-protection branch February 18, 2026 16:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant