diff options
Diffstat (limited to 'src/bindfs.c')
-rw-r--r-- | src/bindfs.c | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/src/bindfs.c b/src/bindfs.c index b208c36..6cd7c60 100644 --- a/src/bindfs.c +++ b/src/bindfs.c @@ -159,6 +159,9 @@ static struct Settings { XATTR_READ_WRITE } xattr_policy; + int delete_deny; + int rename_deny; + int mirrored_users_only; uid_t *mirrored_users; int num_mirrored_users; @@ -184,10 +187,6 @@ static struct Settings { int enable_lock_forwarding; int enable_ioctl; - - /* should probably be handled with enum... */ - int block_delete; - int block_rename; uid_t uid_offset; gid_t gid_offset; @@ -480,10 +479,9 @@ static int delete_file(const char *path, int (*target_delete_func)(const char *) char *unlink_first = NULL; int (*main_delete_func)(const char*) = target_delete_func; - if (settings.block_delete) + if (settings.delete_deny) return -EPERM; - real_path = process_path(path, false); if (real_path == NULL) return -errno; @@ -824,8 +822,8 @@ static int bindfs_rename(const char *from, const char *to) { int res; char *real_from, *real_to; - - if (settings.block_rename) + + if (settings.rename_deny) return -EPERM; real_from = process_path(from, false); @@ -1469,6 +1467,10 @@ static void print_usage(const char *progname) " --xattr-ro Read-only xattr operations.\n" " --xattr-rw Read-write xattr operations (the default).\n" "\n" + "Other file operations:\n" + " --delete-deny Disallow deleting files.\n" + " --rename-deny Disallow renaming files (within the mount).\n" + "\n" "Rate limits:\n" " --read-rate=... Limit to bytes/sec that can be read.\n" " --write-rate=... Limit to bytes/sec that can be written.\n" @@ -1519,6 +1521,8 @@ enum OptionKey { OPTKEY_XATTR_NONE, OPTKEY_XATTR_READ_ONLY, OPTKEY_XATTR_READ_WRITE, + OPTKEY_DELETE_DENY, + OPTKEY_RENAME_DENY, OPTKEY_REALISTIC_PERMISSIONS, OPTKEY_CTIME_FROM_MTIME, OPTKEY_ENABLE_LOCK_FORWARDING, @@ -1526,9 +1530,7 @@ enum OptionKey { OPTKEY_ENABLE_IOCTL, OPTKEY_HIDE_HARD_LINKS, OPTKEY_RESOLVE_SYMLINKS, - OPTKEY_BLOCK_DEVICES_AS_FILES, - OPTKEY_BLOCK_DELETE, - OPTKEY_BLOCK_RENAME + OPTKEY_BLOCK_DEVICES_AS_FILES }; static int process_option(void *data, const char *arg, int key, @@ -1600,6 +1602,13 @@ static int process_option(void *data, const char *arg, int key, settings.xattr_policy = XATTR_READ_WRITE; return 0; + case OPTKEY_DELETE_DENY: + settings.delete_deny = 1; + return 0; + case OPTKEY_RENAME_DENY: + settings.rename_deny= 1; + return 0; + case OPTKEY_REALISTIC_PERMISSIONS: settings.realistic_permissions = 1; return 0; @@ -1625,14 +1634,6 @@ static int process_option(void *data, const char *arg, int key, settings.block_devices_as_files = 1; return 0; - case OPTKEY_BLOCK_DELETE: - settings.block_delete = 1; - return 0; - - case OPTKEY_BLOCK_RENAME: - settings.block_rename = 1; - return 0; - case OPTKEY_NONOPTION: if (!settings.mntsrc) { settings.mntsrc = realpath(arg, NULL); @@ -1960,6 +1961,9 @@ int main(int argc, char *argv[]) OPT2("--xattr-ro", "xattr-ro", OPTKEY_XATTR_READ_ONLY), OPT2("--xattr-rw", "xattr-rw", OPTKEY_XATTR_READ_WRITE), + OPT2("--delete-deny", "delete-deny", OPTKEY_DELETE_DENY), + OPT2("--rename-deny", "rename-deny", OPTKEY_RENAME_DENY), + OPT2("--hide-hard-links", "hide-hard-links", OPTKEY_HIDE_HARD_LINKS), OPT2("--resolve-symlinks", "resolve-symlinks", OPTKEY_RESOLVE_SYMLINKS), OPT_OFFSET2("--resolved-symlink-deletion=%s", "resolved-symlink-deletion=%s", resolved_symlink_deletion, -1), @@ -1974,9 +1978,6 @@ int main(int argc, char *argv[]) OPT_OFFSET2("--uid-offset=%s", "uid-offset=%s", uid_offset, 0), OPT_OFFSET2("--gid-offset=%s", "gid-offset=%s", gid_offset, 0), - OPT2("--block-delete", "block-delete", OPTKEY_BLOCK_DELETE), - OPT2("--block-rename", "block-rename", OPTKEY_BLOCK_RENAME), - @@ -2010,6 +2011,8 @@ int main(int argc, char *argv[]) settings.chmod_allow_x = 0; settings.chmod_permchain = permchain_create(); settings.xattr_policy = XATTR_READ_WRITE; + settings.delete_deny = 0; + settings.rename_deny = 0; settings.mirrored_users_only = 0; settings.mirrored_users = NULL; settings.num_mirrored_users = 0; @@ -2025,9 +2028,6 @@ int main(int argc, char *argv[]) settings.enable_ioctl = 0; settings.uid_offset = 0; settings.gid_offset = 0; - - settings.block_delete = 0; - settings.block_rename = 0; atexit(&atexit_func); |