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
This commit is contained in:
Jakob Unterwurzacher 2018-02-01 23:46:02 +01:00
parent 26ba8103bf
commit 9f8d0d8e57
5 changed files with 14 additions and 7 deletions

View File

@ -3,7 +3,8 @@ package fusefrontend_reverse
import ( import (
"path/filepath" "path/filepath"
"strings" "strings"
"syscall"
"golang.org/x/sys/unix"
"github.com/rfjakob/gocryptfs/internal/ctlsock" "github.com/rfjakob/gocryptfs/internal/ctlsock"
"github.com/rfjakob/gocryptfs/internal/pathiv" "github.com/rfjakob/gocryptfs/internal/pathiv"
@ -23,7 +24,7 @@ func (rfs *ReverseFS) EncryptPath(plainPath string) (string, error) {
for _, part := range parts { for _, part := range parts {
dirIV := pathiv.Derive(cipherPath, pathiv.PurposeDirIV) dirIV := pathiv.Derive(cipherPath, pathiv.PurposeDirIV)
encryptedPart := rfs.nameTransform.EncryptName(part, dirIV) 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) encryptedPart = rfs.nameTransform.HashLongName(encryptedPart)
} }
cipherPath = filepath.Join(cipherPath, encryptedPart) cipherPath = filepath.Join(cipherPath, encryptedPart)

View File

@ -7,6 +7,8 @@ import (
"syscall" "syscall"
"time" "time"
"golang.org/x/sys/unix"
"github.com/hanwen/go-fuse/fuse" "github.com/hanwen/go-fuse/fuse"
"github.com/hanwen/go-fuse/fuse/nodefs" "github.com/hanwen/go-fuse/fuse/nodefs"
@ -80,7 +82,7 @@ func (rfs *ReverseFS) findLongnameParent(dir string, dirIV []byte, longname stri
continue continue
} }
cName := rfs.nameTransform.EncryptName(plaintextName, dirIV) 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 // Entry should have been skipped by the "continue" above
log.Panic("logic error or wrong shortNameMax constant?") log.Panic("logic error or wrong shortNameMax constant?")
} }

View File

@ -288,7 +288,7 @@ func (rfs *ReverseFS) OpenDir(cipherPath string, context *fuse.Context) ([]fuse.
cName = configfile.ConfDefaultName cName = configfile.ConfDefaultName
} else { } else {
cName = rfs.nameTransform.EncryptName(entries[i].Name, dirIV) 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) cName = rfs.nameTransform.HashLongName(cName)
dotNameFile := fuse.DirEntry{ dotNameFile := fuse.DirEntry{
Mode: virtualFileMode, Mode: virtualFileMode,

View File

@ -9,6 +9,8 @@ import (
"strings" "strings"
"syscall" "syscall"
"golang.org/x/sys/unix"
"github.com/rfjakob/gocryptfs/internal/cryptocore" "github.com/rfjakob/gocryptfs/internal/cryptocore"
"github.com/rfjakob/gocryptfs/internal/syscallcompat" "github.com/rfjakob/gocryptfs/internal/syscallcompat"
"github.com/rfjakob/gocryptfs/internal/tlog" "github.com/rfjakob/gocryptfs/internal/tlog"
@ -111,7 +113,7 @@ func WriteDirIV(dirfd *os.File, dir string) error {
// too long. // too long.
func (be *NameTransform) encryptAndHashName(name string, iv []byte) string { func (be *NameTransform) encryptAndHashName(name string, iv []byte) string {
cName := be.EncryptName(name, iv) 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 be.HashLongName(cName)
} }
return cName return cName
@ -128,7 +130,7 @@ func (be *NameTransform) EncryptPathDirIV(plainPath string, rootDir string) (str
} }
// Reject names longer than 255 bytes. // Reject names longer than 255 bytes.
baseName := filepath.Base(plainPath) baseName := filepath.Base(plainPath)
if len(baseName) > syscall.NAME_MAX { if len(baseName) > unix.NAME_MAX {
return "", syscall.ENAMETOOLONG return "", syscall.ENAMETOOLONG
} }
// If we have the iv and the encrypted directory name in the cache, we // If we have the iv and the encrypted directory name in the cache, we

View File

@ -9,6 +9,8 @@ import (
"syscall" "syscall"
"testing" "testing"
"golang.org/x/sys/unix"
"github.com/hanwen/go-fuse/fuse" "github.com/hanwen/go-fuse/fuse"
) )
@ -28,7 +30,7 @@ func testGetdents(t *testing.T) {
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
for i := 1; i <= syscall.NAME_MAX; i++ { for i := 1; i <= unix.NAME_MAX; i++ {
n := strings.Repeat("x", i) n := strings.Repeat("x", i)
err = ioutil.WriteFile(testDir+"/"+n, nil, 0600) err = ioutil.WriteFile(testDir+"/"+n, nil, 0600)
if err != nil { if err != nil {