diff options
author | Martin Pärtel <martin.partel@gmail.com> | 2012-01-25 05:48:42 +0200 |
---|---|---|
committer | Martin Pärtel <martin.partel@gmail.com> | 2012-01-25 05:48:42 +0200 |
commit | 8ae697b6d483e5211f86de770c7000b5cedec7e6 (patch) | |
tree | facf67ce8f9c061cb1d7b07ec71c55b51f7dd94c /src | |
parent | 473faadb80c962ce629f88f640b587ea965e5343 (diff) | |
download | bindfs-8ae697b6d483e5211f86de770c7000b5cedec7e6.tar.gz |
Added option --realistic-permissions.
Diffstat (limited to 'src')
-rw-r--r-- | src/bindfs.1 | 12 | ||||
-rw-r--r-- | src/bindfs.c | 31 |
2 files changed, 31 insertions, 12 deletions
diff --git a/src/bindfs.1 b/src/bindfs.1 index d92c55d..0f91a39 100644 --- a/src/bindfs.1 +++ b/src/bindfs.1 @@ -196,7 +196,17 @@ The read/write permissions are checked against the (possibly modified) file permissions inside the mount. -.SH MISCELLANEOUS WORKAROUNDS +.SH MISCELLANEOUS OPTIONS + +.TP +.B \-\-realistic\-permissions, \-o realistic\-permissions +Hides read/write/execute permissions for a mirrored file when the mounter +doesn't have read/write/execute access to the underlying file. +Useless when mounting as root, since root will always have full access. + +(Prior to version 1.10 this option was the default behavior. +I felt it violated the principle of least surprise badly enough +to warrant a small break in backwards-compatibility.) .TP .B \-\-ctime\-from-mtime, \-o ctime\-from\-mtime diff --git a/src/bindfs.c b/src/bindfs.c index f68c412..ffefdbb 100644 --- a/src/bindfs.c +++ b/src/bindfs.c @@ -1,5 +1,5 @@ /* - Copyright 2006,2007,2008,2009,2010 Martin Pärtel <martin.partel@gmail.com> + Copyright 2006,2007,2008,2009,2010,2012 Martin Pärtel <martin.partel@gmail.com> This file is part of bindfs. @@ -117,8 +117,9 @@ static struct settings { gid_t *mirrored_members; int num_mirrored_members; - int ctime_from_mtime; + int realistic_permissions; + int ctime_from_mtime; int hide_hard_links; } settings; @@ -251,13 +252,15 @@ static int getattr_common(const char *procpath, struct stat *stbuf) /* Apply user-defined permission bit modifications */ stbuf->st_mode = permchain_apply(settings.permchain, stbuf->st_mode); - /* Check that we can really do what we promise */ - if (access(procpath, R_OK) == -1) - stbuf->st_mode &= ~0444; - if (access(procpath, W_OK) == -1) - stbuf->st_mode &= ~0222; - if (access(procpath, X_OK) == -1) - stbuf->st_mode &= ~0111; + /* Check that we can really do what we promise if --realistic-permissions was given */ + if (settings.realistic_permissions) { + if (access(procpath, R_OK) == -1) + stbuf->st_mode &= ~0444; + if (access(procpath, W_OK) == -1) + stbuf->st_mode &= ~0222; + if (access(procpath, X_OK) == -1) + stbuf->st_mode &= ~0111; + } /* Hide hard links */ if (settings.hide_hard_links) @@ -944,7 +947,8 @@ static void print_usage(const char *progname) " --xattr-ro Read-only xattr operations.\n" " --xattr-rw Read-write xattr operations (the default).\n" "\n" - "Workarounds:\n" + "Miscellaneous:\n" + " --realistic-permissions Hide permission bits for actions mounter can't do.\n" " --ctime-from-mtime Read file properties' change time\n" " from file content modification time.\n" " --hide-hard-links Always report a hard link count of 1.\n" @@ -994,6 +998,7 @@ enum OptionKey { OPTKEY_XATTR_NONE, OPTKEY_XATTR_READ_ONLY, OPTKEY_XATTR_READ_WRITE, + OPTKEY_REALISTIC_PERMISSIONS, OPTKEY_CTIME_FROM_MTIME, OPTKEY_HIDE_HARD_LINKS }; @@ -1067,10 +1072,12 @@ static int process_option(void *data, const char *arg, int key, settings.xattr_policy = XATTR_READ_WRITE; return 0; + case OPTKEY_REALISTIC_PERMISSIONS: + settings.realistic_permissions = 1; + return 0; case OPTKEY_CTIME_FROM_MTIME: settings.ctime_from_mtime = 1; return 0; - case OPTKEY_HIDE_HARD_LINKS: settings.hide_hard_links = 1; return 0; @@ -1148,6 +1155,7 @@ int main(int argc, char *argv[]) OPT2("--xattr-none", "xattr-none", OPTKEY_XATTR_NONE), OPT2("--xattr-ro", "xattr-ro", OPTKEY_XATTR_READ_ONLY), OPT2("--xattr-rw", "xattr-rw", OPTKEY_XATTR_READ_WRITE), + OPT2("--realistic-permissions", "realistic-permissions", OPTKEY_REALISTIC_PERMISSIONS), OPT2("--ctime-from-mtime", "ctime-from-mtime", OPTKEY_CTIME_FROM_MTIME), OPT2("--hide-hard-links", "hide-hard-links", OPTKEY_HIDE_HARD_LINKS), FUSE_OPT_END @@ -1181,6 +1189,7 @@ int main(int argc, char *argv[]) settings.num_mirrored_users = 0; settings.mirrored_members = NULL; settings.num_mirrored_members = 0; + settings.realistic_permissions = 0; settings.ctime_from_mtime = 0; settings.hide_hard_links = 0; atexit(&atexit_func); |