Compare commits
459 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
01e5b6ee1d | ||
|
|
d90c2ae731 | ||
|
|
6feb42a19b | ||
|
|
9529c4f299 | ||
|
|
a3d26d3790 | ||
|
|
a3b17f4b68 | ||
|
|
dc9c9c443f | ||
|
|
dfd4a1c12c | ||
|
|
e76637a1a5 | ||
|
|
fcf993766f | ||
|
|
337baa0e79 | ||
|
|
b9bd1c3c00 | ||
|
|
61413e7a61 | ||
|
|
d8f7d602b4 | ||
|
|
9526f42536 | ||
|
|
5211852d7e | ||
|
|
e6b546f179 | ||
|
|
510cd03ce5 | ||
|
|
d92f9b1f49 | ||
|
|
4a2f64ed4d | ||
|
|
d473525098 | ||
|
|
4daf5cee54 | ||
|
|
28f255733e | ||
|
|
72fa0ed58f | ||
|
|
33b2e373da | ||
|
|
fdd3985af9 | ||
|
|
dc9510ec64 | ||
|
|
a98d3b7c64 | ||
|
|
6809c4da1b | ||
|
|
aeec2b8a98 | ||
|
|
d7c7ce4cc4 | ||
|
|
daf23b65ad | ||
|
|
d60826ad7f | ||
|
|
e19e7d2c43 | ||
|
|
abeb231bc3 | ||
|
|
1705c2c94a | ||
|
|
12a623f7d7 | ||
|
|
6eff15c9ec | ||
|
|
41b2a9bb60 | ||
|
|
1a7992cc57 | ||
|
|
7dfeb47212 | ||
|
|
17d58ecf1e | ||
|
|
e4676b0e4f | ||
|
|
4d1a0e40d2 | ||
|
|
559783bcca | ||
|
|
99b7407a02 | ||
|
|
0c07ffba16 | ||
|
|
e0833e3ddc | ||
|
|
ac5e3fbe0d | ||
|
|
a0642ac2a8 | ||
|
|
4abecd7d5c | ||
|
|
c9dea4482b | ||
|
|
0276020df6 | ||
|
|
ca583f5ed1 | ||
|
|
09d719d48f | ||
|
|
ab75f2e699 | ||
|
|
9d8fdba3ee | ||
|
|
9529c5b7f1 | ||
|
|
7e575c68e2 | ||
|
|
dc52620afa | ||
|
|
2867ef8800 | ||
|
|
843cdca5be | ||
|
|
99052b21d4 | ||
|
|
8fd16f7d14 | ||
|
|
af753f003e | ||
|
|
44cfc20e2b | ||
|
|
9b36334cdc | ||
|
|
9dec5fa3ca | ||
|
|
0e9dc777d5 | ||
|
|
8fe55558a0 | ||
|
|
06f5df6f1e | ||
|
|
8075a98f1b | ||
|
|
f262c291ef | ||
|
|
049e7eea9a | ||
|
|
b271804c3f | ||
|
|
cb9fe40ebb | ||
|
|
df1035a31d | ||
|
|
f2e43e04c8 | ||
|
|
abd6d4e2ba | ||
|
|
90df879500 | ||
|
|
78416f923b | ||
|
|
bd20cd2d1d | ||
|
|
6760865487 | ||
|
|
12b3c347cf | ||
|
|
cb9b8ba484 | ||
|
|
f7fedaa441 | ||
|
|
ce9e5551fe | ||
|
|
4290c7be0d | ||
|
|
1bd591eba9 | ||
|
|
6433ad0609 | ||
|
|
85c3a07e52 | ||
|
|
1f0e97a11b | ||
|
|
5671e3ad41 | ||
|
|
877f4399e9 | ||
|
|
969b56d3ff | ||
|
|
3f521bb78c | ||
|
|
54e29a282e | ||
|
|
8491f11e64 | ||
|
|
5a7c8928d8 | ||
|
|
f8b7dc88a9 | ||
|
|
925af722f8 | ||
|
|
97f7136cd3 | ||
|
|
1058caba0f | ||
|
|
a892385f15 | ||
|
|
b342be4571 | ||
|
|
8aec6fb9ad | ||
|
|
55d75fbd53 | ||
|
|
4f552ba3ed | ||
|
|
9b1ee4b476 | ||
|
|
c3e32a9502 | ||
|
|
ea2f17b9a9 | ||
|
|
3d8dac0c53 | ||
|
|
beb314d7c7 | ||
|
|
903b8f189e | ||
|
|
941c1f5d7f | ||
|
|
f0c5c2ad3f | ||
|
|
43205995c6 | ||
|
|
bb4c957144 | ||
|
|
4034c68e67 | ||
|
|
089d0ca2b7 | ||
|
|
6197893e01 | ||
|
|
8d1898bd0b | ||
|
|
3af68b1d3f | ||
|
|
3b2f54daff | ||
|
|
3083626bda | ||
|
|
5ad6562578 | ||
|
|
14ee702b09 | ||
|
|
f48dcb3dba | ||
|
|
1a11a55a42 | ||
|
|
57235219f2 | ||
|
|
0b32cf348d | ||
|
|
c3214f6776 | ||
|
|
4e40a7fd79 | ||
|
|
d655d18a79 | ||
|
|
2c76a370c2 | ||
|
|
6cc6e42542 | ||
|
|
e82e9dad3b | ||
|
|
4df16fa501 | ||
|
|
048f4c45b3 | ||
|
|
0cb89a03ec | ||
|
|
fbad1b51f0 | ||
|
|
abf5a2ef8b | ||
|
|
99c8936568 | ||
|
|
ef2b5e7c26 | ||
|
|
09e47d3731 | ||
|
|
f14c256b44 | ||
|
|
080e315a09 | ||
|
|
8a3de7334b | ||
|
|
8b24e48fde | ||
|
|
bb6950433d | ||
|
|
12b2360855 | ||
|
|
2364e4cd4a | ||
|
|
84b064b743 | ||
|
|
c5e1fbfafc | ||
|
|
998569234d | ||
|
|
98e671fdc6 | ||
|
|
ecf2e2da5a | ||
|
|
ca68031795 | ||
|
|
789f91ba39 | ||
|
|
b85675f4a7 | ||
|
|
e210faa097 | ||
|
|
be862b7a07 | ||
|
|
241155e64d | ||
|
|
18cdbb3f5a | ||
|
|
da606923e9 | ||
|
|
9348ecdc27 | ||
|
|
1e6486ae17 | ||
|
|
bd4bdc6a3f | ||
|
|
2836364e1a | ||
|
|
c6800bf705 | ||
|
|
1df561ee07 | ||
|
|
c12b0c5568 | ||
|
|
6f42041837 | ||
|
|
383c6d05d1 | ||
|
|
b68775e9d8 | ||
|
|
7de453b838 | ||
|
|
ae28ff6833 | ||
|
|
70c024f7f5 | ||
|
|
06699c6692 | ||
|
|
0731a64957 | ||
|
|
36ec1aa35b | ||
|
|
53bbc4717e | ||
|
|
3c26709da9 | ||
|
|
413eec9b8c | ||
|
|
94eb3ffa7a | ||
|
|
673bdbcf3c | ||
|
|
b671070c0d | ||
|
|
aeee40048c | ||
|
|
518947e3aa | ||
|
|
defb5f027d | ||
|
|
292046ff7f | ||
|
|
5a3bde7676 | ||
|
|
05167e7b21 | ||
|
|
ad9ef88e15 | ||
|
|
0ae88131f6 | ||
|
|
0e59f2745e | ||
|
|
78cff4b6d9 | ||
|
|
8bdbccf13f | ||
|
|
4317e9d829 | ||
|
|
e565f89d47 | ||
|
|
41de1dff2d | ||
|
|
3d66618818 | ||
|
|
12cd224f42 | ||
|
|
2b5ab7db82 | ||
|
|
3e90f1b4d8 | ||
|
|
8599f0903c | ||
|
|
182bcd4ef7 | ||
|
|
8dd2377765 | ||
|
|
bfa64aa8f0 | ||
|
|
d883ca26a9 | ||
|
|
249e71fe88 | ||
|
|
ed31da0021 | ||
|
|
59bd71ddca | ||
|
|
29feb5da79 | ||
|
|
ff89a05743 | ||
|
|
fe7f1e0a51 | ||
|
|
a0b8abecb8 | ||
|
|
1de0da3d44 | ||
|
|
8f6dd13b0a | ||
|
|
809fb0d457 | ||
|
|
3ab7166e63 | ||
|
|
ee08ef421d | ||
|
|
48bf993ac5 | ||
|
|
b7e6679a58 | ||
|
|
071145dd19 | ||
|
|
22811471ac | ||
|
|
ed3f7f5a16 | ||
|
|
f83cd81ad7 | ||
|
|
c3259b2610 | ||
|
|
54afbe6a2f | ||
|
|
0aba77ee55 | ||
|
|
cf023253a0 | ||
|
|
c464f2bfe9 | ||
|
|
f19d254a0c | ||
|
|
e7f9d58541 | ||
|
|
8cbbe7cdfc | ||
|
|
8bdc7c4702 | ||
|
|
018686afeb | ||
|
|
abcff25e57 | ||
|
|
64eb3d0c82 | ||
|
|
e26dbc5608 | ||
|
|
42a2443d62 | ||
|
|
6fbab25478 | ||
|
|
2f43ca42be | ||
|
|
95b91a0890 | ||
|
|
6f77d98642 | ||
|
|
1b3abf8ab0 | ||
|
|
1bdf1bbbed | ||
|
|
1125a02d1e | ||
|
|
6e362ee637 | ||
|
|
388b4a736a | ||
|
|
87bf232e97 | ||
|
|
f6757d35ad | ||
|
|
235015cb56 | ||
|
|
75de62327d | ||
|
|
8f98d390e3 | ||
|
|
c9d71e7781 | ||
|
|
505f338d28 | ||
|
|
ffc72c896c | ||
|
|
8c91836038 | ||
|
|
d14821fb16 | ||
|
|
2dfc0e540c | ||
|
|
30d4e36a8b | ||
|
|
43ca4e7dfe | ||
|
|
49fd85c975 | ||
|
|
94df540ffe | ||
|
|
96fcc2ce89 | ||
|
|
c4e27d431a | ||
|
|
3e9fba7283 | ||
|
|
d7c054e9b2 | ||
|
|
485c446013 | ||
|
|
9dd90c95a7 | ||
|
|
a8b60b7b02 | ||
|
|
3b8dc028c1 | ||
|
|
bab48b42f7 | ||
|
|
775efc65ed | ||
|
|
d8006e0b76 | ||
|
|
651bcfc904 | ||
|
|
029ccefe22 | ||
|
|
9d714d5b4d | ||
|
|
b5827aa25f | ||
|
|
8f03f2f59e | ||
|
|
417bc29bc8 | ||
|
|
381eb76f7b | ||
|
|
dbc7f020fd | ||
|
|
50eec240b4 | ||
|
|
d87f0030a3 | ||
|
|
8723b7f6a4 | ||
|
|
4b87a3e58e | ||
|
|
bd5984ca82 | ||
|
|
969d3f9b23 | ||
|
|
f61f55fff7 | ||
|
|
305fd24a8e | ||
|
|
a5c3bf6d9d | ||
|
|
97cf35c993 | ||
|
|
eeea299187 | ||
|
|
6875851892 | ||
|
|
ff6c3d7d9a | ||
|
|
deb0926497 | ||
|
|
0b71cb1dad | ||
|
|
caece405fb | ||
|
|
3a86381df8 | ||
|
|
68e2dd8d22 | ||
|
|
bbd1604894 | ||
|
|
976c6914a6 | ||
|
|
cde88546f3 | ||
|
|
fff1b49f73 | ||
|
|
18cfbf729c | ||
|
|
6f112b11e4 | ||
|
|
ee1268c518 | ||
|
|
d78a6b6095 | ||
|
|
63b18084ac | ||
|
|
7d0dc67180 | ||
|
|
f20b531430 | ||
|
|
28d096a89a | ||
|
|
350931b707 | ||
|
|
b7a1c620e4 | ||
|
|
067deb9bd7 | ||
|
|
99e42b1fce | ||
|
|
53d06f127d | ||
|
|
3094302bcc | ||
|
|
b504c72563 | ||
|
|
b1168d0233 | ||
|
|
3ca757883f | ||
|
|
c76d9e45e7 | ||
|
|
a23b4f4dc0 | ||
|
|
e6d2e5fe6e | ||
|
|
c9b0cbaa4e | ||
|
|
762fd9462f | ||
|
|
394c0375b7 | ||
|
|
4cf5e83c38 | ||
|
|
cb5d3ed21d | ||
|
|
4bd9fdd7a4 | ||
|
|
fe739578ab | ||
|
|
3f77678b5c | ||
|
|
c477f43c40 | ||
|
|
7371589955 | ||
|
|
1cbbcff259 | ||
|
|
416581b179 | ||
|
|
82c1bf4ddb | ||
|
|
7f33868d14 | ||
|
|
c5312d63f2 | ||
|
|
e401e8f4bc | ||
|
|
159c7cf153 | ||
|
|
5686776e53 | ||
|
|
05ab5b1700 | ||
|
|
be873c83d6 | ||
|
|
87c24222b8 | ||
|
|
dd21defcf3 | ||
|
|
25d46fbc03 | ||
|
|
742a4f8980 | ||
|
|
e84d6c0b06 | ||
|
|
636d013557 | ||
|
|
3e6b118267 | ||
|
|
eee4ca9a26 | ||
|
|
aecd154399 | ||
|
|
f293aad74f | ||
|
|
5804e63559 | ||
|
|
fb2664b54a | ||
|
|
10f4704724 | ||
|
|
ea77ee686d | ||
|
|
09bda6a882 | ||
|
|
6fb498648d | ||
|
|
5b47190fcc | ||
|
|
663d4d99ae | ||
|
|
4ea0a1058c | ||
|
|
55ca5ca34c | ||
|
|
cdf6cd7cd2 | ||
|
|
4c1105f968 | ||
|
|
a81771207f | ||
|
|
2fe647fd7a | ||
|
|
33b740ddd0 | ||
|
|
f30604c6f6 | ||
|
|
e9ea5b43ec | ||
|
|
76a7dc79f4 | ||
|
|
1594e5f4e3 | ||
|
|
13a71ff1c8 | ||
|
|
fa73f100f7 | ||
|
|
b8da5e0577 | ||
|
|
6165975bdc | ||
|
|
10891a403d | ||
|
|
37dabd2561 | ||
|
|
9d0537bdab | ||
|
|
063bf4a58d | ||
|
|
d5d9a4c08c | ||
|
|
eddd97fbab | ||
|
|
53f88b93fb | ||
|
|
59042563b3 | ||
|
|
74d96fc06f | ||
|
|
9c1a01ffe8 | ||
|
|
4b92838b4f | ||
|
|
b225b85644 | ||
|
|
ebc0b3ff5f | ||
|
|
64281b508b | ||
|
|
6c9078c870 | ||
|
|
6b51c66c68 | ||
|
|
d04a6c4eb7 | ||
|
|
28e2806e07 | ||
|
|
6182b605c0 | ||
|
|
8077cd028d | ||
|
|
761e1aed58 | ||
|
|
ee44a7fd70 | ||
|
|
058e6d15c1 | ||
|
|
83720e6960 | ||
|
|
86550f2253 | ||
|
|
881e6b5a8b | ||
|
|
102ce04b2d | ||
|
|
90bbb66409 | ||
|
|
df40742223 | ||
|
|
f7920c12d5 | ||
|
|
51a08fc85e | ||
|
|
655202a35a | ||
|
|
cbbabf477a | ||
|
|
0167ce60bd | ||
|
|
d362b51450 | ||
|
|
95aaa96fb8 | ||
|
|
fa53c79ecf | ||
|
|
27668b81a5 | ||
|
|
f1a5e1c899 | ||
|
|
ae55d88544 | ||
|
|
25fc69dcd4 | ||
|
|
1bb215156e | ||
|
|
758d6f0c8d | ||
|
|
798fee338b | ||
|
|
9253a59f05 | ||
|
|
18857cb60b | ||
|
|
7bdcf05fc3 | ||
|
|
32d115d22e | ||
|
|
2e0d66039d | ||
|
|
acb37db6f1 | ||
|
|
0e1b32adcd | ||
|
|
c20104e67c | ||
|
|
32f2710430 | ||
|
|
605f13ed4a | ||
|
|
a6a4ed6ed4 | ||
|
|
c3bd31c51b | ||
|
|
90c63483c1 | ||
|
|
3383882b95 | ||
|
|
d5adf7592c | ||
|
|
9ba88e2f13 | ||
|
|
772964886e | ||
|
|
70b73524c6 | ||
|
|
a459344078 | ||
|
|
63b2394ed0 | ||
|
|
cdb10dce0c | ||
|
|
9b5b1d6dce | ||
|
|
c231abe13d | ||
|
|
d81f6ea1c0 | ||
|
|
1012d715b2 | ||
|
|
a1a5e21834 | ||
|
|
bc147070b6 | ||
|
|
9176ddc3e1 | ||
|
|
4f07a6592c | ||
|
|
3ad205f733 | ||
|
|
f01608f2bb | ||
|
|
fa4837c67b | ||
|
|
af466b120e | ||
|
|
ce790dcd3a | ||
|
|
e1d9a4fb53 |
@@ -54,6 +54,7 @@ IncludeCategories:
|
||||
IndentCaseLabels: false
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: false
|
||||
InsertNewlineAtEOF: true
|
||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||
MacroBlockBegin: ''
|
||||
MacroBlockEnd: ''
|
||||
|
||||
21
.gitattributes
vendored
@@ -1,3 +1,14 @@
|
||||
# Github-linguist language hints
|
||||
*.h linguist-language=C++
|
||||
*.cpp linguist-language=C++
|
||||
|
||||
# Line endings harmony
|
||||
* text=auto eol=lf
|
||||
|
||||
# binary files
|
||||
*.ai binary
|
||||
|
||||
# Export
|
||||
src/version.h.cmake export-subst
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
||||
@@ -7,13 +18,3 @@ src/version.h.cmake export-subst
|
||||
snapcraft.yaml export-ignore
|
||||
make_release.sh export-ignore
|
||||
AppImage-Recipe.sh export-ignore
|
||||
|
||||
# github-linguist language hints
|
||||
*.h linguist-language=C++
|
||||
*.cpp linguist-language=C++
|
||||
|
||||
# binary files
|
||||
*.ai binary
|
||||
|
||||
# Line endings harmony
|
||||
* text=auto
|
||||
|
||||
44
.github/copilot-instructions.md
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
This repository is a C++ (C++20) Qt-based password manager. The important domain concepts are
|
||||
Database, Group, and Entry (KDBX format). Key areas to know before making changes are below.
|
||||
|
||||
Quick reference (common commands)
|
||||
- Configure + build (preferred: CMake presets)
|
||||
- Windows (PowerShell): `cmake --preset x64-debug`
|
||||
- Build: `cmake --build --preset x64-debug` or `cmake --build . -j <n>` from the build dir
|
||||
- Formatting (required before commits):
|
||||
- `cmake --build . --target format` (runs clang-format)
|
||||
- Tests:
|
||||
- Run all tests: `ctest -j <n>` from build dir
|
||||
- Run single test (verbose): `ctest -R <Test Name> -V`
|
||||
- Translations & i18n (release tooling):
|
||||
- Update translation sources: `python ./release-tool.py i18n lupdate`
|
||||
|
||||
Big-picture architecture (where to look)
|
||||
- src/core: core data model (Database, Groups, Entries). Example: `src/core/Database.h`
|
||||
- src/format: KDBX readers/writers and import/export logic. (sensitive - avoid casual edits)
|
||||
- src/crypto: cryptographic primitives and key derivation. (sensitive - avoid casual edits)
|
||||
- src/gui: Qt UI layers, widgets, main window and app lifecycle (entry: `src/main.cpp`, `src/gui/MainWindow.cpp`)
|
||||
- src/sshagent, src/browser, src/fdosecrets, src/quickunlock: integration adapters for external systems
|
||||
- tests/ and tests/gui/: QTest-based unit and GUI tests (follow existing test patterns)
|
||||
|
||||
Project-specific conventions & patterns
|
||||
- Language/features: C++20, heavy use of Qt signal/slot idioms and QObject-derived classes.
|
||||
- Build: use provided CMake commands to configure and build the project successfully.
|
||||
- Formatting: a CMake target (`format`) runs clang-format — run it before committing.
|
||||
- Translations: translation files are generated/updated via the release tool — run it before committing.
|
||||
- UI files: .ui changes are non-trivial; prefer proposing .ui edits rather than committing wholesale .ui changes unless very simple.
|
||||
- Sensitive areas: `src/crypto` and `src/format` contain security-sensitive logic — avoid refactors that change algorithms without expert review.
|
||||
|
||||
Concrete examples (where to copy patterns)
|
||||
- Signal connections: see `src/keeshare/ShareObserver.cpp` (connect to Database signals like `groupAdded` / `modified`).
|
||||
- Opening/locking DBs: `src/gui/DatabaseTabWidget.*` and `src/gui/DatabaseWidget.*` show typical lifecycle and `emitActiveDatabaseChanged()`.
|
||||
- Format/validation: use `src/format/KdbxReader.cpp` and `Kdbx4Reader.cpp` for error handling patterns when reading DBs.
|
||||
|
||||
Rules for automated agents
|
||||
- Do not change cryptographic or serialization logic unless the change is narrowly scoped and you run tests.
|
||||
- When adding features, create relevant unit tests within existing files in `tests/`.
|
||||
- Always run code formatting, translation update, and tests before submitting commits.
|
||||
- All tests related to your change must pass before committing.
|
||||
- Reference real files in PR descriptions (e.g., "changed src/core/Database.h and tests/TestDatabase.cpp").
|
||||
|
||||
If anything above is unclear or you want more detail about a specific area (build matrix, CI, or release-tool commands), tell me which part and I will expand.
|
||||
70
.github/workflows/codeql.yml
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'develop'
|
||||
- 'release/**'
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: '5 16 * * 3'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
|
||||
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'cpp' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||
# Use only 'java' to analyze code written in Java, Kotlin or both
|
||||
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
|
||||
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- if: matrix.language == 'cpp'
|
||||
name: Install dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install build-essential cmake g++
|
||||
sudo apt install qtbase5-dev qtbase5-private-dev qttools5-dev qttools5-dev-tools libqt5svg5-dev libargon2-dev libkeyutils-dev libminizip-dev libbotan-2-dev libqrencode-dev zlib1g-dev asciidoctor libreadline-dev libpcsclite-dev libusb-1.0-0-dev libxi-dev libxtst-dev libqt5x11extras5-dev
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
|
||||
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||
queries: security-and-quality
|
||||
|
||||
- if: matrix.language == 'cpp'
|
||||
name: Build C++
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
cmake -DWITH_XC_ALL=ON -DWITH_TESTS=OFF ..
|
||||
make -j $(nproc)
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- if: matrix.language != 'cpp'
|
||||
name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v3
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v3
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
5
.gitignore
vendored
@@ -26,3 +26,8 @@ CMakeSettings.json
|
||||
CMakePresets.json
|
||||
.vs/
|
||||
out/
|
||||
\.clangd
|
||||
|
||||
# vcpkg
|
||||
vcpkg_installed*/
|
||||
|
||||
|
||||
29
.tx/config
@@ -1,14 +1,21 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
host = https://app.transifex.com
|
||||
|
||||
[keepassxc.share-translations-keepassxc-en-ts--develop]
|
||||
source_file = share/translations/keepassxc_en.ts
|
||||
file_filter = share/translations/keepassxc_<lang>.ts
|
||||
source_lang = en
|
||||
type = QT
|
||||
[o:keepassxc:p:keepassxc:r:share-translations-keepassxc-en-ts--develop]
|
||||
file_filter = share/translations/keepassxc_<lang>.ts
|
||||
source_file = share/translations/keepassxc_en.ts
|
||||
type = QT
|
||||
minimum_perc = 60
|
||||
resource_name = keepassxc_en.ts (develop)
|
||||
replace_edited_strings = false
|
||||
keep_translations = false
|
||||
|
||||
[o:keepassxc:p:keepassxc:r:share-translations-keepassxc-en-ts--master]
|
||||
file_filter = share/translations/keepassxc_<lang>.ts
|
||||
source_file = share/translations/keepassxc_en.ts
|
||||
type = QT
|
||||
minimum_perc = 60
|
||||
resource_name = keepassxc_en.ts (2.7.x stable)
|
||||
replace_edited_strings = false
|
||||
keep_translations = false
|
||||
|
||||
[keepassxc.share-translations-keepassxc-en-ts--master]
|
||||
source_file = share/translations/keepassxc_en.ts
|
||||
file_filter = share/translations/keepassxc_<lang>.ts
|
||||
source_lang = en
|
||||
type = QT
|
||||
|
||||
311
CHANGELOG.md
@@ -1,5 +1,314 @@
|
||||
# Changelog
|
||||
|
||||
## 2.7.11 (2025-11-23)
|
||||
|
||||
### Changes
|
||||
- Add image, HTML, Markdown preview, and text editing support to inline attachment viewer [#12085, #12244, #12654]
|
||||
- Add database merge confirmation dialog [#10173]
|
||||
- Add option to auto-generate a password for new entries [#12593]
|
||||
- Add support for group sync in KeeShare [#11593]
|
||||
- Add {UUID} placeholder for use in references [#12511]
|
||||
- Add “Wait for Enter” search option [#12263]
|
||||
- Add keyboard shortcut to “Jump to Group” from search results [#12225]
|
||||
- Add predefined search for TOTP entries [#12199]
|
||||
- Add confirmation when closing database via ESC key [#11963]
|
||||
- Add support for escaping placeholder expressions [#11904]
|
||||
- Reduce tab indentation width in notes fields [#11919]
|
||||
- Cap default Argon2 parallelism when creating a new database [#11853]
|
||||
- Database lock after inactivity now enabled by default and set to 900 seconds [#12689, #12609]
|
||||
- Copying TOTP now opens setup dialog if none is configured for entry [#12584]
|
||||
- Make double click action configurable [#12322]
|
||||
- Remove unused “Last Accessed” from GUI [#12602]
|
||||
- Auto-Type: Add more granular confirmation settings [#12370]
|
||||
- Auto-Type: Add URL typing preset and add copy options to menu [#12341]
|
||||
- Browser: Do not allow sites automatically if entry added from browser extension [#12413]
|
||||
- Browser: Add options to restrict exposed groups [#9852, #12119]
|
||||
- Bitwarden Import: Add support for timestamps and password history [#12588]
|
||||
- macOS: Add Liquid Glass icon [#12642]
|
||||
- macOS: Remove theme-based menubar icon toggle [#12685]
|
||||
- macOS: Add Window and Help menus [#12357]
|
||||
- Windows: Add option to add KeePassXC to PATH during installation [#12171]
|
||||
|
||||
### Fixes
|
||||
- Fix window geometry not being restored properly when KeePassXC starts in tray [#12683]
|
||||
- Fix potential database truncation when using direct write save method with YubiKeys [#11841]
|
||||
- Fix issue with database backup saving [#11874]
|
||||
- Fix UI lockups during startup with multiple tabs [#12053]
|
||||
- Fix keyboard shortcuts when menubar is hidden [#12431]
|
||||
- Fix clipboard being cleared on exit even if no password was copied [#12603]
|
||||
- Fix single-instance detection when username contains invalid filename characters [#12559]
|
||||
- Fix “Search Wait for Enter” setting not being save [#12614]
|
||||
- Fix hotkey accelerators not being escaped properly on database tabs [#12630]
|
||||
- Fix confusing error if user cancels out of key file edit dialog [#12639]
|
||||
- Fix issues with saved searches and “Press Enter to Search” option [#12314]
|
||||
- Fix URL wildcard matching [#12257]
|
||||
- Fix TOTP visibility on unlock and settings change [#12220]
|
||||
- Fix KeeShare entries with reference attributes not updating [#11809]
|
||||
- Fix sort order not being maintained when toggling filters in database reports [#11849]
|
||||
- Fix several UI font and layout issues [#11967, #12102]
|
||||
- Prevent mouse wheel scroll on edit username field [#12398]
|
||||
- Improve base translation consistency [#12432]
|
||||
- Improve inactivity timer [#12246]
|
||||
- Documentation improvements [#12373, #12506]
|
||||
- Browser: Fix ordering of clientDataJSON in Passkey response object [#12120]
|
||||
- Browser: Fix URL matching for additional URLs [#12196]
|
||||
- Browser: Fix group settings inheritance [#12368]
|
||||
- Browser: Allow read-only native messaging config files [#12236]
|
||||
- Browser: Optimise entry iteration in browser access control dialog [#11817]
|
||||
- Browser: Fix “Do not ask permission for HTTP Basic Auth” option [#11871]
|
||||
- Browser: Fix native messaging path for Tor Browser launcher on Linux [#12005]
|
||||
- Auto-Type: Fix empty window behaviour [#12622]
|
||||
- Auto-Type: Take delays into account when typing TOTP [#12691]
|
||||
- SSH Agent: Fix out-of-memory crash with malformed SSH keys [#12606]
|
||||
- CSV Import: Fix modified and creation time import [#12379]
|
||||
- CSV Import: Fix duplication of root groups on import [#12240]
|
||||
- Proton Pass Import: Fix email addresses not being imported when no username set [#11888]
|
||||
- macOS: Fix secure input getting stuck [#11928]
|
||||
- Windows: Prevent launch as SYSTEM user from MSI installer [#12705]
|
||||
- Windows: Remove broken check for MSVC Redistributable from MSI installer [#11950]
|
||||
- Linux: Fix startup delay due to StartupNotify setting in desktop file [#12306]
|
||||
- Linux: Fix memory initialisation when --pw-stdin is used with a pipe [#12050]
|
||||
|
||||
## 2.7.10 (2025-03-02)
|
||||
|
||||
### Changes
|
||||
* Allow adjusting application font size [#11567]
|
||||
* Add Proton Pass importer [#11197]
|
||||
* Support KeePass2 TOTP settings [#11229]
|
||||
* Add New/Preview Entry Attachments dialog and functionality [#11637, #11699, #11650]
|
||||
* Add database name, color, and icon options for unlock view [#10819, #11725]
|
||||
* Show entry background color as column [#6798]
|
||||
* Use icons for password strength [#9844]
|
||||
* Add "Group Full Path" column in entry view [#10278]
|
||||
* Passphrase "MIXED case" Type [#11255]
|
||||
* Allow deleting extension plugin data from Browser Statistics [#11218]
|
||||
* Add --minimized option to keepassxc [#11693]
|
||||
* Implement T-CONV and T-REPLACE-RX entry placeholders [#11453]
|
||||
* Option to disable opening browser when URL field double-clicked [#11332]
|
||||
* Overhaul action states and add icons to toolbar [#11047]
|
||||
* Show character count in password generator dialog [#10940]
|
||||
* Add ability to expire entries from context menu [#8731]
|
||||
* Add copy field shortcuts to Auto-Type select dialog [#11518]
|
||||
* Passkeys: Add support for selecting group on creation [#11260]
|
||||
* Browser: Refactor Access Control Dialog [#9607]
|
||||
* Browser: Add support for URL wildcards and exact URL [#9835, #11752]
|
||||
* Browser: Allow groups to restrict by browser integration key [#9852]
|
||||
* CLI: Add `-d` dry-run shortcut to merge command [#11192]
|
||||
* CLI: HTML export [#11590]
|
||||
* macOS: Add option to disable database lock when switching user [#9707]
|
||||
* SSH Agent: Implement feature to clear all identities [#10649]
|
||||
|
||||
### Fixes
|
||||
* Major enhancements to documentation [#11745, #10875]
|
||||
* Various UI and style fixes [#11535, #11672, #11511, #11445, #11426, #11273, #11455, #11321, #11594, #11539, #11351, #11354, #10748, #11602, #11303, #11291, #10091, #9417]
|
||||
* Various improvements to tags [#11676, #11652, #11625]
|
||||
* Reset splitter sizes on database unlock [#11014]
|
||||
* Remember sort order in Auto-type popup dialog [#9508]
|
||||
* Fix database password clearing when modifying key file / hardware key [#11001]
|
||||
* Fix issues with reloading and handling of externally modified db file [#10612]
|
||||
* Support passkeys with Bitwarden import [#11401]
|
||||
* Fix various quirks with CSV import [#11787]
|
||||
* Show Auto-Type select dialog even if window title is empty [#11603]
|
||||
* Refactor hardware key code to avoid deadlock [#11703, #10872]
|
||||
* Show a clear error if hardware key is found slots are not configured [#11609]
|
||||
* Fix signal/slot disconnect when opening import wizard [#11039]
|
||||
* Fix setting window title as modified [#11542]
|
||||
* Fix assert hit when viewing entry history [#11413]
|
||||
* Fix multiple crashes on Linux [#11513]
|
||||
* Fix backup file path time substitution [#10834]
|
||||
* Prevent long-running threads from deadlocking the program with only 1 CPU [#11155]
|
||||
* Hide the menubar when menus lose focus (if toggled off) [#11355, #11605]
|
||||
* CLI: Restore the original codepage on windows [#11470]
|
||||
* Passkeys: Various fixes [#10934, #10951]
|
||||
* Browser: Fix cancel with database unlock dialog [#11435]
|
||||
* Browser: Resolve references in Access Confirm dialog [#11055]
|
||||
* SSH Agent: Add timeout to streams to prevent deadlock [#11290]
|
||||
* macOS: Replace legacy code for screen recording permissions [#11428]
|
||||
* macOS: Implement Secure Input Mode [#11623]
|
||||
* macOS: Fix showing ambigious name in settings [#11373]
|
||||
* macOS: Fix copy-to-clipboard shortcut in entry preview widget [#10966]
|
||||
* Linux: Prevent multiple lock requests [#11306]
|
||||
* Snap: Prevent need for snap helper script to configure browser extension [#10924]
|
||||
* Windows: Detect outdated VC Redist with MSI installer [#11469]
|
||||
* Windows: Additional exclusion fields for clipboard [#11521]
|
||||
|
||||
## 2.7.9 (2024-06-19)
|
||||
|
||||
### Changes
|
||||
* Passkeys: Ability to easily remove a passkey from an entry [#10777]
|
||||
* Snap: Use new desktop portal for native messaging integration [#10906]
|
||||
|
||||
### Fixes
|
||||
* Improve entry placeholder/reference feature [#10846]
|
||||
* Improve CSV importing when title field isn't specified [#10843]
|
||||
* Improve encrypted Bitwarden importing [#10800]
|
||||
* Improve database settings UX [#10821]
|
||||
* Improve handling of clipboard actions from entry preview [#10810]
|
||||
* Improve group/entry view resize behavior and set sensible defaults [#10641]
|
||||
* Passkeys: Fix incorrect username fill [#10874]
|
||||
* Passkeys: Return additional data to the extension [#10857]
|
||||
* Fix password clear timer inconsistency on unlock view [#10708]
|
||||
* Fix portability check [#10760]
|
||||
* Fix page overflow on HTML exports [#10735]
|
||||
* Fix broken builds when using system provided zxcvbn [#10717]
|
||||
* Fix copy password button when text is selected [#10853]
|
||||
* Fix tab ordering on application settings pages [#10907]
|
||||
* SSH Agent: Fix broken decrypt button [#10638]
|
||||
* Windows: Fix ALT Auto-Type modifier [#10795]
|
||||
* Windows: Fix wrong DACL memory size allocation [#10712]
|
||||
* macOS: Fix monospace font sizing [#10739]
|
||||
* Flatpak: Fix configuration settings off-by-one error [#10688]
|
||||
* BSD: Fix compiling with libusb implementation [#10736]
|
||||
|
||||
## 2.7.8 (2024-05-05)
|
||||
|
||||
### Changes
|
||||
- Add hotkey for showing search help [#10591]
|
||||
- Add hotkey for group switching (Ctrl+Shift+PgUp/PgDown) [#10625]
|
||||
- Add per-database auto-save delay setting [#9100]
|
||||
- Add setting to hide menubar [#10341]
|
||||
- Improve Bitwarden 1PUX import and support organization collections [#10499]
|
||||
- Show advanced settings checkbox only for settings that have them [#6513]
|
||||
- Remove obsolete setting for requiring repeated password entry [#9722]
|
||||
- Passkeys: Allow registering Passkeys to existing entries [#10408]
|
||||
- Passkeys: Show warning about data being unencrypted before Passkey export [#10411]
|
||||
- Passkeys: Support NFC and USB transports [#10402]
|
||||
- Passkeys: Pass extension JSON data to browser [#10615]
|
||||
- SSH Agent: Do not use entries from recycle bin [#10518]
|
||||
- Linux: Change hotkey sequence used for {CLEARFIELD} Auto-Type [#10008]
|
||||
- Windows: Improve DACL memory access protection [#10618]
|
||||
|
||||
### Fixes
|
||||
- Fix crash when deleting history items [#10451]
|
||||
- Fix crash on screen lock or computer sleep [#10458]
|
||||
- Fix search field not being focused after unlock [#10459]
|
||||
- Fix loss of window focus when Auto-Type needs to unlock a database [#10555]
|
||||
- Fix inconsistent TOTP visibility on unlock [#10009]
|
||||
- Fix CSV import skipping over single-name groups [#10575]
|
||||
- Fix key file folder being remembered even if disabled in settings [#10636]
|
||||
- Fix issues with entry editing and database locking [#10667]
|
||||
- Fix key file text when provided on command line [#10642]
|
||||
- Fix issues with hardware key auto detection [#10663]
|
||||
- Do not override monospace font size [#10282]
|
||||
- Perform group sort only when group view is in focus [#10202]
|
||||
- Do not show decimals for attachment sizes in Bytes [#10595]
|
||||
- Prevent merging of global custom data when merging databases [#10452]
|
||||
- Fix minor translation issues [#10635]
|
||||
- Passkeys: Fix StrongBox incompatibility [#10420]
|
||||
- Passkeys: Set RP ID to effective domain if unset instead of returning an error [#10384]
|
||||
- Passkeys: Various UI fixes and improvements [#10427, #10608, #10609]
|
||||
- AppImage: Fix URL opening [#10624]
|
||||
- Flatpak: Fix application autostart [#10563]
|
||||
- Linux/macOS: Fix button sizes on modal alert popups [#10500]
|
||||
- Linux: Fix clipboard clear on Wayland [#10500]
|
||||
- Windows: Preserve file-hidden attribute [#10343]
|
||||
|
||||
## 2.7.7 (2024-03-09)
|
||||
|
||||
### Changes
|
||||
- Support USB Hotplug for Hardware Key interface [#10092]
|
||||
- Support 1PUX and Bitwarden import [#9815]
|
||||
- Browser: Add support for PassKeys [#8825, #9987, #10318]
|
||||
- Build System: Move to vcpkg manifest mode [#10088]
|
||||
|
||||
### Fixes
|
||||
- Fix multiple TOTP issues [#9874]
|
||||
- Fix focus loss on save when the editor is not visible anymore [#10075]
|
||||
- Fix visual when removing entry from history [#9947]
|
||||
- Fix first entry is not selected when a search is performed [#9868]
|
||||
- Prevent scrollbars on entry drag/drop [#9747]
|
||||
- Prevent duplicate characters in "Also choose from" field of password generator [#9803]
|
||||
- Security: Prevent byte-by-byte and attachment inference side channel attacks [#10266]
|
||||
- Browser: Fix raising Update Entry messagebox [#9853]
|
||||
- Browser: Fix bugs when returning credentials [#9136]
|
||||
- Browser: Fix crash on database open from browser [#9939]
|
||||
- Browser: Fix support for referenced URL fields [#8788]
|
||||
- MacOS: Fix crash when changing highlight/accent color [#10348]
|
||||
- MacOS: Fix TouchID appearing even though lid is closed [#10092]
|
||||
- Windows: Fix terminating KeePassXC processes with MSI installer [#9822]
|
||||
- FdoSecrets: Fix database merge crash when enabled [#10136]
|
||||
|
||||
## 2.7.6 (2023-08-15)
|
||||
|
||||
### Changes
|
||||
- Significant improvement to visual when drag/drop entries [#9698]
|
||||
- Automatically prompt for Quick Unlock when showing unlock dialog [#9697]
|
||||
- Improve colorful lock icon and fix file MIME icon on KDE [#9632]
|
||||
- Ability to search by entry UUID [#9571]
|
||||
- Add challenge-response support for NitroKey 3 [#9631]
|
||||
- Auto-Type: Disable entry level Auto-Type when disabled at group/entry [#9672]
|
||||
- Browser: Show warning when adding duplicate URL's to entry [#9588][#9635]
|
||||
- Browser: Improve error message when proxy cannot be found [#9385]
|
||||
|
||||
### Fixes
|
||||
- Fix crash on exit on macOS [#9620]
|
||||
- Fix crash on search if entry doesn't have a group [#9633]
|
||||
- Fix several issues with Quick Unlock [#9697]
|
||||
- Enable save button when not auto-saving non-data changes [#9634]
|
||||
- Several UI/UX fixes [#9647]
|
||||
- Move toolbar back to top of window when disabling movement [#9699]
|
||||
- Browser: Fix closing password generator dialog with X button [#9636]
|
||||
- Browser: Fix handling of expired credentials [#9595]
|
||||
- Windows: Prevent white flicker when launching application [#9637]
|
||||
- Linux: Fix warning message about allow screencapture [#9638]
|
||||
- FdoSecrets: Fix access confirmation dialog showing even when disabled [#9690]
|
||||
|
||||
## 2.7.5 (2023-05-14)
|
||||
|
||||
### Changes
|
||||
- Add menu option to allow screenshots [#8841]
|
||||
- Add support for Botan 3 [#9388]
|
||||
- Increase max TOTP step to 24 hours [#9149]
|
||||
- Improve HTML export layout [#8987]
|
||||
- Turn search reset off by default [#9153]
|
||||
- Use QClipboard::clear() instead of setting blank text [#9148]
|
||||
- Hide group column header choice when not in search [#9171]
|
||||
- Improve look of KeePassXC logo and icons [#9355]
|
||||
- Add keyboard shortcuts for app and database settings [#9007]
|
||||
- Hide rename button from attachments preview panel [#8842]
|
||||
- Linux: Set SingleMainWindow in .desktop file [#7430]
|
||||
|
||||
### Fixes
|
||||
- Fix crash when search clears while creating new entry [#9230]
|
||||
- Fix crash when using Windows Hello in a Remote Desktop session [#9006]
|
||||
- Fix crash in Group Edit after enabling Browser Integration [#8778]
|
||||
- Fix canceling quick unlock when it is unavailable [#9034]
|
||||
- Set password input field font correctly [#8732]
|
||||
- Greatly improve performance when rendering entry view [#9398]
|
||||
- Fix various accessibility issues [#9138]
|
||||
- Fix arrows size when expand/collapse a group [#9096]
|
||||
- Select the clone instead of the original after cloning an entry [#9070]
|
||||
- Fix bugs with preview widget [#9170]
|
||||
- Fix status bar update when switching to other DB [#9073]
|
||||
- Fix database settings spin box bug [#9101]
|
||||
- Fix Ctrl+Tab shortcut to cycle databases in unlock dialog [#8839]
|
||||
- Fix TOTP QR code maintaining square ratio [#9027]
|
||||
- Fix Auto-Type configuration page on custom sequence selection [#8752]
|
||||
- Fix unexpected behavior of `--lock` when KeePassXC is not running [#8889]
|
||||
- Make open folder icon exempt from "Apply group icon to entry" [#9205]
|
||||
- Allow setting default file open directory with env var [#9192]
|
||||
- SSH Agent: Fix support for AES-256/GCM openssh keys [#8968]
|
||||
- Browser: Fix Native Messaging script path with BSD OS's [#8835]
|
||||
- MacOS: Fix text selection for Auto-Type clear field [#9066]
|
||||
- MacOS: Don't rely on AppleInterfaceStyle for theme switching [#8615]
|
||||
- Windows: Remove registry detection of desktop shortcut [#9380]
|
||||
|
||||
## 2.7.4 (2022-10-29)
|
||||
|
||||
### Changes
|
||||
- Add 2 months expiration preset [#8687]
|
||||
- CLI: Add Unicode support on Windows [#8618]
|
||||
|
||||
### Fixes
|
||||
- Fix crash on macOS when unlocking database [#8676]
|
||||
- Fix display of passwords in preview panel [#8633]
|
||||
- Fix clicking links in entry preview panel [#8644]
|
||||
- Prevent expired entries search if no results returned [#8643]
|
||||
- Browser: Revert code causing connection problems [#8665]
|
||||
- Browser: Fix socket file symbolic link on Linux [#8656]
|
||||
- Flatpak: Fix launching browser proxy service [#8680]
|
||||
- SSH Agent: Fix pageant support on Windows [#8619]
|
||||
|
||||
## 2.7.3 (2022-10-23)
|
||||
|
||||
### Changes
|
||||
@@ -881,7 +1190,7 @@
|
||||
- Compare window title to entry URLs #556
|
||||
- Implemented inline error messages #162
|
||||
- Ignore group expansion and other minor changes when making database "dirty" #464
|
||||
- Updated license and copyright information on souce files #632
|
||||
- Updated license and copyright information on source files #632
|
||||
- Added contributors list to about dialog #629
|
||||
|
||||
## 2.1.4 (2017-04-09)
|
||||
|
||||
106
CMakeLists.txt
@@ -14,7 +14,7 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
cmake_minimum_required(VERSION 3.3.0)
|
||||
cmake_minimum_required(VERSION 3.10.0)
|
||||
|
||||
project(KeePassXC)
|
||||
set(APP_ID "org.keepassxc.${PROJECT_NAME}")
|
||||
@@ -53,16 +53,24 @@ set(WITH_XC_ALL OFF CACHE BOOL "Build in all available plugins")
|
||||
option(WITH_XC_AUTOTYPE "Include Auto-Type." ON)
|
||||
option(WITH_XC_NETWORKING "Include networking code (e.g. for downloading website icons)." OFF)
|
||||
option(WITH_XC_BROWSER "Include browser integration with keepassxc-browser." OFF)
|
||||
option(WITH_XC_BROWSER_PASSKEYS "Passkeys support for browser integration." OFF)
|
||||
option(WITH_XC_YUBIKEY "Include YubiKey support." OFF)
|
||||
option(WITH_XC_SSHAGENT "Include SSH agent support." OFF)
|
||||
option(WITH_XC_KEESHARE "Sharing integration with KeeShare" OFF)
|
||||
option(WITH_XC_UPDATECHECK "Include automatic update checks; disable for controlled distributions" ON)
|
||||
if(UNIX AND NOT APPLE)
|
||||
option(WITH_XC_FDOSECRETS "Implement freedesktop.org Secret Storage Spec server side API." OFF)
|
||||
set(WITH_XC_X11 ON CACHE BOOL "Enable building with X11 deps")
|
||||
endif()
|
||||
option(WITH_XC_DOCS "Enable building of documentation" ON)
|
||||
|
||||
set(WITH_XC_X11 ON CACHE BOOL "Enable building with X11 deps")
|
||||
if(WIN32 OR APPLE)
|
||||
set(WITH_XC_CODESIGN_IDENTITY "" CACHE STRING "Certificate to be used for signing binaries before packaging.")
|
||||
if(WIN32)
|
||||
set(WITH_XC_CODESIGN_TIMESTAMP_URL "http://timestamp.sectigo.com" CACHE STRING "Timestamp URL for Windows code signing.")
|
||||
elseif(APPLE)
|
||||
set(WITH_XC_NOTARY_KEYCHAIN_PROFILE "" CACHE STRING "Keychain profile name for stored Apple notarization credentials.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
# Perform the platform checks before applying the stricter compiler flags.
|
||||
@@ -98,6 +106,7 @@ if(WITH_XC_ALL)
|
||||
set(WITH_XC_AUTOTYPE ON)
|
||||
set(WITH_XC_NETWORKING ON)
|
||||
set(WITH_XC_BROWSER ON)
|
||||
set(WITH_XC_BROWSER_PASSKEYS ON)
|
||||
set(WITH_XC_YUBIKEY ON)
|
||||
set(WITH_XC_SSHAGENT ON)
|
||||
set(WITH_XC_KEESHARE ON)
|
||||
@@ -119,7 +128,7 @@ endif()
|
||||
|
||||
set(KEEPASSXC_VERSION_MAJOR "2")
|
||||
set(KEEPASSXC_VERSION_MINOR "7")
|
||||
set(KEEPASSXC_VERSION_PATCH "3")
|
||||
set(KEEPASSXC_VERSION_PATCH "11")
|
||||
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}")
|
||||
set(OVERRIDE_VERSION "" CACHE STRING "Override the KeePassXC Version for Snapshot builds")
|
||||
|
||||
@@ -203,6 +212,16 @@ if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14.0")
|
||||
check_pie_supported()
|
||||
endif()
|
||||
|
||||
# Find Botan early since the version affects subsequent compiler options
|
||||
find_package(Botan REQUIRED)
|
||||
if(BOTAN_VERSION VERSION_GREATER_EQUAL "3.0.0")
|
||||
set(WITH_XC_BOTAN3 TRUE)
|
||||
elseif(BOTAN_VERSION VERSION_LESS "2.11.0")
|
||||
# Check for minimum Botan version
|
||||
message(FATAL_ERROR "Botan 2.11.0 or higher is required")
|
||||
endif()
|
||||
include_directories(SYSTEM ${BOTAN_INCLUDE_DIR})
|
||||
|
||||
# Create position independent code for shared libraries and executables
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
@@ -210,17 +229,23 @@ if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4")
|
||||
set(IS_32BIT TRUE)
|
||||
endif()
|
||||
|
||||
set(CLANG_COMPILER_ID_REGEX "^(Apple)?[Cc]lang$")
|
||||
if("${CMAKE_C_COMPILER}" MATCHES "clang$"
|
||||
OR "${CMAKE_EXTRA_GENERATOR_C_SYSTEM_DEFINED_MACROS}" MATCHES "__clang__"
|
||||
OR "${CMAKE_C_COMPILER_ID}" MATCHES ${CLANG_COMPILER_ID_REGEX})
|
||||
set(CMAKE_COMPILER_IS_CLANG 1)
|
||||
endif()
|
||||
if("${CMAKE_CXX_COMPILER}" MATCHES "clang-cl(.exe)?$")
|
||||
# clang-cl uses MSVC compiler flags
|
||||
set(MSVC 1)
|
||||
set(CMAKE_COMPILER_IS_CLANG_MSVC 1)
|
||||
else()
|
||||
set(CLANG_COMPILER_ID_REGEX "^(Apple)?[Cc]lang$")
|
||||
if("${CMAKE_C_COMPILER}" MATCHES "clang$"
|
||||
OR "${CMAKE_EXTRA_GENERATOR_C_SYSTEM_DEFINED_MACROS}" MATCHES "__clang__"
|
||||
OR "${CMAKE_C_COMPILER_ID}" MATCHES ${CLANG_COMPILER_ID_REGEX})
|
||||
set(CMAKE_COMPILER_IS_CLANG 1)
|
||||
endif()
|
||||
|
||||
if("${CMAKE_CXX_COMPILER}" MATCHES "clang(\\+\\+)?$"
|
||||
OR "${CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS}" MATCHES "__clang__"
|
||||
OR "${CMAKE_CXX_COMPILER_ID}" MATCHES ${CLANG_COMPILER_ID_REGEX})
|
||||
set(CMAKE_COMPILER_IS_CLANGXX 1)
|
||||
if("${CMAKE_CXX_COMPILER}" MATCHES "clang(\\+\\+)?$"
|
||||
OR "${CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS}" MATCHES "__clang__"
|
||||
OR "${CMAKE_CXX_COMPILER_ID}" MATCHES ${CLANG_COMPILER_ID_REGEX})
|
||||
set(CMAKE_COMPILER_IS_CLANGXX 1)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
macro(add_gcc_compiler_cxxflags FLAGS)
|
||||
@@ -298,6 +323,10 @@ if(CMAKE_BUILD_TYPE_LOWER STREQUAL "debug")
|
||||
check_add_gcc_compiler_flag("-Wshadow-compatible-local")
|
||||
check_add_gcc_compiler_flag("-Wshadow-local")
|
||||
add_gcc_compiler_flags("-Werror")
|
||||
# This is needed since compiling aginst Botan3 requires compiling against C++20
|
||||
if(WITH_XC_BOTAN3)
|
||||
add_gcc_compiler_cxxflags("-Wno-error=deprecated-enum-enum-conversion -Wno-error=deprecated")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (NOT HAIKU)
|
||||
@@ -343,7 +372,11 @@ if(UNIX AND NOT APPLE)
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
if(WITH_XC_BOTAN3)
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
else()
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
endif()
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
check_cxx_compiler_flag("-fsized-deallocation" CXX_HAS_fsized_deallocation)
|
||||
@@ -376,10 +409,14 @@ if (MSVC)
|
||||
message(FATAL_ERROR "Only Microsoft Visual Studio 17 and newer are supported!")
|
||||
endif()
|
||||
add_compile_options(/permissive- /utf-8)
|
||||
if(IS_DEBUG_BUILD)
|
||||
add_compile_options(/Zf)
|
||||
if(MSVC_TOOLSET_VERSION GREATER 141)
|
||||
add_compile_definitions(/fsanitize=address)
|
||||
# Clang-cl does not support /MP, /Zf, or /fsanitize=address
|
||||
if (NOT CMAKE_COMPILER_IS_CLANG_MSVC)
|
||||
add_compile_options(/MP)
|
||||
if(IS_DEBUG_BUILD)
|
||||
add_compile_options(/Zf)
|
||||
if(MSVC_TOOLSET_VERSION GREATER 141)
|
||||
add_compile_definitions(/fsanitize=address)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
@@ -395,7 +432,7 @@ if(WIN32)
|
||||
# By default MSVC enables NXCOMPAT
|
||||
add_compile_options(/guard:cf)
|
||||
add_link_options(/DYNAMICBASE /HIGHENTROPYVA /GUARD:CF)
|
||||
else(MINGW)
|
||||
else()
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase")
|
||||
# Enable high entropy ASLR for 64-bit builds
|
||||
@@ -405,6 +442,8 @@ if(WIN32)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
# Determine if we can link against the Windows SDK, used for Windows Hello support
|
||||
find_library(WINSDK WindowsApp.lib)
|
||||
endif()
|
||||
|
||||
if(APPLE AND WITH_APP_BUNDLE OR WIN32)
|
||||
@@ -447,7 +486,7 @@ if(WITH_COVERAGE)
|
||||
append_coverage_compiler_flags()
|
||||
|
||||
set(COVERAGE_EXCLUDES
|
||||
"'^(.+/)?(thirdparty|zxcvbn)/.*'"
|
||||
"'^(.+/)?thirdparty/.*'"
|
||||
"'^(.+/)?main\\.cpp$$'"
|
||||
"'^(.+/)?cli/keepassxc-cli\\.cpp$$'"
|
||||
"'^(.+/)?proxy/keepassxc-proxy\\.cpp$$'")
|
||||
@@ -492,8 +531,8 @@ else()
|
||||
find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED)
|
||||
endif()
|
||||
|
||||
if(Qt5Core_VERSION VERSION_LESS "5.2.0")
|
||||
message(FATAL_ERROR "Qt version 5.2.0 or higher is required")
|
||||
if(Qt5Core_VERSION VERSION_LESS "5.12.0")
|
||||
message(FATAL_ERROR "Qt version 5.12.0 or higher is required")
|
||||
endif()
|
||||
|
||||
get_filename_component(Qt5_PREFIX ${Qt5_DIR}/../../.. REALPATH)
|
||||
@@ -529,12 +568,6 @@ endif()
|
||||
# Make sure we don't enable asserts there.
|
||||
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_NONE QT_NO_DEBUG)
|
||||
|
||||
# Find Botan2
|
||||
find_package(Botan2 REQUIRED)
|
||||
if(BOTAN2_VERSION VERSION_LESS "2.11.0")
|
||||
message(FATAL_ERROR "Botan2 2.11.0 or higher is required")
|
||||
endif()
|
||||
include_directories(SYSTEM ${BOTAN2_INCLUDE_DIR})
|
||||
# Find Argon2 -- Botan 2.18 and below does not support threaded Argon2
|
||||
find_library(ARGON2_LIBRARIES NAMES argon2)
|
||||
find_path(ARGON2_INCLUDE_DIR NAMES argon2.h PATH_SUFFIXES local/include)
|
||||
@@ -547,9 +580,18 @@ if(ZLIB_VERSION_STRING VERSION_LESS "1.2.0")
|
||||
endif()
|
||||
include_directories(SYSTEM ${ZLIB_INCLUDE_DIR})
|
||||
|
||||
# Find Minizip
|
||||
find_package(Minizip REQUIRED)
|
||||
|
||||
if(WITH_XC_YUBIKEY)
|
||||
find_package(PCSC REQUIRED)
|
||||
include_directories(SYSTEM ${PCSC_INCLUDE_DIRS})
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
find_library(LIBUSB_LIBRARIES NAMES usb-1.0 REQUIRED)
|
||||
find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h PATH_SUFFIXES "libusb-1.0" "libusb" REQUIRED)
|
||||
include_directories(SYSTEM ${LIBUSB_INCLUDE_DIR})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(UNIX)
|
||||
@@ -584,6 +626,12 @@ endif()
|
||||
|
||||
include_directories(SYSTEM ${ZLIB_INCLUDE_DIR})
|
||||
|
||||
find_library(ZXCVBN_LIBRARIES zxcvbn)
|
||||
if(NOT ZXCVBN_LIBRARIES)
|
||||
add_subdirectory(src/thirdparty/zxcvbn)
|
||||
set(ZXCVBN_LIBRARIES zxcvbn)
|
||||
endif(NOT ZXCVBN_LIBRARIES)
|
||||
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(share)
|
||||
if(WITH_TESTS)
|
||||
|
||||
39
COPYING
@@ -1,5 +1,5 @@
|
||||
KeePassXC - http://www.keepassxc.org/
|
||||
Copyright (C) 2016-2020 KeePassXC Team <team@keepassxc.org>
|
||||
Copyright (C) 2016-2023 KeePassXC Team <team@keepassxc.org>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -27,28 +27,24 @@ Copyright: 2010-2012, Felix Geyer <debfx@fobos.de>
|
||||
2000-2008, Tom Sato <VEF00200@nifty.ne.jp>
|
||||
2013, Laszlo Papp <lpapp@kde.org>
|
||||
2013, David Faure <faure@kde.org>
|
||||
2016-2020, KeePassXC Team <team@keepassxc.org>
|
||||
2016-2023, KeePassXC Team <team@keepassxc.org>
|
||||
License: GPL-2 or GPL-3
|
||||
|
||||
Comment: The "KeePassXC Team" in every copyright notice is formed by the following people:
|
||||
- droidmonkey
|
||||
- phoerious
|
||||
- TheZ3ro <io@thezero.org>
|
||||
- varjolintu
|
||||
- hifi
|
||||
- louib
|
||||
- weslly
|
||||
Every other contributor is listed on https://github.com/keepassxreboot/keepassxc/graphs/contributors
|
||||
|
||||
Files: cmake/CodeCoverage.cmake
|
||||
Copyright: 2012 - 2015, Lars Bilke
|
||||
License: BSD-3-clause
|
||||
|
||||
Files: cmake/FindYubiKey.cmake
|
||||
Copyright: 2014 Kyle Manna <kyle@kylemanna.com>
|
||||
License: GPL-2 or GPL-3
|
||||
|
||||
Files: cmake/FindBotan2.cmake
|
||||
Copyright: 2018 Ribose Inc.
|
||||
License: BSD-2-clause
|
||||
Files: cmake/FindBotan.cmake
|
||||
Copyright: none
|
||||
License: LGPL-2.1
|
||||
|
||||
Files: cmake/GenerateProductVersion.cmake
|
||||
Copyright: 2015 halex2005 <akharlov@gmail.com>
|
||||
@@ -141,22 +137,27 @@ Files: share/icons/badges/2_Expired.svg
|
||||
share/icons/database/C46_Help.svg
|
||||
share/icons/database/C53_Apply.svg
|
||||
share/icons/database/C61_Services.svg
|
||||
share/icons/application/scalable/actions/proton.svg
|
||||
Copyright: 2022 KeePassXC Team <team@keepassxc.org>
|
||||
License: MIT
|
||||
|
||||
Files: share/icons/application/scalable/actions/application-exit.svg
|
||||
share/icons/application/scalable/actions/arrow-collapse-down.svg
|
||||
share/icons/application/scalable/actions/attributes-copy.svg
|
||||
share/icons/application/scalable/actions/auto-type.svg
|
||||
share/icons/application/scalable/actions/bitwarden.svg
|
||||
share/icons/application/scalable/actions/bugreport.svg
|
||||
share/icons/application/scalable/actions/chevron-double-down.svg
|
||||
share/icons/application/scalable/actions/chevron-double-right.svg
|
||||
share/icons/application/scalable/actions/clipboard-text.svg
|
||||
share/icons/application/scalable/actions/configure.svg
|
||||
share/icons/application/scalable/actions/csv.svg
|
||||
share/icons/application/scalable/actions/database-change-key.svg
|
||||
share/icons/application/scalable/actions/database-lock.svg
|
||||
share/icons/application/scalable/actions/database-lock-all.svg
|
||||
share/icons/application/scalable/actions/database-merge.svg
|
||||
share/icons/application/scalable/actions/database-search.svg
|
||||
share/icons/application/scalable/actions/database-settings.svg
|
||||
share/icons/application/scalable/actions/dialog-close.svg
|
||||
share/icons/application/scalable/actions/dialog-ok.svg
|
||||
share/icons/application/scalable/actions/document-close.svg
|
||||
@@ -177,6 +178,7 @@ Files: share/icons/application/scalable/actions/application-exit.svg
|
||||
share/icons/application/scalable/actions/entry-delete.svg
|
||||
share/icons/application/scalable/actions/entry-restore.svg
|
||||
share/icons/application/scalable/actions/entry-edit.svg
|
||||
share/icons/application/scalable/actions/entry-expire.svg
|
||||
share/icons/application/scalable/actions/entry-new.svg
|
||||
share/icons/application/scalable/actions/favicon-download.svg
|
||||
share/icons/application/scalable/actions/fingerprint.svg
|
||||
@@ -196,8 +198,10 @@ Files: share/icons/application/scalable/actions/application-exit.svg
|
||||
share/icons/application/scalable/actions/move-up.svg
|
||||
share/icons/application/scalable/actions/object-locked.svg
|
||||
share/icons/application/scalable/actions/object-unlocked.svg
|
||||
share/icons/application/scalable/actions/onepassword.svg
|
||||
share/icons/application/scalable/actions/paperclip.svg
|
||||
share/icons/application/scalable/actions/password-copy.svg
|
||||
share/icons/application/scalable/actions/passkey.svg
|
||||
share/icons/application/scalable/actions/password-generator.svg
|
||||
share/icons/application/scalable/actions/password-show-off.svg
|
||||
share/icons/application/scalable/actions/password-show-on.svg
|
||||
@@ -218,12 +222,14 @@ Files: share/icons/application/scalable/actions/application-exit.svg
|
||||
share/icons/application/scalable/actions/totp-copy.svg
|
||||
share/icons/application/scalable/actions/totp-copy-password.svg
|
||||
share/icons/application/scalable/actions/totp-edit.svg
|
||||
share/icons/application/scalable/actions/totp-invalid.svg
|
||||
share/icons/application/scalable/actions/trash.svg
|
||||
share/icons/application/scalable/actions/url-copy.svg
|
||||
share/icons/application/scalable/actions/user-guide.svg
|
||||
share/icons/application/scalable/actions/username-copy.svg
|
||||
share/icons/application/scalable/actions/view-history.svg
|
||||
share/icons/application/scalable/actions/web.svg
|
||||
share/icons/application/scalable/actions/yubikey-refresh.svg
|
||||
share/icons/application/scalable/apps/internet-web-browser.svg
|
||||
share/icons/application/scalable/apps/keepassxc.svg
|
||||
share/icons/application/scalable/apps/keepassxc-dark.svg
|
||||
@@ -238,9 +244,12 @@ Files: share/icons/application/scalable/actions/application-exit.svg
|
||||
share/icons/application/scalable/status/dialog-information.svg
|
||||
share/icons/application/scalable/status/dialog-warning.svg
|
||||
share/icons/application/scalable/status/security-high.svg
|
||||
Copyright: 2019 Austin Andrews <http://templarian.com/>
|
||||
License: SIL OPEN FONT LICENSE Version 1.1
|
||||
Comment: Taken from Material Design icon set (https://github.com/templarian/MaterialDesign/)
|
||||
share/icons/application/scalable/actions/lock-open-alert.svg
|
||||
share/icons/application/scalable/actions/lock-open.svg
|
||||
share/icons/application/scalable/actions/lock.svg
|
||||
Copyright: 2023 Pictogrammers <https://pictogrammers.com/docs/general/about/>
|
||||
License: Apache-2.0
|
||||
Comment: Some icons are modified to fit KeePassXC design (https://pictogrammers.com/library/mdi/)
|
||||
|
||||
Files: src/streams/qtiocompressor.*
|
||||
src/streams/QtIOCompressor
|
||||
@@ -248,7 +257,7 @@ Files: src/streams/qtiocompressor.*
|
||||
Copyright: 2009-2012, Nokia Corporation and/or its subsidiary(-ies)
|
||||
License: LGPL-2.1 or GPL-3
|
||||
|
||||
Files: src/zxcvbn/zxcvbn.*
|
||||
Files: src/thirdparty/zxcvbn/zxcvbn.*
|
||||
Copyright: 2015-2017, Tony Evans
|
||||
License: MIT
|
||||
|
||||
|
||||
63
INSTALL.md
@@ -6,34 +6,21 @@ For more information, see also the [_Building KeePassXC_](https://github.com/kee
|
||||
|
||||
The [QuickStart Guide](https://keepassxc.org/docs/KeePassXC_GettingStarted.html) gets you started using KeePassXC on your Windows, macOS, or Linux computer using pre-compiled binaries from the [downloads page](https://keepassxc.org/download).
|
||||
|
||||
Build Dependencies
|
||||
==================
|
||||
|
||||
The following tools must exist within your PATH:
|
||||
|
||||
* make
|
||||
* cmake (>= 3.3.0)
|
||||
* g++ (>= 4.7) or clang++ (>= 6.0)
|
||||
* asciidoctor (>= 2.0)
|
||||
|
||||
The following libraries are required:
|
||||
|
||||
* Qt 5 (>= 5.9.5): qtbase5, qtbase5-private, libqt5svg5, qttools5, qt5-image-formats-plugins
|
||||
* botan (>= 2.12)
|
||||
* libargon2
|
||||
* zlib
|
||||
* minizip
|
||||
* readline (for completion in cli)
|
||||
* qtx11extras, libxi, and libxtst (for auto-type on X11)
|
||||
* qrencode
|
||||
* libusb-1.0, pcsc-lite (for Yubikey support on Linux)
|
||||
|
||||
Prepare the Building Environment
|
||||
Toolchain and Build Dependencies
|
||||
================================
|
||||
|
||||
* [Building Environment on Linux](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Linux)
|
||||
* [Building Environment on Windows](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Windows)
|
||||
* [Building Environment on MacOS](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-macOS)
|
||||
The following build tools must exist within your PATH:
|
||||
|
||||
* cmake (>= 3.10.0)
|
||||
* make (>= 4.2) or ninja (>= 1.10)
|
||||
* g++ (>= 4.9) or clang++ (>= 6.0)
|
||||
* asciidoctor (>= 2.0)
|
||||
|
||||
* Besides a working C++ toolchain, KeePassXC also has a number of direct build and runtime dependencies. For detailed information about how to install them, please refer to the GitHub wiki:
|
||||
|
||||
* [Set up Build Environment on Linux](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Linux)
|
||||
* [Set up Build Environment on Windows](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-Windows)
|
||||
* [Set up Build Environment on macOS](https://github.com/keepassxreboot/keepassxc/wiki/Set-up-Build-Environment-on-macOS)
|
||||
|
||||
Build Steps
|
||||
===========
|
||||
@@ -57,13 +44,13 @@ To compile from source, open a **Terminal (Linux/MacOS)**, the **MSVC Tools Comm
|
||||
git pull
|
||||
```
|
||||
|
||||
For a stable build, it is recommended to check out the `latest` branch.
|
||||
For a stable build, it is recommended to check out the `latest` tag.
|
||||
|
||||
```
|
||||
git checkout latest
|
||||
```
|
||||
|
||||
2. Navigate to the directory where you have downloaded KeePassXC and type these commands:
|
||||
2. Navigate to the directory where you have downloaded KeePassXC and run:
|
||||
|
||||
```
|
||||
mkdir build
|
||||
@@ -72,39 +59,36 @@ To compile from source, open a **Terminal (Linux/MacOS)**, the **MSVC Tools Comm
|
||||
make
|
||||
```
|
||||
|
||||
Note: These steps place the compiled KeePassXC binary inside the `./build/src/` directory.
|
||||
If you have `vcpkg` installed, add `-DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake` to the `cmake` command to automatically download and install all required build and runtime dependencies locally to your build directory before compiling KeePassXC. Using `vcpkg` is the preferred way to install dependencies on macOS and required on Windows if using the MSVC toolchain.
|
||||
|
||||
For more detailed build instructions for each platform, please refer to the [GitHub wiki](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC).
|
||||
|
||||
Note: These steps place the compiled KeePassXC binary inside the `./build/src/` directory (`src/KeePassXC.app/Contents/MacOS` on macOS).
|
||||
|
||||
## MacOS Build Notes
|
||||
|
||||
If you installed Qt5 via Homebrew, you should be able to compile KeePassXC without any changes. If CMake fails to find your Qt installation, you can specify it manually by adding the following parameter:
|
||||
If you installed Qt5 via Homebrew and CMake fails to find your Qt installation, you can specify it manually by adding the following parameter:
|
||||
|
||||
`-DCMAKE_PREFIX_PATH=$(brew --prefix qt5)/lib/cmake`
|
||||
|
||||
(or whatever your Qt installation path is)
|
||||
|
||||
When building with ASAN support on macOS, you need to use `export ASAN_OPTIONS=detect_leaks=0` before running the tests (LSAN is no supported on macOS).
|
||||
|
||||
## Windows Build Notes
|
||||
|
||||
For detailed build steps see the [Windows Build Instructions](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC#windows).
|
||||
|
||||
If you are using MSVC, you may have to specify your Vcpkg toolchain by adding the following CMake parameter: `-DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake`
|
||||
|
||||
If you are using MSYS2, you have to add ```-G "MSYS Makefiles"``` at the beginning of the cmake command.
|
||||
|
||||
CMake Configuration Options
|
||||
==========================
|
||||
|
||||
## Common Parameters
|
||||
## Recommended CMake Build Parameters
|
||||
|
||||
```
|
||||
-DCMAKE_INSTALL_PREFIX=$(brew --prefix)
|
||||
-DCMAKE_VERBOSE_MAKEFILE=ON
|
||||
-DCMAKE_BUILD_TYPE=<RelWithDebInfo/Debug/Release>
|
||||
-DWITH_GUI_TESTS=ON
|
||||
```
|
||||
|
||||
## KeePassXC Parameters
|
||||
## Additional CMake Parameters
|
||||
|
||||
KeePassXC comes with a variety of build options that can turn on/off features. Most notably, we allow you to build the application with all TCP/IP networking code disabled. Please note that we still require and link against Qt5's network library in order to use local named pipes on all operating systems. Each of these build options are supplied at the time of calling cmake:
|
||||
|
||||
@@ -112,6 +96,7 @@ KeePassXC comes with a variety of build options that can turn on/off features. M
|
||||
-DWITH_XC_AUTOTYPE=[ON|OFF] Enable/Disable Auto-Type (default: ON)
|
||||
-DWITH_XC_YUBIKEY=[ON|OFF] Enable/Disable YubiKey HMAC-SHA1 authentication support (default: OFF)
|
||||
-DWITH_XC_BROWSER=[ON|OFF] Enable/Disable KeePassXC-Browser extension support (default: OFF)
|
||||
-DWITH_XC_BROWSER_PASSKEYS=[ON|OFF] Enable/Disable Passkeys support for browser integration (default: OFF)
|
||||
-DWITH_XC_NETWORKING=[ON|OFF] Enable/Disable Networking support (e.g., favicon downloading) (default: OFF)
|
||||
-DWITH_XC_SSHAGENT=[ON|OFF] Enable/Disable SSHAgent support (default: OFF)
|
||||
-DWITH_XC_FDOSECRETS=[ON|OFF] (Linux Only) Enable/Disable Freedesktop.org Secrets Service support (default:OFF)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
# <img src="https://keepassxc.org/images/keepassxc-logo.svg" width="40" height="40"/> KeePassXC
|
||||
# <img src="https://keepassxc.org/assets/img/keepassxc.svg" width="40" height="40"/> KeePassXC
|
||||
[](https://bestpractices.coreinfrastructure.org/projects/6326)
|
||||
[/statusIcon)](https://ci.keepassxc.org/?guest=1)
|
||||
[](https://codecov.io/gh/keepassxreboot/keepassxc)
|
||||
[](https://github.com/keepassxreboot/keepassxc/releases/)
|
||||
@@ -21,12 +22,13 @@ KeePassXC has numerous features for novice and power users alike. Our goal is to
|
||||
* Password generator
|
||||
* Auto-Type passwords into applications
|
||||
* Browser integration with Google Chrome, Mozilla Firefox, Microsoft Edge, Chromium, Vivaldi, Brave, and Tor-Browser
|
||||
* Support for passkeys using the browser integration
|
||||
* Entry icon download
|
||||
* Import databases from CSV, 1Password, and KeePass1 formats
|
||||
* Import databases from CSV, 1Password, Bitwarden, Proton Pass, and KeePass1 formats
|
||||
|
||||
### Advanced
|
||||
* Database reports (password health, HIBP, and statistics)
|
||||
* Database export to CSV and HTML formats
|
||||
* Database export to CSV, XML, and HTML formats
|
||||
* TOTP storage and generation
|
||||
* Field references between entries
|
||||
* File attachments and custom attributes
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
set(EXCLUDED_DIRS
|
||||
# third-party directories
|
||||
src/thirdparty
|
||||
src/zxcvbn
|
||||
# objective-c directories
|
||||
src/touchid
|
||||
src/autotype/mac
|
||||
|
||||
65
cmake/FindBotan.cmake
Normal file
@@ -0,0 +1,65 @@
|
||||
# - Find botan
|
||||
# Find the botan cryptographic library
|
||||
#
|
||||
# This module defines the following variables:
|
||||
# BOTAN_FOUND - True if library and include directory are found
|
||||
# If set to TRUE, the following are also defined:
|
||||
# BOTAN_INCLUDE_DIRS - The directory where to find the header file
|
||||
# BOTAN_LIBRARIES - Where to find the library files
|
||||
#
|
||||
# This file is in the public domain (https://github.com/vistle/vistle/blob/master/cmake/Modules/FindBOTAN.cmake)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
set(BOTAN_VERSIONS botan-3 botan-2)
|
||||
set(BOTAN_NAMES botan-3 botan-2 botan)
|
||||
set(BOTAN_NAMES_DEBUG botand-3 botand-2 botand botan botan-3)
|
||||
|
||||
find_path(
|
||||
BOTAN_INCLUDE_DIR
|
||||
NAMES botan/build.h
|
||||
PATH_SUFFIXES ${BOTAN_VERSIONS}
|
||||
DOC "The Botan include directory")
|
||||
if(BOTAN_INCLUDE_DIR)
|
||||
file(READ "${BOTAN_INCLUDE_DIR}/botan/build.h" build)
|
||||
string(REGEX MATCH "BOTAN_VERSION_MAJOR ([0-9]*)" _ ${build})
|
||||
set(BOTAN_VERSION_MAJOR ${CMAKE_MATCH_1})
|
||||
string(REGEX MATCH "BOTAN_VERSION_MINOR ([0-9]*)" _ ${build})
|
||||
set(BOTAN_VERSION_MINOR ${CMAKE_MATCH_1})
|
||||
string(REGEX MATCH "BOTAN_VERSION_PATCH ([0-9]*)" _ ${build})
|
||||
set(BOTAN_VERSION_PATCH ${CMAKE_MATCH_1})
|
||||
set(BOTAN_VERSION "${BOTAN_VERSION_MAJOR}.${BOTAN_VERSION_MINOR}.${BOTAN_VERSION_PATCH}")
|
||||
endif()
|
||||
|
||||
find_library(
|
||||
BOTAN_LIBRARY
|
||||
NAMES ${BOTAN_NAMES}
|
||||
PATH_SUFFIXES release/lib lib
|
||||
DOC "The Botan (release) library")
|
||||
if(WIN32 AND NOT MINGW)
|
||||
find_library(
|
||||
BOTAN_LIBRARY_DEBUG
|
||||
NAMES ${BOTAN_NAMES_DEBUG}
|
||||
PATH_SUFFIXES debug/lib lib
|
||||
DOC "The Botan debug library")
|
||||
find_package_handle_standard_args(
|
||||
Botan
|
||||
REQUIRED_VARS BOTAN_LIBRARY BOTAN_LIBRARY_DEBUG BOTAN_INCLUDE_DIR
|
||||
VERSION_VAR BOTAN_VERSION)
|
||||
else()
|
||||
find_package_handle_standard_args(
|
||||
Botan
|
||||
REQUIRED_VARS BOTAN_LIBRARY BOTAN_INCLUDE_DIR
|
||||
VERSION_VAR BOTAN_VERSION)
|
||||
endif()
|
||||
|
||||
if(BOTAN_FOUND)
|
||||
set(BOTAN_INCLUDE_DIRS ${BOTAN_INCLUDE_DIR})
|
||||
if(WIN32 AND NOT MINGW)
|
||||
set(BOTAN_LIBRARIES optimized ${BOTAN_LIBRARY} debug ${BOTAN_LIBRARY_DEBUG})
|
||||
else()
|
||||
set(BOTAN_LIBRARIES ${BOTAN_LIBRARY})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
mark_as_advanced(BOTAN_INCLUDE_DIR BOTAN_LIBRARY BOTAN_LIBRARY_DEBUG)
|
||||
@@ -1,106 +0,0 @@
|
||||
# Copyright (c) 2018 Ribose Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
|
||||
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#.rst:
|
||||
# FindBotan2
|
||||
# -----------
|
||||
#
|
||||
# Find the botan-2 library.
|
||||
#
|
||||
# IMPORTED Targets
|
||||
# ^^^^^^^^^^^^^^^^
|
||||
#
|
||||
# This module defines :prop_tgt:`IMPORTED` targets:
|
||||
#
|
||||
# ``Botan2::Botan2``
|
||||
# The botan-2 library, if found.
|
||||
#
|
||||
# Result variables
|
||||
# ^^^^^^^^^^^^^^^^
|
||||
#
|
||||
# This module defines the following variables:
|
||||
#
|
||||
# ::
|
||||
#
|
||||
# BOTAN2_FOUND - true if the headers and library were found
|
||||
# BOTAN2_INCLUDE_DIRS - where to find headers
|
||||
# BOTAN2_LIBRARIES - list of libraries to link
|
||||
# BOTAN2_VERSION - library version that was found, if any
|
||||
|
||||
# find the headers
|
||||
find_path(BOTAN2_INCLUDE_DIR
|
||||
NAMES botan/version.h
|
||||
PATH_SUFFIXES botan-2
|
||||
)
|
||||
|
||||
# find the library
|
||||
find_library(BOTAN2_LIBRARY NAMES botan-2 libbotan-2 botan)
|
||||
|
||||
# determine the version
|
||||
if(BOTAN2_INCLUDE_DIR AND EXISTS "${BOTAN2_INCLUDE_DIR}/botan/build.h")
|
||||
file(STRINGS "${BOTAN2_INCLUDE_DIR}/botan/build.h" botan2_version_str
|
||||
REGEX "^#define[\t ]+(BOTAN_VERSION_[A-Z]+)[\t ]+[0-9]+")
|
||||
|
||||
string(REGEX REPLACE ".*#define[\t ]+BOTAN_VERSION_MAJOR[\t ]+([0-9]+).*"
|
||||
"\\1" _botan2_version_major "${botan2_version_str}")
|
||||
string(REGEX REPLACE ".*#define[\t ]+BOTAN_VERSION_MINOR[\t ]+([0-9]+).*"
|
||||
"\\1" _botan2_version_minor "${botan2_version_str}")
|
||||
string(REGEX REPLACE ".*#define[\t ]+BOTAN_VERSION_PATCH[\t ]+([0-9]+).*"
|
||||
"\\1" _botan2_version_patch "${botan2_version_str}")
|
||||
set(BOTAN2_VERSION "${_botan2_version_major}.${_botan2_version_minor}.${_botan2_version_patch}"
|
||||
CACHE INTERNAL "The version of Botan which was detected")
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Botan2
|
||||
REQUIRED_VARS BOTAN2_LIBRARY BOTAN2_INCLUDE_DIR
|
||||
VERSION_VAR BOTAN2_VERSION
|
||||
)
|
||||
|
||||
if(BOTAN2_FOUND)
|
||||
set(BOTAN2_INCLUDE_DIRS ${BOTAN2_INCLUDE_DIR} ${PC_BOTAN2_INCLUDE_DIRS})
|
||||
set(BOTAN2_LIBRARIES ${BOTAN2_LIBRARY})
|
||||
endif()
|
||||
|
||||
if(BOTAN2_FOUND AND NOT TARGET Botan2::Botan2)
|
||||
# create the new library target
|
||||
add_library(Botan2::Botan2 UNKNOWN IMPORTED)
|
||||
# set the required include dirs for the target
|
||||
if(BOTAN2_INCLUDE_DIRS)
|
||||
set_target_properties(Botan2::Botan2
|
||||
PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${BOTAN2_INCLUDE_DIRS}"
|
||||
)
|
||||
endif()
|
||||
# set the required libraries for the target
|
||||
if(EXISTS "${BOTAN2_LIBRARY}")
|
||||
set_target_properties(Botan2::Botan2
|
||||
PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
IMPORTED_LOCATION "${BOTAN2_LIBRARY}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
mark_as_advanced(BOTAN2_INCLUDE_DIR BOTAN2_LIBRARY)
|
||||
@@ -21,16 +21,38 @@ endif()
|
||||
|
||||
if(NOT PCSC_FOUND)
|
||||
# Search for PC/SC headers on Mac and Windows
|
||||
|
||||
# Additional search paths for Windows if not running in Visual Studio environment
|
||||
if (WIN32)
|
||||
# Resolve the ambiguity of using two names for one architecture
|
||||
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "x64")
|
||||
set(ARCH_DIR "x64")
|
||||
else()
|
||||
set(ARCH_DIR "${CMAKE_SYSTEM_PROCESSOR}")
|
||||
endif()
|
||||
|
||||
# Locate Windows SDK Paths
|
||||
if (CMAKE_WINDOWS_KITS_10_DIR)
|
||||
set(WINSDKROOTC_INCLUDE "${CMAKE_WINDOWS_KITS_10_DIR}/Include/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/um")
|
||||
set(WINSDKROOTC_LIB "${CMAKE_WINDOWS_KITS_10_DIR}/LIB/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/um/${ARCH_DIR}")
|
||||
else()
|
||||
set(WINSDKROOTC_INCLUDE "$ENV{ProgramFiles\(x86\)}/Windows Kits/10/Include/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/um")
|
||||
set(WINSDKROOTC_LIB "$ENV{ProgramFiles\(x86\)}/Windows Kits/10/LIB/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/um/${ARCH_DIR}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_path(PCSC_INCLUDE_DIRS winscard.h
|
||||
HINTS
|
||||
${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}
|
||||
/usr/include/PCSC
|
||||
${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}
|
||||
/usr/include/PCSC
|
||||
${WINSDKROOTC_INCLUDE}
|
||||
PATH_SUFFIXES PCSC)
|
||||
|
||||
# MAC library is PCSC, Windows library is WinSCard
|
||||
find_library(PCSC_LIBRARIES NAMES pcsclite libpcsclite WinSCard PCSC
|
||||
HINTS
|
||||
${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
|
||||
${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}
|
||||
${WINSDKROOTC_LIB})
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
@@ -15,12 +15,12 @@
|
||||
|
||||
find_path(QRENCODE_INCLUDE_DIR NAMES qrencode.h)
|
||||
|
||||
if (VCPKG_INSTALLED_DIR)
|
||||
find_library(QRENCODE_LIBRARY_RELEASE qrencode)
|
||||
find_library(QRENCODE_LIBRARY_DEBUG qrencoded)
|
||||
set(QRENCODE_LIBRARY optimized ${QRENCODE_LIBRARY_RELEASE} debug ${QRENCODE_LIBRARY_DEBUG})
|
||||
if(WIN32 AND NOT MINGW)
|
||||
find_library(QRENCODE_LIBRARY_RELEASE qrencode)
|
||||
find_library(QRENCODE_LIBRARY_DEBUG qrencoded)
|
||||
set(QRENCODE_LIBRARY optimized ${QRENCODE_LIBRARY_RELEASE} debug ${QRENCODE_LIBRARY_DEBUG})
|
||||
else()
|
||||
find_library(QRENCODE_LIBRARY qrencode)
|
||||
find_library(QRENCODE_LIBRARY qrencode)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(QRENCODE_LIBRARY QRENCODE_INCLUDE_DIR)
|
||||
|
||||
102
cmake/MacOSCodesign.cmake.in
Normal file
@@ -0,0 +1,102 @@
|
||||
# Copyright (C) 2025 KeePassXC Team <team@keepassxc.org>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 2 or (at your option)
|
||||
# version 3 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
# CPACK_PACKAGE_FILES is set only during POST_BUILD
|
||||
if(NOT CPACK_PACKAGE_FILES) # PRE_BUILD: Sign binaries
|
||||
|
||||
set(PROGNAME "@PROGNAME@")
|
||||
set(CODESIGN_IDENTITY "@WITH_XC_CODESIGN_IDENTITY@")
|
||||
set(ENTITLEMENTS @MACOSX_BUNDLE_APPLE_ENTITLEMENTS@)
|
||||
set(APP_DIR "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/ALL_IN_ONE/${PROGNAME}.app")
|
||||
|
||||
if(NOT CODESIGN_IDENTITY)
|
||||
message(FATAL_ERROR "No codesign identity specified.")
|
||||
endif()
|
||||
|
||||
message(STATUS "Codesign identity used: ${CODESIGN_IDENTITY}")
|
||||
message(STATUS "Signing ${PROGNAME}.app, this may take while...")
|
||||
|
||||
# Sign all binaries
|
||||
execute_process(
|
||||
COMMAND xcrun codesign --sign=${CODESIGN_IDENTITY} --force --options=runtime --deep ${APP_DIR}
|
||||
RESULT_VARIABLE SIGN_RESULT
|
||||
OUTPUT_VARIABLE SIGN_OUTPUT
|
||||
ERROR_VARIABLE SIGN_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_STRIP_TRAILING_WHITESPACE
|
||||
ECHO_OUTPUT_VARIABLE
|
||||
)
|
||||
if (NOT SIGN_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "Signing binaries failed: ${SIGN_ERROR}")
|
||||
endif()
|
||||
|
||||
# (Re-)Sign main executable with --entitlements
|
||||
execute_process(
|
||||
COMMAND xcrun codesign --sign=${CODESIGN_IDENTITY} --force --options=runtime --deep --entitlements=${ENTITLEMENTS} ${APP_DIR}
|
||||
RESULT_VARIABLE SIGN_RESULT
|
||||
OUTPUT_VARIABLE SIGN_OUTPUT
|
||||
ERROR_VARIABLE SIGN_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_STRIP_TRAILING_WHITESPACE
|
||||
ECHO_OUTPUT_VARIABLE
|
||||
)
|
||||
if (NOT SIGN_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "Signing main binary failed: ${SIGN_ERROR}")
|
||||
endif()
|
||||
|
||||
message(STATUS "${PROGNAME}.app signed successfully.")
|
||||
|
||||
else() # POST_BUILD: Notarize DMG
|
||||
set(KEYCHAIN_PROFILE "@WITH_XC_NOTARY_KEYCHAIN_PROFILE@")
|
||||
file(GLOB_RECURSE DMG_FILE "${CPACK_PACKAGE_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}.dmg")
|
||||
|
||||
if(NOT KEYCHAIN_PROFILE)
|
||||
message(FATAL_ERROR "No notarization credentials keychain profile specified.")
|
||||
endif()
|
||||
|
||||
# Submit for notarization
|
||||
message(STATUS "Submitting DMG bundle for notarization, this may take while...")
|
||||
execute_process(
|
||||
COMMAND xcrun notarytool submit --keychain-profile=${KEYCHAIN_PROFILE} --wait ${DMG_FILE}
|
||||
RESULT_VARIABLE NOTARIZE_RESULT
|
||||
OUTPUT_VARIABLE NOTARIZE_OUTPUT
|
||||
ERROR_VARIABLE NOTARIZE_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_STRIP_TRAILING_WHITESPACE
|
||||
ECHO_OUTPUT_VARIABLE
|
||||
)
|
||||
if (NOT NOTARIZE_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "Notarization failed: ${NOTARIZE_ERROR}")
|
||||
endif()
|
||||
message(STATUS "DMG bundle notarized successfully.")
|
||||
|
||||
# Staple tickets
|
||||
message(STATUS "Stapling notarization ticket...")
|
||||
execute_process(
|
||||
COMMAND xcrun stapler staple ${DMG_FILE} && xcrun stapler validate ${DMG_FILE}
|
||||
RESULT_VARIABLE STAPLE_RESULT
|
||||
OUTPUT_VARIABLE STAPLE_OUTPUT
|
||||
ERROR_VARIABLE STAPLE_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_STRIP_TRAILING_WHITESPACE
|
||||
ECHO_OUTPUT_VARIABLE
|
||||
)
|
||||
if (NOT STAPLE_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "Stapling failed: ${STAPLE_ERROR}")
|
||||
endif()
|
||||
message(STATUS "DMG bundle notarization ticket stapled successfully.")
|
||||
|
||||
endif()
|
||||
@@ -1,3 +0,0 @@
|
||||
if (CMAKE_INSTALL_PREFIX MATCHES "/ZIP/")
|
||||
file(TOUCH "${CMAKE_INSTALL_PREFIX}/.portable")
|
||||
endif()
|
||||
79
cmake/WindowsCodesign.cmake.in
Normal file
@@ -0,0 +1,79 @@
|
||||
# Copyright (C) 2025 KeePassXC Team <team@keepassxc.org>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 2 or (at your option)
|
||||
# version 3 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
set(INSTALL_DIR ${CPACK_TEMPORARY_INSTALL_DIRECTORY})
|
||||
set(CODESIGN_IDENTITY @WITH_XC_CODESIGN_IDENTITY@)
|
||||
set(TIMESTAMP_URL @WITH_XC_CODESIGN_TIMESTAMP_URL@)
|
||||
|
||||
if(CPACK_PACKAGE_FILES)
|
||||
# This variable is set only during POST_BUILD, reset SIGN_FILES first
|
||||
set(SIGN_FILES "")
|
||||
foreach(PACKAGE_FILE ${CPACK_PACKAGE_FILES})
|
||||
# Check each package file to see if it can be signed
|
||||
if(PACKAGE_FILE MATCHES "\\.msix?$" OR PACKAGE_FILE MATCHES "\\.exe$")
|
||||
message(STATUS "Adding ${PACKAGE_FILE} for signature")
|
||||
list(APPEND SIGN_FILES "${PACKAGE_FILE}")
|
||||
endif()
|
||||
endforeach()
|
||||
else()
|
||||
# Setup portable zip file if building one
|
||||
if(INSTALL_DIR MATCHES "/ZIP/")
|
||||
file(TOUCH "${INSTALL_DIR}/.portable")
|
||||
message(STATUS "Injected portable marker into ZIP file.")
|
||||
endif()
|
||||
|
||||
# Find all dll and exe files in the install directory
|
||||
file(GLOB_RECURSE SIGN_FILES
|
||||
RELATIVE "${INSTALL_DIR}"
|
||||
"${INSTALL_DIR}/*.dll"
|
||||
"${INSTALL_DIR}/*.exe"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Sign relevant binaries if requested
|
||||
if(CODESIGN_IDENTITY AND SIGN_FILES)
|
||||
# Find signtool in PATH or error out
|
||||
find_program(SIGNTOOL signtool.exe QUIET)
|
||||
if(NOT SIGNTOOL)
|
||||
message(FATAL_ERROR "signtool.exe not found in PATH, correct or unset WITH_XC_CODESIGN_IDENTITY")
|
||||
endif()
|
||||
|
||||
# Check that a certificate thumbprint was provided or error out
|
||||
if(CODESIGN_IDENTITY STREQUAL "auto")
|
||||
message(STATUS "Signing using best available certificate.")
|
||||
set(CERT_OPTS /a)
|
||||
else ()
|
||||
message(STATUS "Signing using certificate with fingerprint ${CODESIGN_IDENTITY}.")
|
||||
set(CERT_OPTS /sha1 ${CODESIGN_IDENTITY})
|
||||
endif()
|
||||
|
||||
message(STATUS "Signing binary files, this may take a while...")
|
||||
# Use cmd /c to enable pop-up for pin entry if needed
|
||||
execute_process(
|
||||
COMMAND cmd /c ${SIGNTOOL} sign /fd SHA256 ${CERT_OPTS} /tr ${TIMESTAMP_URL} /td SHA256 /d ${CPACK_PACKAGE_FILE_NAME} ${SIGN_FILES}
|
||||
WORKING_DIRECTORY "${INSTALL_DIR}"
|
||||
RESULT_VARIABLE SIGN_RESULT
|
||||
OUTPUT_VARIABLE SIGN_OUTPUT
|
||||
ERROR_VARIABLE SIGN_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_STRIP_TRAILING_WHITESPACE
|
||||
ECHO_OUTPUT_VARIABLE
|
||||
)
|
||||
if(NOT SIGN_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "Signing binary files failed: ${SIGN_ERROR}")
|
||||
endif()
|
||||
|
||||
message(STATUS "Binary files signed successfully.")
|
||||
endif()
|
||||
19
codecov.yaml
@@ -1,8 +1,27 @@
|
||||
codecov:
|
||||
require_ci_to_pass: false
|
||||
coverage:
|
||||
range: 60..80
|
||||
round: nearest
|
||||
precision: 2
|
||||
status:
|
||||
project:
|
||||
default:
|
||||
target: auto
|
||||
threshold: 0.5%
|
||||
paths:
|
||||
- "src"
|
||||
patch:
|
||||
default:
|
||||
target: 50%
|
||||
threshold: 0%
|
||||
informational: true
|
||||
paths:
|
||||
- "src"
|
||||
fixes:
|
||||
- "*/src/::"
|
||||
ignore:
|
||||
- "src/gui/styles/**"
|
||||
- "src/thirdparty/**"
|
||||
comment:
|
||||
require_changes: true
|
||||
|
||||
@@ -7,6 +7,7 @@ KeePassXC Team <team@keepassxc.org>
|
||||
:imagesdir: images
|
||||
:stylesheet: styles/dark.css
|
||||
:toc: left
|
||||
:experimental:
|
||||
ifdef::backend-pdf[]
|
||||
:title-page:
|
||||
:title-logo-image: {imagesdir}/kpxc_logo.png
|
||||
@@ -26,8 +27,8 @@ include::topics/DownloadInstall.adoc[tags=*;!advanced]
|
||||
|
||||
include::topics/UserInterface.adoc[tags=*;!advanced]
|
||||
|
||||
include::topics/PasswordGenerator.adoc[tags=*;!advanced]
|
||||
|
||||
include::topics/DatabaseOperations.adoc[tags=*;!advanced]
|
||||
|
||||
include::topics/BrowserPlugin.adoc[tags=*;!advanced]
|
||||
include::topics/PasswordGenerator.adoc[tags=*;!advanced]
|
||||
|
||||
include::topics/BrowserIntegration.adoc[tags=*;!advanced]
|
||||
|
||||
@@ -6,6 +6,8 @@ KeePassXC Team <team@keepassxc.org>
|
||||
:imagesdir: images
|
||||
:stylesheet: styles/dark.css
|
||||
:toc: left
|
||||
:sectanchors:
|
||||
:experimental:
|
||||
ifdef::backend-pdf[]
|
||||
:title-page:
|
||||
:title-logo-image: {imagesdir}/kpxc_logo.png
|
||||
@@ -23,15 +25,19 @@ include::topics/UserInterface.adoc[tags=*]
|
||||
|
||||
include::topics/DatabaseOperations.adoc[tags=*]
|
||||
|
||||
include::topics/ImportExport.adoc[tags=*]
|
||||
|
||||
include::topics/PasswordGenerator.adoc[tags=*]
|
||||
|
||||
include::topics/BrowserPlugin.adoc[tags=*]
|
||||
include::topics/ImportExport.adoc[tags=*]
|
||||
|
||||
include::topics/KeeShare.adoc[tags=*]
|
||||
|
||||
include::topics/BrowserIntegration.adoc[tags=*]
|
||||
|
||||
include::topics/Passkeys.adoc[tags=*]
|
||||
|
||||
include::topics/AutoType.adoc[tags=*]
|
||||
|
||||
include::topics/KeeShare.adoc[tags=*]
|
||||
include::topics/SecretService.adoc[tags=*]
|
||||
|
||||
include::topics/SSHAgent.adoc[tags=*]
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 10 KiB |
BIN
docs/images/browser_custom_browser_configuration.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 47 KiB |
BIN
docs/images/browser_integration_additional_attribute.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
docs/images/browser_integration_clear_sites.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 9.2 KiB |
BIN
docs/images/import_wizard.png
Normal file
|
After Width: | Height: | Size: 115 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 39 KiB |
BIN
docs/images/passkeys_all_passkeys.png
Normal file
|
After Width: | Height: | Size: 142 KiB |
BIN
docs/images/passkeys_authentication_dialog.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
docs/images/passkeys_enable_from_extension.png
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
docs/images/passkeys_export_dialog.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
docs/images/passkeys_github_1.png
Normal file
|
After Width: | Height: | Size: 111 KiB |
BIN
docs/images/passkeys_github_2.png
Normal file
|
After Width: | Height: | Size: 134 KiB |
BIN
docs/images/passkeys_github_3.png
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
docs/images/passkeys_github_4.png
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
docs/images/passkeys_github_5.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
docs/images/passkeys_import_dialog.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
docs/images/passkeys_import_passkey_to_entry.png
Normal file
|
After Width: | Height: | Size: 177 KiB |
BIN
docs/images/passkeys_register_dialog.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
docs/images/passkeys_update_dialog.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 45 KiB |
BIN
docs/images/secretservice_access_dialog.png
Normal file
|
After Width: | Height: | Size: 26 KiB |