summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVarun Shastry <vshastry@redhat.com>2014-06-04 12:43:18 +0530
committerRaghavendra G <rgowdapp@redhat.com>2014-06-15 23:12:50 -0700
commit47230eb38d96e51d2d5e976eda7ff82c62f6eedd (patch)
tree0a559d3c0edef97a0473f3545e20c67d61c1553e
parentec845d93e74644bbfe27e0b085a38dbd7c02480f (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.c6
-rw-r--r--libglusterfs/src/common-utils.h11
-rwxr-xr-xtests/bugs/bug-1104692.t31
-rw-r--r--xlators/protocol/server/src/server-helpers.c3
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