From 2f21a34a723e74b2f21067fcc25e878f42470a85 Mon Sep 17 00:00:00 2001 From: Illyoung Choi Date: Fri, 15 Dec 2023 13:50:54 -0700 Subject: [PATCH] Add no_set_xattr flag --- cmd/commons/args.go | 7 +++++++ commons/config.go | 2 ++ irodsfs/dir.go | 4 ++++ irodsfs/file.go | 4 ++++ 4 files changed, 17 insertions(+) diff --git a/cmd/commons/args.go b/cmd/commons/args.go index 08910ab..0849c00 100644 --- a/cmd/commons/args.go +++ b/cmd/commons/args.go @@ -58,6 +58,7 @@ func SetCommonFlags(command *cobra.Command) { command.Flags().Duration("metadata_cache_timeout", commons.MetadataCacheTimeoutDefault, "Set file system metadata cache timeout") command.Flags().Duration("metadata_cache_cleanup_time", commons.MetadataCacheCleanupTimeDefault, "Set file system metadata cache cleanup time") command.Flags().Bool("no_permission_check", false, "Disable permission check for performance") + command.Flags().Bool("no_set_xattr", false, "Disable set xattr") command.Flags().Bool("no_transaction", false, "Disable transaction for performance") command.Flags().Int("uid", -1, "Set UID of file/directory owner") @@ -485,6 +486,12 @@ func ProcessCommonFlags(command *cobra.Command, args []string) (*commons.Config, config.NoPermissionCheck = noPermissionCheck } + noSetXattrFlag := command.Flags().Lookup("no_set_xattr") + if noSetXattrFlag != nil { + noSetXattr, _ := strconv.ParseBool(noSetXattrFlag.Value.String()) + config.NoSetXattr = noSetXattr + } + noTransactionFlag := command.Flags().Lookup("no_transaction") if noTransactionFlag != nil { noTransaction, _ := strconv.ParseBool(noTransactionFlag.Value.String()) diff --git a/commons/config.go b/commons/config.go index fc0685b..1e33513 100644 --- a/commons/config.go +++ b/commons/config.go @@ -71,6 +71,7 @@ type Config struct { Resource string `yaml:"resource,omitempty"` PathMappings []irodsfs_common_vpath.VPathMapping `yaml:"path_mappings"` NoPermissionCheck bool `yaml:"no_permission_check"` + NoSetXattr bool `yaml:"no_set_xattr"` UID int `yaml:"uid"` GID int `yaml:"gid"` SystemUser string `yaml:"system_user"` @@ -131,6 +132,7 @@ func NewDefaultConfig() *Config { Resource: "", PathMappings: []irodsfs_common_vpath.VPathMapping{}, NoPermissionCheck: false, + NoSetXattr: false, UID: uid, GID: gid, SystemUser: systemUser, diff --git a/irodsfs/dir.go b/irodsfs/dir.go index 3961b06..d196198 100644 --- a/irodsfs/dir.go +++ b/irodsfs/dir.go @@ -310,6 +310,10 @@ func (dir *Dir) Setxattr(ctx context.Context, attr string, data []byte, flags ui logger.Infof("Calling Setxattr (%d) - %q", operID, dir.path) defer logger.Infof("Called Setxattr (%d) - %q", operID, dir.path) + if dir.fs.config.NoSetXattr { + return syscall.EACCES + } + if IsUnhandledAttr(attr) { return syscall.EACCES } diff --git a/irodsfs/file.go b/irodsfs/file.go index ecf1ac4..3990716 100644 --- a/irodsfs/file.go +++ b/irodsfs/file.go @@ -290,6 +290,10 @@ func (file *File) Setxattr(ctx context.Context, attr string, data []byte, flags logger.Infof("Calling Setxattr (%d) - %q", operID, file.path) defer logger.Infof("Called Setxattr (%d) - %q", operID, file.path) + if file.fs.config.NoSetXattr { + return syscall.EACCES + } + if IsUnhandledAttr(attr) { return syscall.EINVAL }