From d5c3024f9fb4e1671d8e0a969934350bb08e2db9 Mon Sep 17 00:00:00 2001 From: Raghavendra Bhat Date: Tue, 26 Mar 2013 14:15:58 +0530 Subject: rpc: disable root-squash dynamically upon volume set command Change-Id: I2ba9ca339ffbe07cb74833165a46a941225b623d BUG: 927616 Signed-off-by: Raghavendra Bhat Reviewed-on: http://review.gluster.org/4722 Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- rpc/rpc-lib/src/rpcsvc-auth.c | 9 +++++-- tests/bugs/bug-927616.t | 61 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) create mode 100755 tests/bugs/bug-927616.t diff --git a/rpc/rpc-lib/src/rpcsvc-auth.c b/rpc/rpc-lib/src/rpcsvc-auth.c index 907ae1ec..04b66091 100644 --- a/rpc/rpc-lib/src/rpcsvc-auth.c +++ b/rpc/rpc-lib/src/rpcsvc-auth.c @@ -206,11 +206,16 @@ rpcsvc_set_allow_insecure (rpcsvc_t *svc, dict_t *options) int rpcsvc_set_root_squash (rpcsvc_t *svc, dict_t *options) { + int ret = -1; + GF_ASSERT (svc); GF_ASSERT (options); - if (dict_get_str_boolean (options, "root-squash", 0)) - svc->root_squash = _gf_true; + ret = dict_get_str_boolean (options, "root-squash", 0); + if (ret != -1) + svc->root_squash = ret; + else + svc->root_squash = _gf_false; if (svc->root_squash) gf_log (GF_RPCSVC, GF_LOG_DEBUG, "root squashing enabled "); diff --git a/tests/bugs/bug-927616.t b/tests/bugs/bug-927616.t new file mode 100755 index 00000000..22b20aff --- /dev/null +++ b/tests/bugs/bug-927616.t @@ -0,0 +1,61 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{1,2}; +TEST $CLI volume set $V0 performance.open-behind off; +TEST $CLI volume start $V0 + +sleep 1; +## Mount FUSE with caching disabled +TEST glusterfs --entry-timeout=0 --attribute-timeout=0 -s $H0 --volfile-id $V0 $M0; + +sleep 1; + +TEST mount -t nfs -o vers=3,nolock $H0:/$V0 $N0; + +TEST mkdir $M0/dir; + +mkdir $M0/other; +cp /etc/passwd $M0/; +cp $M0/passwd $M0/file; +chmod 600 $M0/file; + +chown -R nfsnobody:nfsnobody $M0/dir; + +TEST $CLI volume set $V0 server.root-squash on; + +sleep 1; + +# tests should fail. +touch $M0/foo 2>/dev/null; +TEST [ $? -ne 0 ] +touch $N0/foo 2>/dev/null; +TEST [ $? -ne 0 ] +mkdir $M0/new 2>/dev/null; +TEST [ $? -ne 0 ] +mkdir $N0/new 2>/dev/null; +TEST [ $? -ne 0 ] + +TEST $CLI volume set $V0 server.root-squash off; + +sleep 1; + +# tests should pass. +touch $M0/foo 2>/dev/null; +TEST [ $? -eq 0 ] +touch $N0/bar 2>/dev/null; +TEST [ $? -eq 0 ] +mkdir $M0/new 2>/dev/null; +TEST [ $? -eq 0 ] +mkdir $N0/old 2>/dev/null; +TEST [ $? -eq 0 ] + +TEST $CLI volume stop $V0; +TEST $CLI volume delete $V0; + +cleanup; -- cgit