diff options
author | Varun Shastry <vshastry@redhat.com> | 2014-06-04 12:43:18 +0530 |
---|---|---|
committer | Raghavendra G <rgowdapp@redhat.com> | 2014-06-15 23:12:50 -0700 |
commit | 47230eb38d96e51d2d5e976eda7ff82c62f6eedd (patch) | |
tree | 0a559d3c0edef97a0473f3545e20c67d61c1553e | |
parent | ec845d93e74644bbfe27e0b085a38dbd7c02480f (diff) |
features/quota: No root squash for quota aux mount by default
With change 28209283a67f13802cc0c1d3df07c676926810a2, the root squash option
is enabled by default even for the trusted clients. This disallowed quota
auxiliary mount from setting the limit.
This patch adds the quota aux mount process to list of 'special' clients which
have the root squash disabled by default.
Change-Id: Ie6583dd3deb170563daf001239c51bcff1ce078b
BUG: 1104692
Signed-off-by: Varun Shastry <vshastry@redhat.com>
Reviewed-on: http://review.gluster.org/7967
Reviewed-by: Krutika Dhananjay <kdhananj@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Tested-by: Raghavendra G <rgowdapp@redhat.com>
-rw-r--r-- | cli/src/cli-cmd-volume.c | 6 | ||||
-rw-r--r-- | libglusterfs/src/common-utils.h | 11 | ||||
-rwxr-xr-x | tests/bugs/bug-1104692.t | 31 | ||||
-rw-r--r-- | xlators/protocol/server/src/server-helpers.c | 3 |
4 files changed, 44 insertions, 7 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 97984721cbd..b1b6c8275bc 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -29,6 +29,7 @@ #include "cli1-xdr.h" #include "run.h" #include "syscall.h" +#include "common-utils.h" extern struct rpc_clnt *global_rpc; extern struct rpc_clnt *global_quotad_rpc; @@ -1038,6 +1039,7 @@ gf_cli_create_auxiliary_mount (char *volname) char mountdir[PATH_MAX] = {0,}; char pidfile_path[PATH_MAX] = {0,}; char logfile[PATH_MAX] = {0,}; + char qpid [16] = {0,}; GLUSTERFS_GET_AUX_MOUNT_PIDFILE (pidfile_path, volname); @@ -1059,14 +1061,16 @@ gf_cli_create_auxiliary_mount (char *volname) snprintf (logfile, PATH_MAX-1, "%s/quota-mount-%s.log", DEFAULT_LOG_FILE_DIRECTORY, volname); + snprintf(qpid, 15, "%d", GF_CLIENT_PID_QUOTA_MOUNT); ret = runcmd (SBIN_DIR"/glusterfs", "-s", "localhost", "--volfile-id", volname, "-l", logfile, "-p", pidfile_path, + "--client-pid", qpid, mountdir, - "--client-pid", "-42", NULL); + NULL); if (ret) { gf_log ("cli", GF_LOG_WARNING, "failed to mount glusterfs " diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h index 2c092745a0a..61da39767a2 100644 --- a/libglusterfs/src/common-utils.h +++ b/libglusterfs/src/common-utils.h @@ -106,11 +106,12 @@ enum _gf_boolean */ enum _gf_client_pid { - GF_CLIENT_PID_MAX = 0, - GF_CLIENT_PID_GSYNCD = -1, - GF_CLIENT_PID_HADOOP = -2, - GF_CLIENT_PID_DEFRAG = -3, - GF_CLIENT_PID_NO_ROOT_SQUASH = -4, + GF_CLIENT_PID_MAX = 0, + GF_CLIENT_PID_GSYNCD = -1, + GF_CLIENT_PID_HADOOP = -2, + GF_CLIENT_PID_DEFRAG = -3, + GF_CLIENT_PID_NO_ROOT_SQUASH = -4, + GF_CLIENT_PID_QUOTA_MOUNT = -5, }; typedef enum _gf_boolean gf_boolean_t; diff --git a/tests/bugs/bug-1104692.t b/tests/bugs/bug-1104692.t new file mode 100755 index 00000000000..11dcc546410 --- /dev/null +++ b/tests/bugs/bug-1104692.t @@ -0,0 +1,31 @@ +#!/bin/bash +. $(dirname $0)/../include.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd + +TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}0 $H0:$B0/${V0}1 $H0:$B0/${V0}2 $H0:$B0/${V0}3 +TEST $CLI volume start $V0 + +TEST glusterfs -s $H0 --volfile-id $V0 $M0; +TEST mkdir -p $M0/limit_one/limit_two/limit_three $M0/limit_four \ + $M0/limit_one/limit_five + +TEST $CLI volume set $V0 server.root-squash on +TEST $CLI volume quota $V0 enable + +TEST $CLI volume quota $V0 limit-usage / 1GB +TEST $CLI volume quota $V0 limit-usage /limit_one 1GB +TEST $CLI volume quota $V0 limit-usage /limit_one/limit_two 1GB +TEST $CLI volume quota $V0 limit-usage /limit_one/limit_two/limit_three 1GB +TEST $CLI volume quota $V0 limit-usage /limit_four 1GB +TEST $CLI volume quota $V0 limit-usage /limit_one/limit_five 1GB + +#Cleanup +TEST umount $M0 +TEST $CLI volume stop $V0 +TEST $CLI volume delete $V0 + +cleanup; diff --git a/xlators/protocol/server/src/server-helpers.c b/xlators/protocol/server/src/server-helpers.c index 9dcb55ce3aa..ebeaf90c4a7 100644 --- a/xlators/protocol/server/src/server-helpers.c +++ b/xlators/protocol/server/src/server-helpers.c @@ -467,7 +467,8 @@ get_frame_from_request (rpcsvc_request_t *req) if (client->auth.username && req->pid != GF_CLIENT_PID_NO_ROOT_SQUASH && req->pid != GF_CLIENT_PID_GSYNCD && - req->pid != GF_CLIENT_PID_DEFRAG) + req->pid != GF_CLIENT_PID_DEFRAG && + req->pid != GF_CLIENT_PID_QUOTA_MOUNT) RPC_AUTH_ROOT_SQUASH (req); /* For nfs clients the server processes will be running |