[SCM] Samba Shared Repository - branch master updated

Ralph Böhme slow at samba.org
Mon Sep 6 09:52:02 UTC 2021


The branch, master has been updated
       via  2f2c53c4f8f s3: smbd: Fix openat_pathref_fsp() to cope with FIFO's in the filesystem.
       via  a54d9ffc87e s3: smbd: Add fifo test for the DISABLE_OPATH case.
      from  6590bb0b77c selftest: Add prefix to new schema attributes to avoid flapping dsdb_schema_attributes

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 2f2c53c4f8f59a497bc33a24e5e0fc15ea076876
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Sep 2 14:40:53 2021 -0700

    s3: smbd: Fix openat_pathref_fsp() to cope with FIFO's in the filesystem.
    
    Remove skip test for the DISABLE_OPATH case.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14816
    RN: Fix pathref open of a filesystem fifo in the DISABLE_OPATH build
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    
    Autobuild-User(master): Ralph Böhme <slow at samba.org>
    Autobuild-Date(master): Mon Sep  6 09:51:54 UTC 2021 on sn-devel-184

commit a54d9ffc87ebe602a0e7c48e35643ed2ff1a00bc
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Sep 2 15:32:27 2021 -0700

    s3: smbd: Add fifo test for the DISABLE_OPATH case.
    
    Currently we hang when trying to list a directory
    containing a fifo when configured with DISABLE_OPATH.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14816
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source3/script/tests/test_fifo.sh | 83 +++++++++++++++++++++++++++++++++++++++
 source3/selftest/tests.py         |  3 ++
 source3/smbd/files.c              |  4 ++
 3 files changed, 90 insertions(+)
 create mode 100755 source3/script/tests/test_fifo.sh


Changeset truncated at 500 lines:

diff --git a/source3/script/tests/test_fifo.sh b/source3/script/tests/test_fifo.sh
new file mode 100755
index 00000000000..11741dcc038
--- /dev/null
+++ b/source3/script/tests/test_fifo.sh
@@ -0,0 +1,83 @@
+#!/bin/sh
+#
+# Check smbclient can list a directory containing a fifo.
+#
+
+if [ $# -lt 7 ]; then
+cat <<EOF
+Usage: $0 SERVER DOMAIN USERNAME PASSWORD PREFIX TARGET_ENV SMBCLIENT
+EOF
+exit 1;
+fi
+
+SERVER=${1}
+DOMAIN=${2}
+USERNAME=${3}
+PASSWORD=${4}
+PREFIX=${5}
+TARGET_ENV=${6}
+SMBCLIENT=${7}
+shift 7
+SMBCLIENT="$VALGRIND ${SMBCLIENT}"
+ADDARGS="$@"
+
+incdir=`dirname $0`/../../../testprogs/blackbox
+. $incdir/subunit.sh
+
+failed=0
+
+# Test that listing a share with a directory containing a fifo succeeds.
+#
+# BUG: https://bugzilla.samba.org/show_bug.cgi?id=14816
+#
+test_fifo()
+{
+    local fifo_dir_path="$PREFIX/$TARGET_ENV/share/fifodir"
+    local fifo_path="$fifo_dir_path/fifo_name"
+
+    local tmpfile=$PREFIX/smbclient.in.$$
+
+    cat > $tmpfile <<EOF
+cd fifodir
+ls
+quit
+EOF
+
+    # Create fifo directory.
+    mkdir -p $fifo_dir_path
+    # Create fifo underneath.
+    mkfifo $fifo_path
+
+    local cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT //$SERVER/$1 -U$USERNAME%$PASSWORD $ADDARGS < $tmpfile 2>&1'
+    eval echo "$cmd"
+    out=`eval $cmd`
+    ret=$?
+
+    # Remove fifo and containing dir.
+    rm $fifo_path
+    rmdir $fifo_dir_path
+    rm -f $tmpfile
+
+    # Check for smbclient error.
+    if [ $ret != 0 ] ; then
+        echo "Failed accessing share containing dir with fifo $ret"
+        echo "$out"
+        return 1
+    fi
+
+    # Check for smbclient timeout (server hung).
+    echo "$out" | grep 'NT_STATUS_'
+    ret=$?
+    if [ $ret -eq 0 ] ; then
+       # Client was disconnected as server timed out.
+       echo "$out"
+       return 1
+    fi
+
+    return 0
+}
+
+testit "list directory containing a fifo" \
+   test_fifo tmp || failed=`expr $failed + 1`
+
+exit $failed
diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py
index 812114c2374..500ddddfc7d 100755
--- a/source3/selftest/tests.py
+++ b/source3/selftest/tests.py
@@ -567,6 +567,9 @@ for env in ["fileserver"]:
                    '-u', '$USERNAME', '-p', '$PASSWORD', '-l', '$LOCAL_PATH/tarmode2',
                    '-d', 'smbclient_tar.SMB3', '-b', smbclient3,
                    '--subunit', '--', configuration, '-mSMB3'])
+    plantestsuite("samba3.blackbox.fifo", env,
+                  [os.path.join(samba3srcdir, "script/tests/test_fifo.sh"),
+                  '$SERVER', '$DOMAIN', 'gooduser', '$PASSWORD', '$PREFIX', env, smbclient3])
 
 for env in ["fileserver:local"]:
     plantestsuite("samba3.blackbox.net_usershare", env, [os.path.join(samba3srcdir, "script/tests/test_net_usershare.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', smbclient3])
diff --git a/source3/smbd/files.c b/source3/smbd/files.c
index 413706fee0c..a2269d8da65 100644
--- a/source3/smbd/files.c
+++ b/source3/smbd/files.c
@@ -503,6 +503,10 @@ NTSTATUS openat_pathref_fsp(const struct files_struct *dirfsp,
 		}
 	}
 
+	if (S_ISFIFO(smb_fname->st.st_ex_mode)) {
+		open_flags |= O_NONBLOCK;
+	}
+
 	status = fd_openat(dirfsp, smb_fname, fsp, open_flags, 0);
 	if (!NT_STATUS_IS_OK(status)) {
 		if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_FOUND) ||


-- 
Samba Shared Repository



More information about the samba-cvs mailing list