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

@@ -193,6 +193,7 @@ var serveFTPCmd = &cobra.Command{
)
},
viper.GetBool(readOnlyFlag),
true, // FTP requires read permission even if `O_WRONLY` is set if cache is enabled
func(hdr *config.Header) {
jsonLogger.Trace("Header transform", hdr)

View File

@@ -128,9 +128,10 @@ var serveHTTPCmd = &cobra.Command{
Metadata: metadataPersister,
},
"", // We never write
nil, // We never write
true, // We never write
"", // We never write
nil, // We never write
true, // We never write
false, // We never write
func(hdr *config.Header) {
jsonLogger.Trace("Header transform", hdr)

View File

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

View File

@@ -99,6 +99,7 @@ func main() {
)
},
false,
false,
func(hdr *config.Header) {
l.Trace("Header transform", hdr)

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)