#endif
const char* default_options = "ro_fallback,allow_other,blkdev,big_writes,"
- "defer_permissions"
-#ifdef __APPLE__
- ",quiet"
-#endif
- ;
+ "defer_permissions";
struct exfat ef;
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);
- 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);
- 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)
.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.
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,