diff options
author | Alan Knowles <alan@roojs.com> | 2017-11-29 16:51:32 +0800 |
---|---|---|
committer | Alan Knowles <alan@roojs.com> | 2017-11-29 16:51:32 +0800 |
commit | 3f9082827885119244b7f1ca948c6c857843e5e8 (patch) | |
tree | ef5ce5869b35ee5284ed816626c60e37f43f618f /src/bindfs.c | |
parent | e0975d3fc332d2607df7b72d922a3f10fbca399c (diff) | |
download | bindfs-3f9082827885119244b7f1ca948c6c857843e5e8.tar.gz |
src/bindfs.c
Diffstat (limited to 'src/bindfs.c')
-rw-r--r-- | src/bindfs.c | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/bindfs.c b/src/bindfs.c index 0d10b74..ede537b 100644 --- a/src/bindfs.c +++ b/src/bindfs.c @@ -185,6 +185,10 @@ static struct Settings { int enable_ioctl; + /* should probably be handled with enum... */ + int block_delete; + int block_rename; + uid_t uid_offset; gid_t gid_offset; @@ -476,6 +480,10 @@ 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) + return -EPERM; + + real_path = process_path(path, false); if (real_path == NULL) return -errno; @@ -816,6 +824,9 @@ static int bindfs_rename(const char *from, const char *to) { int res; char *real_from, *real_to; + + if (settings.block_rename) + return -EPERM; real_from = process_path(from, false); if (real_from == NULL) @@ -1515,7 +1526,9 @@ enum OptionKey { OPTKEY_ENABLE_IOCTL, OPTKEY_HIDE_HARD_LINKS, OPTKEY_RESOLVE_SYMLINKS, - OPTKEY_BLOCK_DEVICES_AS_FILES + OPTKEY_BLOCK_DEVICES_AS_FILES, + OPTKEY_BLOCK_DELETE, + OPTKEY_BLOCK_RENAME }; static int process_option(void *data, const char *arg, int key, @@ -1612,6 +1625,14 @@ 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_DELETE: + settings.block_rename = 1; + return 0; + case OPTKEY_NONOPTION: if (!settings.mntsrc) { settings.mntsrc = realpath(arg, NULL); @@ -1950,9 +1971,15 @@ int main(int argc, char *argv[]) OPT2("--disable-lock-forwarding", "disable-lock-forwarding", OPTKEY_DISABLE_LOCK_FORWARDING), OPT2("--enable-ioctl", "enable-ioctl", OPTKEY_ENABLE_IOCTL), OPT_OFFSET2("--multithreaded", "multithreaded", multithreaded, -1), - 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), + + + + FUSE_OPT_END }; @@ -1998,6 +2025,9 @@ 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); |