Jakob Unterwurzacher
1867fdaef4
v2api: move helpers from node.go to node_helpers.go
2020-08-01 19:26:42 +02:00
Jakob Unterwurzacher
4572cd2103
v2api: fix missing size translation in Lookup
2020-07-26 19:49:26 +02:00
Jakob Unterwurzacher
777b95f82f
v2api: delete (most) fusefrontend v1 files
...
All the functionality in these files has been reimplemented
for the v2 api. Drop the old files.
2020-07-26 18:35:12 +02:00
Jakob Unterwurzacher
9cd24d79a2
v2api: implement Lseek
...
This also fixes the last remaining tests/fsck failure.
2020-07-23 22:55:07 +02:00
Jakob Unterwurzacher
49fc3abcb4
v2api: Lookup: use newChild() helper
2020-07-19 13:15:18 +02:00
Jakob Unterwurzacher
6b7ff09373
v2api: Node: make Path() public
...
Helpful for fsck.
2020-07-18 23:40:54 +02:00
Jakob Unterwurzacher
7eae35e2d3
v2api: implement ctlsocksrv.Interface
2020-07-17 22:14:40 +02:00
Jakob Unterwurzacher
57d572dbc1
v2api: implement Getxattr, Setxattr, Removexattr, Listxattr
...
gocryptfs/tests/xattr passes.
2020-07-14 19:55:20 +02:00
Jakob Unterwurzacher
4a0966e79e
v2api: Setattr: fill out
structure
2020-07-12 21:17:52 +02:00
Jakob Unterwurzacher
ca5acae6f0
v2api: fix Mkfifo
2020-07-12 20:19:29 +02:00
Jakob Unterwurzacher
0fa824933c
v2api: properly implement Node.Setattr
...
We used to always open a *File2 and letting the *File2
handle Setattr. This does not work it we cannot open the file!
Before:
$ go test
2020/07/12 20:14:57 writer: Write/Writev failed, err: 2=no such file or directory. opcode: INTERRUPT
2020/07/12 20:14:57 writer: Write/Writev failed, err: 2=no such file or directory. opcode: INTERRUPT
--- FAIL: TestLchown (0.00s)
matrix_test.go:634: lchown /tmp/gocryptfs-test-parent-1026/014500839/default-plain/symlink: too many levels of symbolic links
touch: setting times of '/tmp/gocryptfs-test-parent-1026/014500839/default-plain/utimesnano_symlink': Too many levels of symbolic links
--- FAIL: TestUtimesNanoSymlink (0.00s)
matrix_test.go:655: exit status 1
--- FAIL: TestMkfifo (0.00s)
matrix_test.go:755: file exists
--- FAIL: TestMagicNames (0.00s)
matrix_test.go:773: Testing n="gocryptfs.longname.QhUr5d9FHerwEs--muUs6_80cy6JRp89c1otLwp92Cs"
matrix_test.go:773: Testing n="gocryptfs.diriv"
matrix_test.go:815: open /tmp/gocryptfs-test-parent-1026/014500839/default-plain/linktarget: permission denied
--- FAIL: TestChmod (0.00s)
matrix_test.go:840: chmod 444 -> 000 failed: permission denied
matrix_test.go:840: chmod 444 -> 111 failed: permission denied
matrix_test.go:840: chmod 444 -> 123 failed: permission denied
matrix_test.go:840: chmod 444 -> 321 failed: permission denied
FAIL
exit status 1
FAIL github.com/rfjakob/gocryptfs/tests/matrix 0.790s
After:
$ go test
--- FAIL: TestMkfifo (0.00s)
matrix_test.go:755: file exists
--- FAIL: TestMagicNames (0.00s)
matrix_test.go:773: Testing n="gocryptfs.longname.QhUr5d9FHerwEs--muUs6_80cy6JRp89c1otLwp92Cs"
matrix_test.go:773: Testing n="gocryptfs.diriv"
matrix_test.go:815: open /tmp/gocryptfs-test-parent-1026/501766059/default-plain/linktarget: permission denied
--- FAIL: TestChmod (0.00s)
matrix_test.go:849: modeHave 0644 != modeWant 0
FAIL
exit status 1
FAIL github.com/rfjakob/gocryptfs/tests/matrix 0.787s
2020-07-12 20:17:15 +02:00
Jakob Unterwurzacher
f11432d02a
v2api: Getattr: use file handle if passed
2020-07-12 15:08:17 +02:00
Jakob Unterwurzacher
4d99b02279
v2api: Getattr: fix file size
2020-07-12 15:03:42 +02:00
Jakob Unterwurzacher
0d385846da
v2api: call InitSerializer
...
If we don't, reads hang with -serialize_reads.
2020-07-12 15:02:53 +02:00
Jakob Unterwurzacher
230d92c4f4
v2api: fix Rename trying to overwrite itself
...
We used to do this
[pid 99182] renameat2(14, "Y_4DAxKvj1QnXmJx2AkrKA", 15, ".", RENAME_NOREPLACE <unfinished ...>
which was not the intention.
2020-07-12 13:55:24 +02:00
Jakob Unterwurzacher
735e2aa65b
v2api: fix Mkdir crash when using plaintextnames
2020-07-12 13:35:37 +02:00
Jakob Unterwurzacher
b1d631d432
v2api: fix double-lock in truncate
2020-07-12 13:13:24 +02:00
Jakob Unterwurzacher
6196a5b5fe
v2api: File2: implement Release, Read, Write, Fsync, Flush, Allocate
...
Fortunately, this just means fixing up the function
signatures.
2020-07-12 12:59:01 +02:00
Jakob Unterwurzacher
d539a4c214
v2api: fix RootNode cast
2020-07-11 20:27:47 +02:00
Jakob Unterwurzacher
b0342fae5d
v2api: fix TestOpenBackingDir
2020-07-11 20:15:47 +02:00
Jakob Unterwurzacher
7de3330d70
v2api: implement Rename
2020-07-11 19:56:45 +02:00
Jakob Unterwurzacher
84344834c4
v2api: remove OpenatUserCtx, MknodatUserCtx helpers
...
Instead, use the new toFuseCtx() function introduced
in an earlier commit.
2020-07-11 19:44:45 +02:00
Jakob Unterwurzacher
250dbc6436
v2api: implement Symlink
2020-07-11 19:43:07 +02:00
Jakob Unterwurzacher
c35b575d5f
v2api: implement Link
2020-07-11 19:32:38 +02:00
Jakob Unterwurzacher
b971c75e67
v2api: implement Mknod
2020-07-11 19:23:04 +02:00
Jakob Unterwurzacher
855b4a95b7
v2api: implement Statfs
2020-07-11 18:59:54 +02:00
Jakob Unterwurzacher
40a31e0c32
v2api: list interfaces to be implemented
2020-07-05 20:22:24 +02:00
Jakob Unterwurzacher
63f68a0fcd
v2api: implement Setattr
2020-07-05 20:10:53 +02:00
Jakob Unterwurzacher
c22e78ee41
v2api: implement Opendir
2020-07-05 19:34:30 +02:00
Jakob Unterwurzacher
1f4e554168
v2api: merge openBackingDir into root_node.go
2020-07-04 21:42:04 +02:00
Jakob Unterwurzacher
d2139e18ef
v2api: implement Open()
2020-07-04 21:37:44 +02:00
Jakob Unterwurzacher
d73e4b3f7c
v2api: add prepareAtSyscall helper
2020-07-04 21:16:20 +02:00
Jakob Unterwurzacher
23180794fe
v2api: implement Readlink
2020-07-04 20:32:02 +02:00
Jakob Unterwurzacher
1618fbbac5
v2api: implement Unlink
2020-06-21 14:08:53 +02:00
Jakob Unterwurzacher
cc0b94a3c5
v2api: implement Rmdir
2020-06-21 13:57:04 +02:00
Jakob Unterwurzacher
192a29075a
v2api: implement Mkdir
2020-06-21 13:46:08 +02:00
Jakob Unterwurzacher
f6ded09e36
v2api: implement Create
2020-06-21 13:25:12 +02:00
Jakob Unterwurzacher
74a4accf0c
v2api: collect RootNode code in root_node.go
2020-06-21 12:44:32 +02:00
Jakob Unterwurzacher
ebdf58b9eb
v2api: implement GetAttr and Readdir
2020-06-21 12:42:18 +02:00
Jakob Unterwurzacher
6aa9f5636f
v2api: implement Lookup()
...
Compiles, but untested otherwise. No caching.
2020-06-21 12:01:34 +02:00
Jakob Unterwurzacher
9b8ce55383
inomap: clarify TranslateStat function comment
...
Also, fix the namespaceMap comment.
2020-06-21 12:01:34 +02:00
Jakob Unterwurzacher
2aad58f9ec
v2api (go-fuse v2 api): initial noop implementation
...
Compiles and mounts but does nothing useful.
2020-06-21 12:01:24 +02:00
Jakob Unterwurzacher
261cf12829
badname: stop trying to decrypt at length 22
...
At least 16 bytes due to AES --> at least 22 characters in base64
2020-06-06 12:49:45 +02:00
DerDonut
a8230d271f
Added auto decryption of invalid file names
...
Changed invalid file decoding and decryption. Function
DecryptName now shortens the filename until the filename is
decodable and decryptable. Will work with valid **and**
invalid Base64URL delimiter (valid delimiter [0-9a-zA-z_\\-].
If the filename is not decryptable at all, it returns the
original cipher name with flag suffix Changed cli tests to
generate decryptable and undecryptable file names with correct
encrypted content. Replacing #474 , extends #393
2020-06-06 12:20:31 +02:00
Jakob Unterwurzacher
71c0481f0e
Revert "fusefrontend: don't always clear the dircache in Rename"
...
As noticed by @slackner in
cb8872577d (commitcomment-39405233)
,
this is not safe.
This reverts commit cb8872577d
.
2020-05-24 23:36:11 +02:00
Jakob Unterwurzacher
15ff79bf14
syscallcompat: warn when Getdents truncates data
...
On CIFS mounts, unix.Getdents can return sudden ENOENT
in the middle of data. This will not be reported as an error
by user space tools, so return EIO instead.
Also log it as a warning.
https://github.com/rfjakob/gocryptfs/issues/483
2020-05-24 23:30:25 +02:00
Jakob Unterwurzacher
cb8872577d
fusefrontend: don't always clear the dircache in Rename
...
When filename encryption is on, we do know when we
overwrite a directory, and can clear only in this case.
sshfs-benchmark.bash: sshfs gocryptfs-on-sshfs
git init 1.74 7.80
rsync 6.19 11.63
2020-05-24 20:19:27 +02:00
Jakob Unterwurzacher
2a9b99a0ef
fusefrontend: don't clear dircache on Mkdir
...
Mkdir can not cause existing entries in the cache to go
stale. So don't clear it. Benchmark results:
sshfs-benchmark.bash: sshfs gocryptfs-on-sshfs
git init 1.65 8.74
rsync 6.09 17.54
2020-05-24 15:30:14 +02:00
Jakob Unterwurzacher
25f1727de9
syscallcompat: getdents: retry on EINTR
...
Fixes: https://github.com/rfjakob/gocryptfs/issues/483
Related: https://github.com/golang/go/issues/38836
2020-05-23 22:54:23 +02:00
Jakob Unterwurzacher
f8ad2ac3e2
dircache: increase cache size & lifetime
...
Looking at the dircache debug output, we see
that a "git status" workload has a very bad
cache hit rate because the entries expire or
get evicted before they can be reused.
Increase both cache size and lifetime for
a 4x speedup:
Before: 75s
After: 17s
https://github.com/rfjakob/gocryptfs/issues/410
2020-05-17 21:37:36 +02:00