#endif
const char* default_options = "ro_fallback,allow_other,blkdev,big_writes,"
#endif
const char* default_options = "ro_fallback,allow_other,blkdev,big_writes,"
- "defer_permissions"
-#ifdef __APPLE__
- ",quiet"
-#endif
- ;
static int fuse_exfat_chmod(const char* path, mode_t mode)
{
static int fuse_exfat_chmod(const char* path, mode_t mode)
{
+ const mode_t VALID_MODE_MASK = S_IFREG | S_IFDIR |
+ S_IRWXU | S_IRWXG | S_IRWXO;
+
exfat_debug("[%s] %s 0%ho", __func__, path, mode);
exfat_debug("[%s] %s 0%ho", __func__, path, mode);
- return ef.quiet ? 0 : -ENOSYS;
+ if (mode & ~VALID_MODE_MASK)
+ return -EPERM;
+ return 0;
}
static int fuse_exfat_chown(const char* path, uid_t uid, gid_t gid)
{
exfat_debug("[%s] %s %u:%u", __func__, path, uid, gid);
}
static int fuse_exfat_chown(const char* path, uid_t uid, gid_t gid)
{
exfat_debug("[%s] %s %u:%u", __func__, path, uid, gid);
- return ef.quiet ? 0 : -ENOSYS;
+ if (uid != ef.uid || gid != ef.gid)
+ return -EPERM;
+ return 0;
}
static int fuse_exfat_statfs(const char* path, struct statvfs* sfs)
}
static int fuse_exfat_statfs(const char* path, struct statvfs* sfs)
.TP
.BI noatime
Do not update access time when file is read.
.TP
.BI noatime
Do not update access time when file is read.
-.TP
-.BI quiet
-Owner, group and mode attributes are not supported by the current
-implementation, so chmod() and chown() requests fail with ENOSYS. This option
-makes them always succeed, i.e. all requests to change owner, group or mode
-will be silently ignored. Default on OS\ X.
.SH EXIT CODES
Zero is returned on successful mount. Any other code means an error.
.SH EXIT CODES
Zero is returned on successful mount. Any other code means an error.
gid_t gid;
int ro;
bool noatime;
gid_t gid;
int ro;
bool noatime;
};
/* in-core nodes iterator */
};
/* in-core nodes iterator */
ef->gid = get_int_option(options, "gid", 10, getegid());
ef->noatime = match_option(options, "noatime");
ef->gid = get_int_option(options, "gid", 10, getegid());
ef->noatime = match_option(options, "noatime");
- ef->quiet = match_option(options, "quiet");
}
static int verify_vbr_checksum(struct exfat_dev* dev, void* sector,
}
static int verify_vbr_checksum(struct exfat_dev* dev, void* sector,