|
@@ -67,7 +67,8 @@ struct fuse_mount_data {
|
|
unsigned rootmode_present:1;
|
|
unsigned rootmode_present:1;
|
|
unsigned user_id_present:1;
|
|
unsigned user_id_present:1;
|
|
unsigned group_id_present:1;
|
|
unsigned group_id_present:1;
|
|
- unsigned flags;
|
|
|
|
|
|
+ unsigned default_permissions:1;
|
|
|
|
+ unsigned allow_other:1;
|
|
unsigned max_read;
|
|
unsigned max_read;
|
|
unsigned blksize;
|
|
unsigned blksize;
|
|
};
|
|
};
|
|
@@ -193,7 +194,7 @@ void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr,
|
|
* check in may_delete().
|
|
* check in may_delete().
|
|
*/
|
|
*/
|
|
fi->orig_i_mode = inode->i_mode;
|
|
fi->orig_i_mode = inode->i_mode;
|
|
- if (!(fc->flags & FUSE_DEFAULT_PERMISSIONS))
|
|
|
|
|
|
+ if (!fc->default_permissions)
|
|
inode->i_mode &= ~S_ISVTX;
|
|
inode->i_mode &= ~S_ISVTX;
|
|
|
|
|
|
fi->orig_ino = attr->ino;
|
|
fi->orig_ino = attr->ino;
|
|
@@ -534,11 +535,11 @@ static int parse_fuse_opt(char *opt, struct fuse_mount_data *d, int is_bdev)
|
|
break;
|
|
break;
|
|
|
|
|
|
case OPT_DEFAULT_PERMISSIONS:
|
|
case OPT_DEFAULT_PERMISSIONS:
|
|
- d->flags |= FUSE_DEFAULT_PERMISSIONS;
|
|
|
|
|
|
+ d->default_permissions = 1;
|
|
break;
|
|
break;
|
|
|
|
|
|
case OPT_ALLOW_OTHER:
|
|
case OPT_ALLOW_OTHER:
|
|
- d->flags |= FUSE_ALLOW_OTHER;
|
|
|
|
|
|
+ d->allow_other = 1;
|
|
break;
|
|
break;
|
|
|
|
|
|
case OPT_MAX_READ:
|
|
case OPT_MAX_READ:
|
|
@@ -572,9 +573,9 @@ static int fuse_show_options(struct seq_file *m, struct dentry *root)
|
|
|
|
|
|
seq_printf(m, ",user_id=%u", from_kuid_munged(&init_user_ns, fc->user_id));
|
|
seq_printf(m, ",user_id=%u", from_kuid_munged(&init_user_ns, fc->user_id));
|
|
seq_printf(m, ",group_id=%u", from_kgid_munged(&init_user_ns, fc->group_id));
|
|
seq_printf(m, ",group_id=%u", from_kgid_munged(&init_user_ns, fc->group_id));
|
|
- if (fc->flags & FUSE_DEFAULT_PERMISSIONS)
|
|
|
|
|
|
+ if (fc->default_permissions)
|
|
seq_puts(m, ",default_permissions");
|
|
seq_puts(m, ",default_permissions");
|
|
- if (fc->flags & FUSE_ALLOW_OTHER)
|
|
|
|
|
|
+ if (fc->allow_other)
|
|
seq_puts(m, ",allow_other");
|
|
seq_puts(m, ",allow_other");
|
|
if (fc->max_read != ~0)
|
|
if (fc->max_read != ~0)
|
|
seq_printf(m, ",max_read=%u", fc->max_read);
|
|
seq_printf(m, ",max_read=%u", fc->max_read);
|
|
@@ -917,7 +918,7 @@ static void process_init_reply(struct fuse_conn *fc, struct fuse_req *req)
|
|
if (arg->time_gran && arg->time_gran <= 1000000000)
|
|
if (arg->time_gran && arg->time_gran <= 1000000000)
|
|
fc->sb->s_time_gran = arg->time_gran;
|
|
fc->sb->s_time_gran = arg->time_gran;
|
|
if ((arg->flags & FUSE_POSIX_ACL)) {
|
|
if ((arg->flags & FUSE_POSIX_ACL)) {
|
|
- fc->flags |= FUSE_DEFAULT_PERMISSIONS;
|
|
|
|
|
|
+ fc->default_permissions = 1;
|
|
fc->posix_acl = 1;
|
|
fc->posix_acl = 1;
|
|
fc->sb->s_xattr = fuse_acl_xattr_handlers;
|
|
fc->sb->s_xattr = fuse_acl_xattr_handlers;
|
|
}
|
|
}
|
|
@@ -1119,7 +1120,8 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
|
|
fc->dont_mask = 1;
|
|
fc->dont_mask = 1;
|
|
sb->s_flags |= MS_POSIXACL;
|
|
sb->s_flags |= MS_POSIXACL;
|
|
|
|
|
|
- fc->flags = d.flags;
|
|
|
|
|
|
+ fc->default_permissions = d.default_permissions;
|
|
|
|
+ fc->allow_other = d.allow_other;
|
|
fc->user_id = d.user_id;
|
|
fc->user_id = d.user_id;
|
|
fc->group_id = d.group_id;
|
|
fc->group_id = d.group_id;
|
|
fc->max_read = max_t(unsigned, 4096, d.max_read);
|
|
fc->max_read = max_t(unsigned, 4096, d.max_read);
|