Commit Graph

1684 Commits

Author SHA1 Message Date
Sebastian Messmer
a7f13ad7c1 When creating a file system, the user can choose whether to choose missing blocks as integrity violations. 2016-06-26 23:24:32 -07:00
Sebastian Messmer
2451a8c46f Add --missing-block-is-integrity-violation option. The option doesn't have an effect yet though. 2016-06-26 22:16:44 -07:00
Sebastian Messmer
7bf84b1948 Add some test cases for the consistency of the generated myClientId. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
be8dffb24d MyClientId is generated outside of CryDevice to give the CryConfigCreator access to it. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
7b56706c1a Be explicit about types stored in config file 2016-06-26 22:15:52 -07:00
Sebastian Messmer
b838046246 Add a 'exclusive client' option to the config file 2016-06-26 22:15:52 -07:00
Sebastian Messmer
514dbcb6c7 ClientId is not loaded/generated inside of KnownBlockVersions, but in CryDevice. This way, CryDevice also has access to the ClientID. This is later needed to recognize whether we're in a single-client or in a multi-client setting. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
1c654305a8 In integrity violations, use individual messages saying which check exactly failed. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
f066b45954 VersionCountingBlockStore::forEachBlock() has an integrity check checking that all expected blocks are still existing. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
491b277cee In case of an integrity violation, tell the user how they can reset integrity data. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
839a511c4d When an integrity violation is detected, any further access to the file system is blocked. This ensures that the user notices the integrity violation. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
2284571127 Add test cases to KnownBlockVersionsTest 2016-06-26 22:15:52 -07:00
Sebastian Messmer
c84a230afd VersionCountingBlockStore is initialized with a flag, saying whether missing blocks are integrity errors. This flag is meant to be activated in a single-client scenario to have this additional integrity check. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
e02021ecdc Throw an IntegrityViolationError exception instead of just logging integrity violations. This makes sure the user notices. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
32001d0af3 Write another integrity test case 2016-06-26 22:15:52 -07:00
Sebastian Messmer
d306f4872e Fix merge error 2016-06-26 22:15:52 -07:00
Sebastian Messmer
fd5dd2c6e1 New way of handling block deletions: Set last-update-client-id to zero instead of increasing version number. This has the same effect (i.e. invalidates all known block versions) and it additionally allows for checking in a local list whether a block is deleted or not. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
ee1f0f4d3a Warn in migration that it might take a while 2016-06-26 22:15:52 -07:00
Sebastian Messmer
86c2144a37 Implement migration from file systems without version numbers 2016-06-26 22:15:52 -07:00
Sebastian Messmer
f9a10eea4d Fix VersionCountingBlock::resize() 2016-06-26 22:15:52 -07:00
Sebastian Messmer
473e9cc8bb Fix compiler errors 2016-06-26 22:15:52 -07:00
Sebastian Messmer
1a72d3c226 Deleting a block doesn't set the version number to MAX_UINT64, but just increases it by one. This makes sure, that if (in case of a synchronization conflict) the block is reintroduced by another client, this is accepted. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
5534b56ce3 When increasing the version number, don't only look at the version number in the block, but also at the last version number given to it by the current client. Ensure, the new version number is higher than both. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
577c697856 When a client deletes a block, it will never again accept it as a valid block. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
9c1a12c063 Fix merge 2016-06-26 22:15:52 -07:00
Sebastian Messmer
e7ac9bec57 Implement BlockStore::forEachBlock 2016-06-26 22:15:52 -07:00
Sebastian Messmer
4d1f7a46b9 * Prevent rollback to the "newest" version of a client when this version was superseded by a version from a different client.
* Use mutex/locks to secure access to KnownBlockVersions
2016-06-26 22:15:52 -07:00
Sebastian Messmer
263c540cd0 Make sure, ClientIdAndBlockKey.h includes all its dependencies 2016-06-26 22:15:52 -07:00
Sebastian Messmer
ea3de7360c * Block versions don't have to be globally nondecreasing, but only per client id. This solves potential synchronization conflicts in a multi-client setting.
* Use cpputils::Serializer and cpputils::Deserializer instead of std::ifstream for storing/loading the block version list
2016-06-26 22:15:52 -07:00
Sebastian Messmer
de692c1ee4 Store number of entries at beginning of integrity file, so loading can be faster using unordered_map::reserve() 2016-06-26 22:15:52 -07:00
Sebastian Messmer
adb10343d2 Only hash key once if key not found, i.e. use [] instead of find() and then emplace() 2016-06-26 22:15:52 -07:00
Sebastian Messmer
389273a24f Test cases use a fake home directory for their configuration, so they don't clutter the actual home directory. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
9da30e3c17 Remove redundant nullbyte 2016-06-26 22:15:52 -07:00
Sebastian Messmer
57af168cfd Store own client id into the block next to the version number. This will be used to fix synchronization conflicts where the version number on one clients progresses slower than on another client, but synchronizes later. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
a5391a854d Use VersionCountingBlockStore 2016-06-26 22:15:52 -07:00
Sebastian Messmer
13411c4e59 Integrity data from KnownBlockVersions is persisted to a file 2016-06-26 22:15:52 -07:00
Sebastian Messmer
d7f547dd47 Implement a VersionCountingBlockStore that checks that version numbers are nondecreasing. Currently, the block store is not used yet and the state is not stored over different runs of CryFS. This comes with future commits. 2016-06-26 22:15:52 -07:00
Sebastian Messmer
da6390646e Add test cases for command line parser when options are not given. 2016-06-26 22:15:43 -07:00
Sebastian Messmer
f4a7878e37 Compatibility with GCC 6 2016-06-26 21:26:08 -07:00
Sebastian Messmer
0a61987594 Be explicit about types stored in config file 2016-06-26 15:34:53 -07:00
Sebastian Messmer
f6a80a4651 Remove default config values for mandatory values 2016-06-26 15:26:05 -07:00
Sebastian Messmer
9358c10adf Finish test cases for Block::resize() 2016-06-23 21:30:09 -07:00
Sebastian Messmer
acedbbd0c4 Fix EncryptedBlock::resize() and add test cases for it 2016-06-23 21:20:36 -07:00
Sebastian Messmer
fcbca9ddea Improve performance of InMemoryBlockStore and FakeBlockStore by using std::unordered_map instead of std::map and the direct representation of a block Key as Key instead of a string representation. 2016-06-23 12:26:47 -07:00
Sebastian Messmer
3db931c54d Fix mount information reported to operating system 2016-06-22 17:57:00 -07:00
Sebastian Messmer
e4501d51e5 Each file system gets a unique ID. This ID will later be used to store local configuration of a client for that file system. 2016-06-20 16:14:07 -07:00
Sebastian Messmer
b3c5d4b5e3 Refactor TimestampTestUtils 2016-06-09 17:47:29 -07:00
Sebastian Messmer
c5ccd9c2d1 Set cache entry to dirty when timestamps are changed. Otherwise, it wouldn't be written back. 2016-06-09 17:32:35 -07:00
Sebastian Messmer
da187e3142 Merge branch 'develop' of github.com:cryfs/cryfs into develop 2016-06-08 12:35:58 -07:00
Sebastian Messmer
e8ad454e47 TODOs 2016-06-08 12:35:56 -07:00