From 010da8e41edc510c4c0236a4ec23e9e628faebe7 Mon Sep 17 00:00:00 2001 From: Susant Palai Date: Mon, 30 Jun 2014 14:04:34 -0400 Subject: DHT/permissoin: Let setattr consume stat built from lookup in heal path setattr call post mkdir(selfheal) ends up using the mode bits returned by mkdir,which miss the required suid, sgid and sticky bit. Hence, the fix is to use the mode bits from local->stbuf which was used to create the missing directories. Change-Id: I478708c80e28edc6509b784b0ad83952fc074a5b BUG: 1110262 Signed-off-by: Susant Palai Reviewed-on: http://review.gluster.org/8208 Tested-by: NetBSD Build System Reviewed-by: Shyamsundar Ranganathan Reviewed-by: Raghavendra G Tested-by: Raghavendra G --- tests/bugs/bug-1110262.t | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 tests/bugs/bug-1110262.t (limited to 'tests') diff --git a/tests/bugs/bug-1110262.t b/tests/bugs/bug-1110262.t new file mode 100644 index 00000000000..b6051935b7f --- /dev/null +++ b/tests/bugs/bug-1110262.t @@ -0,0 +1,64 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +cleanup; + +## Start glusterd +TEST glusterd; +TEST pidof glusterd; +TEST $CLI volume info; + +## Lets create volume +TEST $CLI volume create $V0 $H0:$B0/${V0}{1,2}; + +## Verify volume is created +EXPECT "$V0" volinfo_field $V0 'Volume Name'; +EXPECT 'Created' volinfo_field $V0 'Status'; +TEST $CLI volume set $V0 client-log-level TRACE +TEST $CLI volume set $V0 brick-log-level TRACE +## Start volume and verify +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status'; +TEST glusterfs -s $H0 --volfile-id=$V0 $M0 + +#kill one of the brick process +TEST kill -9 `ps aux | grep glusterfsd | grep $B0/${V0}2 | awk '{print $2}'`; + +#create a user and group +TEST useradd dev +TEST groupadd QA + +#create a new directory now with special user, group and mode bits +mkdir -m 7777 $M0/dironedown +TEST chown dev $M0/dironedown +TEST chgrp QA $M0/dironedown + +#store the permissions for comparision +permission_onedown=`ls -l $M0 | grep dironedown | awk '{print $1}'` + +#Now bring up the brick process +TEST $CLI volume start $V0 force + +#The updation of directory attrs happens on the revalidate path. Hence, atmax on +#2 lookups the update will happen. +sleep 5 +TEST ls $M0/dironedown; + +#check directory that was created post brick going down +TEST brick_perm=`ls -l $B0/${V0}2 | grep dironedown | awk '{print $1}'` +TEST echo $brick_perm; +TEST [ ${brick_perm} = ${permission_onedown} ] +uid=`ls -l $B0/${V0}2 | grep dironedown | awk '{print $3}'` +TEST echo $uid +TEST [ $uid = dev ] +gid=`ls -l $B0/${V0}2 | grep dironedown | awk '{print $4}'` +TEST echo $gid +TEST [ $gid = QA ] + +#cleanup +TEST userdel --force dev +TEST groupdel QA + +cleanup -- cgit