From 9f8d0d8e5734e3771b52c8a8784ef5a76b0f9ca8 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Thu, 1 Feb 2018 23:46:02 +0100 Subject: [PATCH] gccgo: replace syscall.NAME_MAX with unix.NAME_MAX For some reason the syscall.NAME_MAX constant does not exist on gccgo, and it does not hurt us to use unix.NAME_MAX instead. https://github.com/rfjakob/gocryptfs/issues/201 --- internal/fusefrontend_reverse/ctlsock_interface.go | 5 +++-- internal/fusefrontend_reverse/reverse_longnames.go | 4 +++- internal/fusefrontend_reverse/rfs.go | 2 +- internal/nametransform/diriv.go | 6 ++++-- internal/syscallcompat/getdents_test.go | 4 +++- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/internal/fusefrontend_reverse/ctlsock_interface.go b/internal/fusefrontend_reverse/ctlsock_interface.go index 5f61f37..c8ac379 100644 --- a/internal/fusefrontend_reverse/ctlsock_interface.go +++ b/internal/fusefrontend_reverse/ctlsock_interface.go @@ -3,7 +3,8 @@ package fusefrontend_reverse import ( "path/filepath" "strings" - "syscall" + + "golang.org/x/sys/unix" "github.com/rfjakob/gocryptfs/internal/ctlsock" "github.com/rfjakob/gocryptfs/internal/pathiv" @@ -23,7 +24,7 @@ func (rfs *ReverseFS) EncryptPath(plainPath string) (string, error) { for _, part := range parts { dirIV := pathiv.Derive(cipherPath, pathiv.PurposeDirIV) encryptedPart := rfs.nameTransform.EncryptName(part, dirIV) - if rfs.args.LongNames && len(encryptedPart) > syscall.NAME_MAX { + if rfs.args.LongNames && len(encryptedPart) > unix.NAME_MAX { encryptedPart = rfs.nameTransform.HashLongName(encryptedPart) } cipherPath = filepath.Join(cipherPath, encryptedPart) diff --git a/internal/fusefrontend_reverse/reverse_longnames.go b/internal/fusefrontend_reverse/reverse_longnames.go index 5ea7c0a..46f7399 100644 --- a/internal/fusefrontend_reverse/reverse_longnames.go +++ b/internal/fusefrontend_reverse/reverse_longnames.go @@ -7,6 +7,8 @@ import ( "syscall" "time" + "golang.org/x/sys/unix" + "github.com/hanwen/go-fuse/fuse" "github.com/hanwen/go-fuse/fuse/nodefs" @@ -80,7 +82,7 @@ func (rfs *ReverseFS) findLongnameParent(dir string, dirIV []byte, longname stri continue } cName := rfs.nameTransform.EncryptName(plaintextName, dirIV) - if len(cName) <= syscall.NAME_MAX { + if len(cName) <= unix.NAME_MAX { // Entry should have been skipped by the "continue" above log.Panic("logic error or wrong shortNameMax constant?") } diff --git a/internal/fusefrontend_reverse/rfs.go b/internal/fusefrontend_reverse/rfs.go index f9dde19..1523c18 100644 --- a/internal/fusefrontend_reverse/rfs.go +++ b/internal/fusefrontend_reverse/rfs.go @@ -288,7 +288,7 @@ func (rfs *ReverseFS) OpenDir(cipherPath string, context *fuse.Context) ([]fuse. cName = configfile.ConfDefaultName } else { cName = rfs.nameTransform.EncryptName(entries[i].Name, dirIV) - if len(cName) > syscall.NAME_MAX { + if len(cName) > unix.NAME_MAX { cName = rfs.nameTransform.HashLongName(cName) dotNameFile := fuse.DirEntry{ Mode: virtualFileMode, diff --git a/internal/nametransform/diriv.go b/internal/nametransform/diriv.go index 527ccce..06f029e 100644 --- a/internal/nametransform/diriv.go +++ b/internal/nametransform/diriv.go @@ -9,6 +9,8 @@ import ( "strings" "syscall" + "golang.org/x/sys/unix" + "github.com/rfjakob/gocryptfs/internal/cryptocore" "github.com/rfjakob/gocryptfs/internal/syscallcompat" "github.com/rfjakob/gocryptfs/internal/tlog" @@ -111,7 +113,7 @@ func WriteDirIV(dirfd *os.File, dir string) error { // too long. func (be *NameTransform) encryptAndHashName(name string, iv []byte) string { cName := be.EncryptName(name, iv) - if be.longNames && len(cName) > syscall.NAME_MAX { + if be.longNames && len(cName) > unix.NAME_MAX { return be.HashLongName(cName) } return cName @@ -128,7 +130,7 @@ func (be *NameTransform) EncryptPathDirIV(plainPath string, rootDir string) (str } // Reject names longer than 255 bytes. baseName := filepath.Base(plainPath) - if len(baseName) > syscall.NAME_MAX { + if len(baseName) > unix.NAME_MAX { return "", syscall.ENAMETOOLONG } // If we have the iv and the encrypted directory name in the cache, we diff --git a/internal/syscallcompat/getdents_test.go b/internal/syscallcompat/getdents_test.go index 131ffee..4b50575 100644 --- a/internal/syscallcompat/getdents_test.go +++ b/internal/syscallcompat/getdents_test.go @@ -9,6 +9,8 @@ import ( "syscall" "testing" + "golang.org/x/sys/unix" + "github.com/hanwen/go-fuse/fuse" ) @@ -28,7 +30,7 @@ func testGetdents(t *testing.T) { if err != nil { t.Fatal(err) } - for i := 1; i <= syscall.NAME_MAX; i++ { + for i := 1; i <= unix.NAME_MAX; i++ { n := strings.Repeat("x", i) err = ioutil.WriteFile(testDir+"/"+n, nil, 0600) if err != nil {