diff options
Diffstat (limited to 'xlators/mount')
-rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 14 | ||||
-rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.h | 1 |
2 files changed, 15 insertions, 0 deletions
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index 29e9787edea..174938a68a4 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -3211,6 +3211,10 @@ fuse_thread_proc (void *data) msg = finh + 1; } + if (priv->uid_map_root && + finh->uid == priv->uid_map_root) + finh->uid = 0; + #ifdef GF_DARWIN_HOST_OS if (finh->opcode >= FUSE_OP_HIGH) /* turn down MacFUSE specific messages */ @@ -3599,6 +3603,11 @@ init (xlator_t *this_xl) if (ret == 0) priv->client_pid_set = _gf_true; + ret = dict_get_uint32 (options, "uid-map-root", + &priv->uid_map_root); + if (ret != 0) + priv->uid_map_root = 0; + priv->direct_io_mode = 2; ret = dict_get_str (options, ZR_DIRECT_IO_OPT, &value_string); if (ret == 0) { @@ -3620,6 +3629,8 @@ init (xlator_t *this_xl) ret = gf_string2boolean (value_string, &priv->acl); GF_ASSERT (ret == 0); } + if (priv->uid_map_root) + priv->acl = 1; priv->fuse_dump_fd = -1; @@ -3779,6 +3790,9 @@ struct volume_options options[] = { { .key = {"client-pid"}, .type = GF_OPTION_TYPE_INT }, + { .key = {"uid-map-root"}, + .type = GF_OPTION_TYPE_INT + }, { .key = {"sync-mtab"}, .type = GF_OPTION_TYPE_BOOL }, diff --git a/xlators/mount/fuse/src/fuse-bridge.h b/xlators/mount/fuse/src/fuse-bridge.h index 954db3c273c..c729c9468fc 100644 --- a/xlators/mount/fuse/src/fuse-bridge.h +++ b/xlators/mount/fuse/src/fuse-bridge.h @@ -106,6 +106,7 @@ struct fuse_private { pid_t client_pid; gf_boolean_t client_pid_set; + unsigned uid_map_root; gf_boolean_t acl; }; typedef struct fuse_private fuse_private_t; |