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 97984721cb..b1b6c8275b 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 2c092745a0..61da39767a 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 0000000000..11dcc54641 --- /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 9dcb55ce3a..ebeaf90c4a 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 |
