diff options
| author | Niels de Vos <ndevos@redhat.com> | 2015-07-21 18:50:12 +0200 | 
|---|---|---|
| committer | Kaleb KEITHLEY <kkeithle@redhat.com> | 2015-08-05 04:53:12 -0700 | 
| commit | 64a5bf3749c67fcc00773a2716d0c7b61b0b4417 (patch) | |
| tree | 4dd5a36c66ca70f726427480a1a87c44803027a1 /xlators/mount/fuse/src/fuse-bridge.c | |
| parent | 28fc199d5dc92a69eb2b899bbea23548dc14a39b (diff) | |
fuse: add "resolve-gids" mount option to overcome 32-groups limit
Add a --resolve-gids commandline option to the glusterfs binary. This
option gets set when executing "mount -t glusterfs -o resolve-gids ...".
This option is most useful in combination with the "acl" mount option.
POSIX ACL permission checking is done on the FUSE-client side to improve
performance (in addition to the checking on the bricks).
The fuse-bridge reads /proc/$PID/status by default, and this file
contains maximum 32 groups. Any local (client-side) permission checking
that requires more than the first 32 groups will fail.
By enabling the "resolve-gids" option, the fuse-bridge will call
getgrouplist() to retrieve all the groups from the user accessing the
mountpoint. This is comparable to how "nfs.server-aux-gids" works.
Note that when a user belongs to more than ~93 groups, the volume option
server.manage-gids needs to be enabled too. Without this option, the
RPC-layer will need to reduce the number of groups to make them fit in
the RPC-header.
Change-Id: I7ede90d0e41bcf55755cced5747fa0fb1699edb2
BUG: 1246275
Signed-off-by: Niels de Vos <ndevos@redhat.com>
Reviewed-on: http://review.gluster.org/11732
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Ravishankar N <ravishankar@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: jiffin tony Thottan <jthottan@redhat.com>
Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
Diffstat (limited to 'xlators/mount/fuse/src/fuse-bridge.c')
| -rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 6 | 
1 files changed, 6 insertions, 0 deletions
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index b67a60a76b1..d6edcb360cd 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -5427,6 +5427,8 @@ init (xlator_t *this_xl)                  goto cleanup_exit;          } +        GF_OPTION_INIT("resolve-gids", priv->resolve_gids, bool, cleanup_exit); +          /* default values seemed to work fine during testing */          GF_OPTION_INIT ("background-qlen", priv->background_qlen, int32,                          cleanup_exit); @@ -5665,6 +5667,10 @@ struct volume_options options[] = {            .type = GF_OPTION_TYPE_INT,            .default_value = "300"          }, +        { .key = {"resolve-gids"}, +          .type = GF_OPTION_TYPE_BOOL, +          .default_value = "false" +        },          { .key = {"acl"},            .type = GF_OPTION_TYPE_BOOL,            .default_value = "false"  | 
