diff options
| author | Jakob Unterwurzacher | 2017-02-16 21:20:29 +0100 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2017-02-16 21:20:29 +0100 | 
| commit | 62e7eb7d04793d7d629c1105a3eddf04e396ac24 (patch) | |
| tree | c3589273e1ccd86553ea361f42c61cda3e4e63fd | |
| parent | 45c1ea499ee7f1f4309f1f8aa8b78c16642662db (diff) | |
tests: reverse: check Access() call
| -rw-r--r-- | internal/fusefrontend_reverse/rpath.go | 4 | ||||
| -rw-r--r-- | tests/reverse/correctness_test.go | 24 | ||||
| -rw-r--r-- | tests/reverse/main_test.go | 12 | 
3 files changed, 37 insertions, 3 deletions
| diff --git a/internal/fusefrontend_reverse/rpath.go b/internal/fusefrontend_reverse/rpath.go index 9f52b28..02f4e9a 100644 --- a/internal/fusefrontend_reverse/rpath.go +++ b/internal/fusefrontend_reverse/rpath.go @@ -70,9 +70,9 @@ func (rfs *ReverseFS) rDecryptName(cName string, dirIV []byte, pDir string) (pNa  		}  	} else {  		// It makes no sense to decrypt a ".name" file. This is a virtual file -		// that has no represantation in the plaintext filesystem. ".name" +		// that has no representation in the plaintext filesystem. ".name"  		// files should have already been handled in virtualfile.go. -		tlog.Warn.Printf("decryptPath: tried to decrypt %q!? Returning EINVAL.", cName) +		tlog.Warn.Printf("rDecryptName: cannot decrypt virtual file %q", cName)  		return "", syscall.EINVAL  	}  	return pName, nil diff --git a/tests/reverse/correctness_test.go b/tests/reverse/correctness_test.go index 3565ea6..db64983 100644 --- a/tests/reverse/correctness_test.go +++ b/tests/reverse/correctness_test.go @@ -3,6 +3,7 @@ package reverse_test  import (  	"io/ioutil"  	"os" +	"syscall"  	"testing"  	"github.com/rfjakob/gocryptfs/tests/test_helpers" @@ -65,3 +66,26 @@ func TestConfigMapping(t *testing.T) {  		t.Errorf("empty file")  	}  } + +// Check that the access() syscall works on virtual files +func TestAccessVirtual(t *testing.T) { +	if plaintextnames { +		t.Skip() +	} +	var R_OK uint32 = 4 +	var W_OK uint32 = 2 +	var X_OK uint32 = 1 +	fn := dirB + "/gocryptfs.diriv" +	err := syscall.Access(fn, R_OK) +	if err != nil { +		t.Errorf("%q should be readable, but got error: %v", fn, err) +	} +	err = syscall.Access(fn, W_OK) +	if err == nil { +		t.Errorf("should NOT be writeable") +	} +	err = syscall.Access(fn, X_OK) +	if err == nil { +		t.Errorf("should NOT be executable") +	} +} diff --git a/tests/reverse/main_test.go b/tests/reverse/main_test.go index be6016f..3425289 100644 --- a/tests/reverse/main_test.go +++ b/tests/reverse/main_test.go @@ -8,10 +8,20 @@ import (  	"github.com/rfjakob/gocryptfs/tests/test_helpers"  ) -var dirA, dirB, dirC string  var x240 = string(bytes.Repeat([]byte("x"), 240))  var plaintextnames bool +// dirA is a normal directory +var dirA string + +// dirB is the reverse mount backed by dirA +var dirB string + +// dirC is a forward mount backed by dirB +var dirC string + +// Create directory "dirA", mount it reverse to "dirB", mount it forward +// to "dirC".  func TestMain(m *testing.M) {  	var r int  	for _, plaintextnames = range []bool{false, true} { | 
