summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVijaykumar M <vmallika@redhat.com>2013-11-26 18:01:17 +0530
committerAnand Avati <avati@redhat.com>2013-11-26 11:00:18 -0800
commit21f7ad207bdb8ddf549aa65cafc1ad95e261ec3d (patch)
tree1c65c603ffd579aa3b6668e16984f150e5cdfc7b
parent2f218e1335d5fdab0b41716cc5c8976b20c367f6 (diff)
posix: do not allow to set/get "trusted.glusterfs.volume-id" xattr
Change-Id: I2e9a2264b1fd5ebc1ed0aff30225e89acbd0bcb4 BUG: 1034716 Signed-off-by: Vijaykumar M <vmallika@redhat.com> Reviewed-on: http://review.gluster.org/6361 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Anand Avati <avati@redhat.com>
-rw-r--r--tests/bugs/bug-1034716.t60
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.c4
-rw-r--r--xlators/storage/posix/src/posix.c15
3 files changed, 77 insertions, 2 deletions
diff --git a/tests/bugs/bug-1034716.t b/tests/bugs/bug-1034716.t
new file mode 100644
index 00000000000..5f98f7ae787
--- /dev/null
+++ b/tests/bugs/bug-1034716.t
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+. $(dirname $0)/../include.rc
+. $(dirname $0)/../volume.rc
+
+cleanup;
+
+#Basic checks
+TEST glusterd
+TEST pidof glusterd
+TEST $CLI volume info
+
+#Create a distributed volume
+TEST $CLI volume create $V0 $H0:$B0/${V0}{1..2};
+TEST $CLI volume start $V0
+
+# Mount FUSE
+TEST glusterfs -s $H0 --volfile-id $V0 $M0
+
+#Create a file and perform fop on a DIR
+TEST touch $M0/foo
+
+function xattr_query_check() {
+ local path=$1
+
+ local ret=`getfattr -m . -d $path 2>&1 | grep -c 'trusted.glusterfs'`
+ echo $ret
+}
+
+function set_xattr() {
+ local path=$1
+ local xa_name=$2
+ local xa_val=$3
+
+ setfattr -n $xa_name -v $xa_val $path
+ echo $?
+}
+
+function remove_xattr() {
+ local path=$1
+ local xa_name=$2
+
+ setfattr -x $xa_name $path
+ echo $?
+}
+
+EXPECT 0 xattr_query_check $M0/
+EXPECT 0 xattr_query_check $M0/foo
+
+EXPECT 1 set_xattr $M0/ 'trusted.glusterfs.volume-id' 'foo'
+EXPECT 1 remove_xattr $M0/ 'trusted.glusterfs.volume-id'
+
+
+## Finish up
+TEST umount $M0
+TEST $CLI volume stop $V0
+TEST $CLI volume delete $V0;
+TEST ! $CLI volume info $V0;
+
+cleanup;
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c
index 71e8baabdfd..987cc6e03fc 100644
--- a/xlators/mount/fuse/src/fuse-bridge.c
+++ b/xlators/mount/fuse/src/fuse-bridge.c
@@ -3048,7 +3048,7 @@ fuse_setxattr (xlator_t *this, fuse_in_header_t *finh, void *msg)
return;
}
- if (!strcmp (GFID_XATTR_KEY, name)) {
+ if (!strcmp (GFID_XATTR_KEY, name) || !strcmp (GF_XATTR_VOL_ID_KEY, name)) {
send_fuse_err (this, finh, EPERM);
GF_FREE (finh);
return;
@@ -3488,7 +3488,7 @@ fuse_removexattr (xlator_t *this, fuse_in_header_t *finh, void *msg)
int32_t ret = -1;
char *newkey = NULL;
- if (!strcmp (GFID_XATTR_KEY, name)) {
+ if (!strcmp (GFID_XATTR_KEY, name) || !strcmp (GF_XATTR_VOL_ID_KEY, name)) {
send_fuse_err (this, finh, EPERM);
GF_FREE (finh);
return;
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
index 2616885eebe..b72cd5e0f3d 100644
--- a/xlators/storage/posix/src/posix.c
+++ b/xlators/storage/posix/src/posix.c
@@ -2943,6 +2943,7 @@ posix_setxattr (call_frame_t *frame, xlator_t *this,
op_ret = -1;
dict_del (dict, GFID_XATTR_KEY);
+ dict_del (dict, GF_XATTR_VOL_ID_KEY);
filler.real_path = real_path;
filler.this = this;
@@ -3667,6 +3668,7 @@ done:
if (dict) {
dict_del (dict, GFID_XATTR_KEY);
+ dict_del (dict, GF_XATTR_VOL_ID_KEY);
}
out:
@@ -3852,6 +3854,7 @@ done:
if (dict) {
dict_del (dict, GFID_XATTR_KEY);
+ dict_del (dict, GF_XATTR_VOL_ID_KEY);
dict_ref (dict);
}
@@ -3908,6 +3911,7 @@ posix_fsetxattr (call_frame_t *frame, xlator_t *this,
_fd = pfd->fd;
dict_del (dict, GFID_XATTR_KEY);
+ dict_del (dict, GF_XATTR_VOL_ID_KEY);
filler.fd = _fd;
filler.this = this;
@@ -3967,6 +3971,12 @@ posix_removexattr (call_frame_t *frame, xlator_t *this,
op_ret = -1;
goto out;
}
+ if (!strcmp (GF_XATTR_VOL_ID_KEY, name)) {
+ gf_log (this->name, GF_LOG_WARNING, "Remove xattr called"
+ " on volume-id for file %s", real_path);
+ op_ret = -1;
+ goto out;
+ }
SET_FS_ID (frame->root->uid, frame->root->gid);
@@ -4023,6 +4033,11 @@ posix_fremovexattr (call_frame_t *frame, xlator_t *this,
" on gfid for file");
goto out;
}
+ if (!strcmp (GF_XATTR_VOL_ID_KEY, name)) {
+ gf_log (this->name, GF_LOG_WARNING, "Remove xattr called"
+ " on volume-id for file");
+ goto out;
+ }
ret = posix_fd_ctx_get (fd, this, &pfd);
if (ret < 0) {