summaryrefslogtreecommitdiffstats
path: root/xlators/mount
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/mount')
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.c14
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.h1
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 29e9787ed..174938a68 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 954db3c27..c729c9468 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;