summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiels de Vos <ndevos@redhat.com>2015-07-17 10:39:02 +0200
committerNiels de Vos <ndevos@redhat.com>2015-07-23 05:59:20 -0700
commit4703fc724a5b5070fa0fce5204015faaf38858f1 (patch)
tree6ef4736ae90651ce8eeca1fa19313c27267f1b15
parent191725abf5754e4e883ed945a5560418a9b6b23d (diff)
nfs: a unix-domain-socket should not be created as fifo
Cherry picked from commit 381afd4f480533f212e1f62a0ccfd9dcf7248e17: > Change-Id: Ic6a23165df1703b330636a059967c3c674dbde57 > BUG: 1235231 > Signed-off-by: Niels de Vos <ndevos@redhat.com> > Reviewed-on: http://review.gluster.org/11355 > Tested-by: NetBSD Build System <jenkins@build.gluster.org> > Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com> > Tested-by: Gluster Build System <jenkins@build.gluster.com> Change-Id: Ic6a23165df1703b330636a059967c3c674dbde57 BUG: 1244118 Signed-off-by: Niels de Vos <ndevos@redhat.com> Reviewed-on: http://review.gluster.org/11710 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
-rwxr-xr-xtests/bugs/nfs/socket-as-fifo.py33
-rw-r--r--tests/bugs/nfs/socket-as-fifo.t22
-rw-r--r--xlators/nfs/server/src/nfs3.c15
3 files changed, 63 insertions, 7 deletions
diff --git a/tests/bugs/nfs/socket-as-fifo.py b/tests/bugs/nfs/socket-as-fifo.py
new file mode 100755
index 0000000..1fce5b9
--- /dev/null
+++ b/tests/bugs/nfs/socket-as-fifo.py
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+#
+# Create a unix domain socket and test if it is a socket (and not a fifo/pipe).
+#
+# Author: Niels de Vos <ndevos@redhat.com>
+#
+
+import os
+import stat
+import sys
+import socket
+
+ret = 1
+
+if len(sys.argv) != 2:
+ print 'Usage: %s <socket>' % (sys.argv[0])
+ sys.exit(ret)
+
+path = sys.argv[1]
+
+sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+sock.bind(path)
+
+stbuf = os.stat(path)
+mode = stbuf.st_mode
+
+if stat.S_ISSOCK(mode):
+ ret = 0
+
+sock.close()
+os.unlink(path)
+
+sys.exit(ret)
diff --git a/tests/bugs/nfs/socket-as-fifo.t b/tests/bugs/nfs/socket-as-fifo.t
new file mode 100644
index 0000000..94a800a
--- /dev/null
+++ b/tests/bugs/nfs/socket-as-fifo.t
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+. $(dirname $0)/../../include.rc
+. $(dirname $0)/../../volume.rc
+. $(dirname $0)/../../nfs.rc
+
+cleanup;
+
+TEST glusterd
+TEST pidof glusterd
+
+TEST $CLI volume create $V0 $H0:$B0/$V0
+TEST $CLI volume start $V0
+EXPECT_WITHIN $NFS_EXPORT_TIMEOUT "1" is_nfs_export_available;
+TEST mount_nfs $H0:/$V0 $N0 nolock
+
+# this is the actual test
+TEST $(dirname $0)/socket-as-fifo.py $N0/not-a-fifo.socket
+
+TEST umount_nfs $N0
+
+cleanup
diff --git a/xlators/nfs/server/src/nfs3.c b/xlators/nfs/server/src/nfs3.c
index 0fea135..22f2345 100644
--- a/xlators/nfs/server/src/nfs3.c
+++ b/xlators/nfs/server/src/nfs3.c
@@ -3030,7 +3030,7 @@ rpcerr:
}
-int
+static int
nfs3_mknod_reply (rpcsvc_request_t *req, nfsstat3 stat, struct nfs3_fh *fh,
struct iatt *buf, struct iatt *preparent,
struct iatt *postparent)
@@ -3126,7 +3126,7 @@ nfs3err:
}
-int
+static int
nfs3_mknod_device (nfs3_call_state_t *cs)
{
int ret = -EFAULT;
@@ -3157,12 +3157,11 @@ nfs3_mknod_device (nfs3_call_state_t *cs)
}
-int
-nfs3_mknod_fifo (nfs3_call_state_t *cs)
+static int
+nfs3_mknod_fifo (nfs3_call_state_t *cs, mode_t mode)
{
int ret = -EFAULT;
nfs_user_t nfu = {0, };
- mode_t mode = S_IFIFO;
if (!cs)
return ret;
@@ -3181,7 +3180,7 @@ nfs3_mknod_fifo (nfs3_call_state_t *cs)
}
-int
+static int
nfs3_mknod_resume (void *carg)
{
nfsstat3 stat = NFS3ERR_SERVERFAULT;
@@ -3200,8 +3199,10 @@ nfs3_mknod_resume (void *carg)
ret = nfs3_mknod_device (cs);
break;
case NF3SOCK:
+ ret = nfs3_mknod_fifo (cs, S_IFSOCK);
+ break;
case NF3FIFO:
- ret = nfs3_mknod_fifo (cs);
+ ret = nfs3_mknod_fifo (cs, S_IFIFO);
break;
default:
ret = -EBADF;