fix: Add quirks mode for FTP compatibility, where read permission is required even if O_WRONLY is set

This commit is contained in:
Felicitas Pojtinger
2022-01-12 22:21:10 +01:00
parent dcc51ea88f
commit 5ed0eec75e
6 changed files with 15 additions and 3 deletions

View File

@@ -34,6 +34,7 @@ type STFS struct {
compressionLevel string
getFileBuffer func() (cache.WriteCache, func() error, error)
readOnly bool
writeImpliesRead bool
ioLock sync.Mutex
@@ -50,6 +51,7 @@ func NewSTFS(
compressionLevel string,
getFileBuffer func() (cache.WriteCache, func() error, error),
readOnly bool,
writeImpliesRead bool,
onHeader func(hdr *config.Header),
log logging.StructuredLogger,
@@ -63,6 +65,7 @@ func NewSTFS(
compressionLevel: compressionLevel,
getFileBuffer: getFileBuffer,
readOnly: readOnly,
writeImpliesRead: writeImpliesRead,
onHeader: onHeader,
log: log,
@@ -373,6 +376,10 @@ func (f *STFS) OpenFile(name string, flag int, perm os.FileMode) (afero.File, er
if (flag & O_ACCMODE) == os.O_RDONLY {
flags.Read = true
} else if (flag & O_ACCMODE) == os.O_WRONLY {
if f.writeImpliesRead {
flags.Read = true
}
flags.Write = true
} else if (flag & O_ACCMODE) == os.O_RDWR {
flags.Read = true

View File

@@ -407,6 +407,7 @@ func createSTFS(
)
},
readOnly,
false,
func(hdr *config.Header) {
jsonLogger.Trace("Header transform", hdr)