Commit Graph

876 Commits

Author SHA1 Message Date
Sebastian Messmer
636ed437aa Improve unique_ref tests 2017-04-05 20:48:00 +01:00
Sebastian Messmer
ed9f224f19 Further unique_ref improvements 2017-04-03 19:08:41 +01:00
Sebastian Messmer
2fb61e7c71 Further improve unique_ref 2017-04-03 15:43:27 +01:00
Sebastian Messmer
9ada10db4d Improve unique_ref 2017-04-03 14:43:32 +01:00
Sebastian Messmer
590cd92de5 Install man page 2017-03-26 14:08:47 +01:00
Sebastian Messmer
dbf54b9563 Add test cases for BlockStore2 and fix existing BlockStore2 implementations 2017-02-21 22:27:46 +00:00
Sebastian Messmer
d84e65ad76 Merge from develop 2017-02-18 13:22:43 +00:00
Sebastian Messmer
19bfe97d52 du reports correct space usage 2017-02-18 13:21:54 +00:00
Sebastian Messmer
70bfc47a2f Start implementing new blockstore 2017-02-14 08:16:38 +00:00
Sebastian Messmer
1ec5df98d6 Compile cryfs-stats executable 2017-02-14 08:15:11 +00:00
Sebastian Messmer
5350a14a4a Add stats tool to build 2017-02-11 13:28:34 +00:00
Sebastian Messmer
cab1c71cac Merge from develop 2017-02-04 19:18:00 +00:00
Sebastian Messmer
59afd50c28 Fix clang build 2017-02-04 19:17:17 +00:00
Sebastian Messmer
54e0ffce2e Merge branch 'develop' of github.com:cryfs/cryfs into develop 2017-02-04 19:03:32 +00:00
Sebastian Messmer
9a304fc52b Upgrade spdlog to 0.11.0 2017-02-04 19:03:20 +00:00
Sebastian Messmer
596d9d0426 Merge from develop 2017-02-04 14:38:14 +00:00
Sebastian Messmer
7267bb5be4 Fix buid on Mac OS X 2017-02-04 14:21:00 +00:00
Nicolas Schneider
ffc2fe8eef print defaults for cipher and blocksize in cli help (#124)
Closes #94.
2017-01-23 00:23:51 +00:00
Sebastian Messmer
92776fe507 Merge branch 'develop' into next 2017-01-22 21:24:46 +00:00
Sebastian Meßmer
013be34150 Remove unneeded method 2017-01-22 19:46:47 +00:00
Sebastian Messmer
af24fa5402 Merge branch 'develop' into next 2017-01-22 01:11:36 +00:00
Sebastian Messmer
bbdfc5c234 Simplify FsppNodeTest 2017-01-22 01:11:26 +00:00
Sebastian Messmer
42765c6be6 Merge from develop 2017-01-21 20:24:09 +00:00
Sebastian Messmer
e37d84a3d6 fspp::Dir, fspp::File and fspp::Symlink don't inherit from fspp::Node anymore. This allows file systems to return a generic fspp::Node instead of a concrete subclass when the operation doesn't need to know what type of node it is. 2017-01-21 19:16:35 +00:00
Sebastian Messmer
8c9cea6413 Fix nullversion recognition in gitversion 2016-12-31 16:22:57 +01:00
Sebastian Messmer
681f415272 Use curl_global_init/curl_global_cleanup for cleaner shutdown of executable 2016-10-26 13:50:20 -07:00
Sebastian Messmer
abae027538 Fix compiler error on FreeBSD 2016-10-20 10:35:29 +02:00
Sebastian Messmer
fb123f8fd0 Removed fixed TODOs 2016-10-14 12:34:42 +02:00
Sebastian Messmer
9d05b8571c Merge from develop 2016-10-13 18:30:27 +02:00
Sebastian Messmer
bd74a5b762 More detailed error reporting if key derivation fails 2016-10-02 11:01:14 +02:00
Sebastian Messmer
ce218f264a Silence a static analysis warning 2016-09-25 20:36:35 +02:00
Sebastian Messmer
58d6a454d7 Merge branch 'develop' into next 2016-09-25 11:41:33 +02:00
Sebastian Messmer
6464bfb4b7 Disable update checks in noninteractive mode 2016-09-25 11:40:01 +02:00
Sebastian Messmer
e009040264 Merge from develop 2016-09-25 02:53:35 +02:00
Sebastian Messmer
443298844e Fix test cases 2016-09-25 02:50:28 +02:00
Sebastian Messmer
b027f8c007 Merge from develop 2016-09-24 20:43:54 +02:00
Sebastian Messmer
1e9fdc9aa7 Refactor noninteractive mode. All yes/no questions are forced to define a default that will be used in noninteractive mode. 2016-09-24 20:28:56 +02:00
Sebastian Messmer
1cf52b307d Fix locking in LockPool 2016-09-24 17:02:23 +02:00
Sebastian Messmer
11a85ed29f Allow building with -DCRYFS_UPDATE_CHECKS=off, which will create an executable with disabled update checks (the alternative to disable them in the environment also still works). 2016-09-24 13:16:26 +02:00
Sebastian Messmer
1c34c88709 Remove warning that CryFS is experimental 2016-09-24 12:33:22 +02:00
Sebastian Messmer
789bfc7527 Fix warning from static analysis tool about std::moving a large CryConfig object 2016-09-24 11:42:57 +02:00
Sebastian Messmer
46a2251e9d Fix potential (although improbable) deadlock 2016-09-24 11:01:22 +02:00
Sebastian Messmer
b4a609459b When an exception escalates to main, exit with an error code 2016-09-24 09:52:19 +02:00
Sebastian Messmer
a1c3079a68 Catch exceptions from main 2016-09-24 09:51:29 +02:00
Sebastian Messmer
e30656797b Add compatibility with Crypto++ 5.6.4 2016-09-24 09:39:37 +02:00
Sebastian Messmer
46183976ee Fix missing virtual destructor and potential integer overflow 2016-09-21 20:07:20 +02:00
Sebastian Meßmer
e414f0a20f Switch to LGPL 2016-09-13 19:23:08 +02:00
Sebastian Messmer
32f06f288a Fix tree traversal and add test case for it 2016-09-07 22:25:18 +02:00
Sebastian Messmer
904e3dd7a1 Merge 2016-09-07 22:07:56 +02:00
Sebastian Messmer
ea349cf79b Fix traversal bug and add test case for it 2016-09-07 19:02:41 +02:00
Sebastian Messmer
0cbb13ffbe Compatibility with older libcurl versions 2016-08-27 13:23:25 +02:00
Sebastian Messmer
b315154f08 Merge from develop 2016-07-23 10:17:42 +02:00
Sebastian Messmer
6360d452fe Make compatible with libcurl >= 7.50 2016-07-23 09:04:50 +02:00
Sebastian Messmer
d2cecb4ecc Disable large_read fuse option, since it's not used in new fuse versions anyhow and makes problems when fuse is run in user mode linux. 2016-07-22 20:44:06 +02:00
Sebastian Messmer
a4ce49aef4 Fix unique_ref test cases 2016-07-22 14:07:06 +02:00
Sebastian Messmer
64d26c2f6e Fix compiler error on older gcc 2016-07-22 12:58:59 +02:00
Sebastian Messmer
f069733650 Fix warning on older gcc versions 2016-07-22 02:57:03 +02:00
Sebastian Messmer
e38c0f1e8b Fix isRightBorderNode when growing trees 2016-07-17 10:32:59 +02:00
Sebastian Messmer
bbdd8a548b Special case treatment for traversals until exactly the last leaf has to load the last leaf to grow it. Before this commit, we just always loaded the last traversed leaf and checked its size. Now we only do so if it's the right border leaf. This saves us loading some leaves. 2016-07-17 10:16:09 +02:00
Sebastian Messmer
b339261924 Merge branch 'next' into lessio 2016-07-16 17:14:07 +02:00
Sebastian Messmer
f6141f515b TODOs 2016-07-16 17:08:53 +02:00
Sebastian Messmer
dc40d61595 Merge branch 'next' into lessio 2016-07-16 16:47:36 +02:00
Sebastian Messmer
e3690e2f6b Add comment 2016-07-16 16:47:27 +02:00
Sebastian Messmer
9c42703c70 Merge branch 'next' into lessio 2016-07-16 16:10:03 +02:00
Sebastian Messmer
143c3b3b4f Use large reads and large write 2016-07-16 16:09:47 +02:00
Sebastian Messmer
eab7cb1df4 Implement BlockStore::overwrite(). This is the last step in ensuring that the write() call doen't have to load leaves if they're only overwritten anyhow. 2016-07-16 11:42:06 +02:00
Sebastian Messmer
eb792daefc More preparations for not loading blocks in write() calls 2016-07-15 21:06:41 +02:00
Sebastian Messmer
d80b95514e Traversal doesn't load leaves, but returns the key. This way, the write() call can (after a future commit) write to full leaves without loading them beforehand. 2016-07-15 20:12:24 +02:00
Sebastian Messmer
582917c1f5 Improve code decreasing tree depth 2016-07-15 16:23:00 +02:00
Sebastian Messmer
b1b90b8c3d Further reduce number of nodes loaded when deleting a tree and write test cases for it 2016-07-15 15:42:34 +02:00
Sebastian Messmer
c428d5642a Minimize number of Block::write() calls when creating new nodes in a traversal. Also add test cases for it. 2016-07-15 12:48:20 +02:00
Sebastian Messmer
d626349802 Finish MockBlockStore to also collect other performance metrics, and implement the standard block store tests for it. 2016-07-15 10:23:09 +02:00
Sebastian Messmer
f42e08a5f6 Fix DataTree::key() when called while traversing 2016-07-14 17:56:47 +02:00
Sebastian Messmer
6ff0839e90 Add locking to blob 2016-07-14 16:36:30 +02:00
Sebastian Messmer
457ca52eb3 Add assertions to unique_ref 2016-07-14 16:29:02 +02:00
Sebastian Messmer
7ea08fc2b0 Add test cases for removing nodes 2016-07-14 16:12:51 +02:00
Sebastian Messmer
91bf6c3647 Keep resource destructor in ParallelAccessStore under mutex 2016-07-14 15:10:52 +02:00
Sebastian Messmer
3f04a7411c If tree depth increases, and we already traversed the old tree, don't go into it again to grow its last leaf. 2016-07-14 14:23:15 +02:00
Sebastian Messmer
cbe122cb5f Add assertions 2016-07-14 13:23:36 +02:00
Sebastian Messmer
0bb6b320d4 Add asserts 2016-07-14 12:58:42 +02:00
Sebastian Messmer
0dbfdf3e2b When shrinking a tree, LeafTraverser takes care of decreasing tree depth, not DataTree anymore. This way, LeafTraverser is now responsible for increasing and decreasing depth as necessary. 2016-07-14 12:55:54 +02:00
Sebastian Messmer
35a4e42ba5 Small fixes in traversal algorithm 2016-07-14 12:38:25 +02:00
Sebastian Messmer
fce81f47ff Simplify code a bit and add assertions 2016-07-14 12:03:15 +02:00
Sebastian Messmer
9e9369b9ed Performance optimization: When removing or shrinking a tree, we don't load/read leaves anymore. Loading inner nodes is enough to get all block IDs and then we can delete the leaves from their IDs without loading them. 2016-07-13 11:27:31 +02:00
Sebastian Messmer
7a68757599 Remove unneeded subtrees when shrinking tree 2016-07-13 07:08:53 +02:00
Sebastian Messmer
cf38eb0eb3 Use tree traversal to remove data tree. 2016-07-13 00:29:36 +02:00
Sebastian Messmer
508766d2f2 Fix traversal and add test cases 2016-07-13 00:22:35 +02:00
Sebastian Messmer
845b0b5239 Use LeafTraversor for resizing blobs 2016-07-12 20:36:12 +02:00
Sebastian Messmer
a19d79361c If a tree is grown by a traversal, the tree is kept in a balanced state as long as possible during the traversal 2016-07-12 09:57:56 +02:00
Sebastian Messmer
1bf20277e4 Removed unnecessary code 2016-07-12 01:10:27 +02:00
Sebastian Messmer
58f2212043 Don't query size on traversal 2016-07-12 01:09:30 +02:00
Sebastian Messmer
582c9c1a4c Fix traversal 2016-07-12 01:04:33 +02:00
Sebastian Messmer
98b85ea8b6 Started rewriting traversal 2016-07-10 22:57:39 +02:00
Sebastian Messmer
2bc3b641aa Allow Data::FillWithZeroes on rvalue 2016-07-10 22:43:07 +02:00
Sebastian Messmer
dde89da556 Improve traverseLeaves 2016-07-10 08:38:02 +02:00
Sebastian Messmer
0d860fa4f0 Speed up block loading/storing by issuing only one read/write syscall to the base file system 2016-07-06 15:35:51 -07:00
Sebastian Messmer
7348f7c64d Add checks to Data::LoadFromFile() and Data::StoreToFile() 2016-07-06 15:28:14 -07:00
Sebastian Messmer
e85019e95b Cache value of DataTree.numLeaves(). This should make read()/write() faster. 2016-07-05 23:56:44 -07:00
Sebastian Messmer
a242076ecc Performance improvement: Allow more parallelity when getting read()/write() syscalls to the same blob 2016-07-05 23:02:59 -07:00
Sebastian Messmer
ff0ba06846 Add mutex to fix race condition 2016-06-29 16:42:43 -07:00
Sebastian Messmer
b7b5dfba2a Fix generation of new file systems 2016-06-27 22:31:06 -07:00
Sebastian Messmer
3425760daf Implement migration for old filesystems that don't have parent pointers. 2016-06-27 20:03:44 -07:00
Sebastian Messmer
bfb397f44e Tell user to not interrupt migration process 2016-06-27 20:01:02 -07:00
Sebastian Messmer
397de9372f Each blob stores a parent pointer (i.e. the ID of the directory that contains this blob). This stores the directory structure in a conflict-proof way and can be used to resolve such conflicts. 2016-06-27 18:22:13 -07:00
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
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
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
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
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
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
e8ad454e47 TODOs 2016-06-08 12:35:56 -07:00
Sebastian Messmer
e2ec72edde Remove unused function 2016-06-08 12:29:28 -07:00
Sebastian Messmer
5aff394a16 Directory timestamps are updated correctly. Also added test cases for this. 2016-06-08 12:21:57 -07:00
Sebastian Messmer
5a5037c992 Symlinks update atime correctly. Also added a test case for this. 2016-06-07 21:47:23 -07:00
Sebastian Messmer
69f4c7976e File::truncate() updates timestamps correctly. Also added test cases for this. 2016-06-07 21:30:57 -07:00
Sebastian Messmer
6448110975 OpenFile updates timestamps correctly, i.e. on read(), write() and truncate(). Also added test cases for it. 2016-06-07 21:25:02 -07:00
Sebastian Messmer
06a5faf2f8 Generalize timestamp expectations 2016-06-07 20:48:29 -07:00
Sebastian Messmer
9bb2e2e89a Implement fsync() and fdatasync() syscalls for flushing open files 2016-06-07 18:36:59 -07:00
Sebastian Messmer
be31d78349 Make TimestampTestUtils generic 2016-06-07 13:07:22 -07:00
Sebastian Messmer
93f34a4557 Run FsppDeviceTest_Timestamps on all kinds of nodes, not just files 2016-06-07 12:48:21 -07:00
Sebastian Messmer
8bf8081464 Fix sigsev on startup which was introduced by commit 1bb38f39b4 2016-06-07 12:44:35 -07:00
Sebastian Messmer
2642507344 Allow loading file systems from future cryfs versions if user specifically asks for it 2016-06-06 15:31:09 -07:00
Sebastian Messmer
7708287fdd Add test case that loading a node doesn't modify time stamps 2016-06-06 15:20:41 -07:00
Sebastian Messmer
1bb38f39b4 * Fix FuseTest
* Refactor Fuse: shorter functions, and factor out common functionality of adding a fuse option into own method
2016-06-04 00:45:49 -07:00
Sebastian Messmer
93927e76d6 TODOs 2016-06-02 20:25:14 -07:00
Sebastian Meßmer
3894157589 Merge pull request #61 from mhogomchungu/develop
remove compiler warnings
2016-06-02 20:21:54 -07:00
Sebastian Messmer
1402f54fec Factor out platform inconsistency between Mac and Linux (stat.st_atim vs stat.st_atimespec) 2016-06-02 20:08:51 -07:00
Francis Banyikwa
f2b7aac76a use boost::optional for an optional argument in Fuse class 2016-06-02 21:58:04 +03:00
Francis Banyikwa
92d8f939ac move setting of fuse options to Fuse class 2016-06-02 12:51:44 +03:00
Francis Banyikwa
183d6a9d06 dont hard code "cryfs" name in the fspp library 2016-06-02 11:17:55 +03:00
Francis Banyikwa
c5a6f16cd5 use a macro to silence compiler warnings 2016-06-02 09:54:39 +03:00
Francis Banyikwa
002dc6ca17 solve issue number 24 2016-06-01 13:37:44 +03:00
Francis Banyikwa
2cf4a2e087 use project name as the first argument to fuse 2016-06-01 11:55:48 +03:00
Francis Banyikwa
de6462e548 remove compiler warnings 2016-06-01 11:34:19 +03:00
Sebastian Messmer
61e56cfeab Fix small rename corner case and add test cases for timestamps in many rename corner cases 2016-05-27 21:19:04 -07:00
Sebastian Messmer
54ec08bc9d TODOs 2016-05-27 17:47:14 -07:00
Sebastian Messmer
514de8794e Add test cases that fspp::Node operations correctly modify the timestamps 2016-05-27 17:26:53 -07:00
Sebastian Messmer
183b9cf74b Fix utimens() behavior: It now updates ctime as well. 2016-05-27 17:26:23 -07:00
Sebastian Messmer
3b98fc0390 Offer timespec comparison operators 2016-05-27 16:35:45 -07:00
Sebastian Messmer
f6545bbcc3 Move fsblobstore::now() to cpputils 2016-05-27 15:46:05 -07:00
Sebastian Messmer
40c64a879c Hide fuse quirks inside the Fuse class.
fuse_main needs the program arguments as char ** instead of const char ** or (even better) vector<string>.
With this commit, we hide that inside the Fuse class. Everything outside handles these arguments as vector<string> and passes it as such to the Fuse class.
2016-05-09 16:07:02 -07:00
Sebastian Messmer
652cf90255 Merge branch 'develop' of github.com:cryfs/cryfs into develop 2016-05-03 22:23:38 -07:00
Sebastian Messmer
285dd05072 When counting blocks, ignore cryfs.config. This already worked on Linux, but not on Mac. After this commit, it is also fixed for Mac. 2016-05-03 22:21:28 -07:00
Sebastian Messmer
9a0b0a0c36 Ask before migrating an old CryFS file system to a new version. 2016-05-03 20:34:30 -07:00
Sebastian Messmer
257b028511 Prevent opening file systems that were created with newer versions of CryFS 2016-04-29 12:46:14 -07:00
Sebastian Messmer
2fbed11431 Remove debug output 2016-04-29 12:38:53 -07:00
Sebastian Messmer
5aaba511bd Fix migration step for new ciphertext layout 2016-04-29 12:35:17 -07:00
Sebastian Messmer
9ed7bd0b41 Ciphertext blocks are split into subdirectories (before, all were on top level) to reduce number of files per directory. Some unix tools don't work well with directories with too many entries. 2016-04-29 12:21:02 -07:00
Sebastian Messmer
4829f4bcec Extend test cases for rename with overwrite 2016-04-29 11:07:47 -07:00
Sebastian Messmer
33644af64d Extend test cases for trying to rename a file to an existing directory or the other way round 2016-04-28 23:14:33 -07:00
Sebastian Messmer
bfba538818 Fix rename corner cases: Overwriting an existing directory with a file or the other way round 2016-04-28 22:49:57 -07:00
Sebastian Messmer
66b52b6434 Fix rename corner case: Renaming element to its old name 2016-04-28 22:36:53 -07:00
Sebastian Messmer
a03ab91aba Fix rename when overwriting an existing file in the same directory 2016-04-28 13:27:54 -07:00
Sebastian Messmer
c403ec6b48 Fix a potential deadlock in the cache 2016-04-26 18:09:42 -07:00
Sebastian Messmer
811c163bfa Fix rename() when overwriting an existing file: (a) Keep the invariant that the list of directory entries is sorted and (b) delete the blob of the overwritten file 2016-04-25 17:42:17 -07:00
Sebastian Messmer
f0d11bb5a7 Fail build if gitversion cannot be found 2016-04-01 11:39:28 +02:00
Sebastian Messmer
4627666788 Generalize stat() tests in FsppFileTest for all node types 2016-03-31 23:48:43 +08:00
Sebastian Messmer
e7c4f8150e Factor out FsppNodeTest to allow using its mechanisms for other test cases and not only for rename 2016-03-31 21:45:41 +08:00
Sebastian Messmer
f5305aa95d Better error messages when parsing version information fails 2016-03-31 21:18:39 +08:00
Sebastian Messmer
4069358b31 Fix VersionCompare for stable versions vs tag versions 2016-03-29 11:07:00 +08:00
Sebastian Messmer
03f59b69da Since 0.9.3-alpha set the config value cryfs.blocksizeBytes wrongly to 32768 (but didn't use the value), we have to add a workaround. 2016-03-26 23:56:56 +08:00
Sebastian Messmer
b9ac810414 - The version field in the config file is updated when the file system is opened with a newer CryFS version (i.e. it is migrated to the newer version).
- We introduced a CreatedWithVersion field instead which gets the semantics the version field had before (i.e. which version of CryFS was the file system originally created with)
- Move VersionCompare to gitversion package
2016-03-27 00:09:07 +08:00
Sebastian Messmer
7b5970a94e TODOs 2016-03-24 07:57:19 +00:00
Sebastian Messmer
67c5495db7 TODOs 2016-03-24 07:56:41 +00:00
Sebastian Messmer
99aa86720c TODOs 2016-03-24 07:55:37 +00:00
Sebastian Messmer
18d05d165e Use --blocksize instead of --blocksize-bytes, so we can (later) allow users to write "--blocksize 2M" 2016-03-24 06:45:41 +00:00
Sebastian Messmer
6e7004d485 Rename operation allows overwriting existing files. 2016-03-24 02:47:50 +00:00
Sebastian Messmer
03ccead85b Add test cases for rename 2016-03-24 01:45:53 +00:00
Sebastian Messmer
2ac47f480b - Fix rename bug: When trying to rename a file to a name that already exists, it was deleted instead. This is now fixed.
- Additional test cases for rename
2016-03-23 18:03:30 +00:00
Sebastian Messmer
db53b597d4 Handle renaming root directory correctly 2016-03-23 16:07:08 +00:00
Sebastian Messmer
1c0199e147 When the user specifies a block size for the file system, this is taken as the physical block size, not virtual block size. 2016-03-16 19:30:26 +00:00
Sebastian Messmer
037b59634e Implemented BlockStore::blockSizeFromPhysicalBlockSize. This will be used to let the user configure physical block size instead of virtual block size. 2016-03-16 18:56:06 +00:00
Sebastian Messmer
0cdfb8ba2e Fix fstat (a bug in the fstat implementation caused problems with some text editors (e.g. nano) falsely thinking a file changed since they opened it). 2016-03-16 17:03:53 +00:00
Sebastian Messmer
e4ff7e17f1 Add test cases to fstest::FileTest 2016-03-16 15:31:59 +00:00
Sebastian Messmer
52d85f4de3 Refactor DirEntries 2016-03-16 15:29:26 +00:00
Sebastian Messmer
5f8bf4cea4 Fix version number mentioned in comment 2016-03-09 00:23:11 +01:00
Sebastian Messmer
1ee3a8df86 Use uint64_t for block size 2016-03-09 00:20:04 +01:00
Sebastian Messmer
08c1d206af Fix compiler error 2016-03-09 00:13:18 +01:00
Sebastian Messmer
d7f34c0dfb Make blocksize configurable 2016-03-08 23:57:34 +01:00
Sebastian Messmer
4dbb380263 Decouple DirBlob from CryDevice 2016-03-08 23:47:31 +01:00
Sebastian Messmer
526b749d1d Add a command line option for blocksize 2016-03-04 23:12:41 +01:00
Sebastian Messmer
61611d03b2 Don't use <regex>, because it causes problems on GCC 4.8 2016-03-03 11:49:23 +01:00
Sebastian Messmer
5736a5ea37 Output warning to stderr, not stdout 2016-03-02 21:22:11 +01:00
Sebastian Messmer
5579270108 Handle fallback version "0+unknown" correctly 2016-03-02 14:39:30 +01:00
Sebastian Messmer
aac661d292 Recognize git version from tarball name if everything else fails 2016-03-02 14:18:47 +01:00
Sebastian Messmer
3f66c7ceda Recognize git version from tarball name if everything else fails 2016-03-02 14:13:43 +01:00
Sebastian Messmer
3826064d1d Recognize git version from tarball name if everything else fails 2016-03-02 14:08:51 +01:00
Sebastian Messmer
20e6920a7b Recognize git version from tarball name if everything else fails 2016-03-02 14:08:10 +01:00
Sebastian Messmer
092edd6f1d Removed unimportant file 2016-03-02 14:00:54 +01:00
Sebastian Messmer
59c341628c Merge branch 'archive' into develop 2016-03-02 13:57:49 +01:00
Sebastian Messmer
5753e4f71c Switch to new git version number recognition 2016-03-02 13:53:37 +01:00
Sebastian Messmer
d2cd75de15 TODOs 2016-03-02 01:36:04 +01:00
Sebastian Messmer
3254220987 Filesystems have a blocksizeBytes configuration option 2016-03-01 17:45:48 +01:00
Sebastian Messmer
35ae3b9c24 Make clock_gettime adapter work if used multiple time 2016-02-26 12:37:37 +01:00
Sebastian Messmer
ab5eb920a5 Show current time as modification time for mountdir. This probably confuses people less than if we show timestamp zero. 2016-02-26 10:47:47 +01:00
Sebastian Messmer
e48188f470 Restructure project to allow factoring out a library 2016-02-23 21:07:23 +01:00
Sebastian Messmer
f92c4a4f71 Show a message when update checking is disabled 2016-02-22 15:52:41 +01:00
Sebastian Messmer
5f67378bc9 Fix compiler error for older gcc versions 2016-02-22 11:44:59 +01:00
Sebastian Messmer
d5a0b725fe Refactor interface for key derivation functions. This allows easily adding new (password based) key derivation functions. 2016-02-22 02:38:06 +01:00
Sebastian Messmer
7d9d72d82a Improve help output 2016-02-21 22:33:36 +01:00
Sebastian Messmer
54d2fc516f Add environment variables to help output 2016-02-21 22:28:29 +01:00
Sebastian Messmer
d95cc33a58 You can disable the automatic update check by setting CRYFS_NO_UPDATE_CHECK=true in your environment. 2016-02-21 22:15:27 +01:00
Sebastian Messmer
9c83d3b2a4 If CRYFS_FRONTEND=noninteractive is set in the environment, assume we're used by a tool and:
- Don't ask for config. Use default settings for everything that is not specified as command line parameter.
- Don't ask for password confirmation. Password only has to be passed in once to stdin.
2016-02-21 01:36:14 +01:00
Sebastian Messmer
346baf8e9b Only show update check warning if version on server is actually newer 2016-02-20 18:23:46 +01:00
Sebastian Messmer
d00e097954 Do a sanity check when mounting the file system and fail if the root blob is not available. 2016-02-19 02:10:10 +01:00
Sebastian Messmer
014b5703e0 Instead of modifying include paths, include osxfuse header from the right location 2016-02-17 22:30:28 +01:00
Sebastian Messmer
980f560f04 Fix build 2016-02-17 21:40:03 +01:00
Sebastian Messmer
237abf61c7 TODOs 2016-02-17 13:13:03 +01:00
Sebastian Messmer
80f63969c7 Add TODOs 2016-02-17 13:09:03 +01:00
Sebastian Messmer
25b93ebe41 When deleting a block fails, log the error but don't crash (i.e. continue to delete other blocks of the same blob on a best-effort basis) 2016-02-17 13:01:12 +01:00
Sebastian Messmer
df041ac845 Fix a bug where deleting a directory could leave over some blocks.
Details: Before, we allowed removing non-empty directories. Seems 'rm -rf' is trying to do that. Now, we return the correct error code ENOTEMPTY in this case, which causes that 'rm -rf' deletes the entries first.
2016-02-17 12:52:01 +01:00
Sebastian Messmer
bb54c2f879 When removing a block, check whether it was successful 2016-02-17 11:03:06 +01:00
Sebastian Messmer
b8fdd2e941 Fix includes on Mac 2016-02-17 08:51:48 +01:00