r3799: - added the bit for FS_ATTR_NAMED_STREAMS support into qfsinfo filesystem...
authorAndrew Tridgell <tridge@samba.org>
Wed, 17 Nov 2004 06:30:06 +0000 (06:30 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:05:55 +0000 (13:05 -0500)
- pvfs passes the RAW-STREAMS test
(This used to be commit c1a48a7542a52df734b54031f405d574e4c891e3)

source4/include/smb.h
source4/ntvfs/posix/pvfs_fsinfo.c
source4/ntvfs/posix/pvfs_resolve.c
source4/ntvfs/posix/vfs_posix.c
source4/ntvfs/posix/vfs_posix.h
source4/script/tests/test_posix.sh

index 1d13b06e2540f5975c240dbdefc4c7958a2a66a3..c70ab81611c2436d8058646b5e08946c4d01f908 100644 (file)
@@ -611,4 +611,22 @@ enum brl_type {READ_LOCK, WRITE_LOCK, PENDING_READ_LOCK, PENDING_WRITE_LOCK};
 #define STR_LEN_NOTERM 256 /* the length field is the unterminated length */
 
 
+/*
+  filesystem attribute bits
+*/
+#define FS_ATTR_CASE_SENSITIVE_SEARCH             0x00000001
+#define FS_ATTR_CASE_PRESERVED_NAMES              0x00000002
+#define FS_ATTR_UNICODE_ON_DISK                   0x00000004
+#define FS_ATTR_PERSISTANT_ACLS                   0x00000008
+#define FS_ATTR_COMPRESSION                       0x00000010
+#define FS_ATTR_QUOTAS                            0x00000020
+#define FS_ATTR_SPARSE_FILES                      0x00000040
+#define FS_ATTR_REPARSE_POINTS                    0x00000080
+#define FS_ATTR_REMOTE_STORAGE                    0x00000100
+#define FS_ATTR_IS_COMPRESSED                     0x00008000
+#define FS_ATTR_OBJECT_IDS                        0x00010000
+#define FS_ATTR_ENCRYPTION                        0x00020000
+#define FS_ATTR_NAMED_STREAMS                     0x00040000
+
+
 #endif /* _SMB_H */
index 7b2226579a7b77a057790b9ab05229884bbada11..6d92713ac7245a12355238b92c7ad21f71cba834 100644 (file)
@@ -115,9 +115,9 @@ NTSTATUS pvfs_fsinfo(struct ntvfs_module_context *ntvfs,
 
        case RAW_QFS_ATTRIBUTE_INFO:
        case RAW_QFS_ATTRIBUTE_INFORMATION:
-               fs->attribute_info.out.fs_attr = 0;
+               fs->attribute_info.out.fs_attr                   = pvfs->fs_attribs;
                fs->attribute_info.out.max_file_component_length = 255;
-               fs->attribute_info.out.fs_type.s = req->tcon->fs_type;
+               fs->attribute_info.out.fs_type.s                 = req->tcon->fs_type;
                return NT_STATUS_OK;
 
        case RAW_QFS_QUOTA_INFORMATION:
index 302ccdae60f884a9cca5ba5f26c4739894e3ddb5..7329968d6c5270bf7d07e70b90d5b5b3e26886d3 100644 (file)
@@ -458,6 +458,10 @@ NTSTATUS pvfs_resolve_name(struct pvfs_state *pvfs, TALLOC_CTX *mem_ctx,
        (*name)->exists = False;
        (*name)->stream_exists = False;
 
+       if (!(pvfs->fs_attribs & FS_ATTR_NAMED_STREAMS)) {
+               flags &= ~PVFS_RESOLVE_STREAMS;
+       }
+
        /* do the basic conversion to a unix formatted path,
           also checking for allowable characters */
        status = pvfs_unix_path(pvfs, cifs_name, flags, *name);
index 2b4eef04ba3b3165908cd0117c67e92db4de7238..e02bd7aa321e1900514f86a47c61cb68df7e42aa 100644 (file)
@@ -55,6 +55,16 @@ static void pvfs_setup_options(struct pvfs_state *pvfs)
        }
 
        pvfs->share_name = talloc_strdup(pvfs, lp_servicename(snum));
+
+       pvfs->fs_attribs = 
+               FS_ATTR_CASE_SENSITIVE_SEARCH | 
+               FS_ATTR_CASE_PRESERVED_NAMES |
+               FS_ATTR_UNICODE_ON_DISK |
+               FS_ATTR_SPARSE_FILES;
+
+       if (pvfs->flags & PVFS_FLAG_XATTR_ENABLE) {
+               pvfs->fs_attribs |= FS_ATTR_NAMED_STREAMS;
+       }
 }
 
 
index 09d4bce085fb3b28a40793b61bf814aec71633f5..a79c53ca2e1e9084bfbe5c099bc2ffc88a1f684a 100644 (file)
@@ -53,6 +53,9 @@ struct pvfs_state {
 
        /* the sharing violation timeout */
        uint_t sharing_violation_delay;
+
+       /* filesystem attributes (see FS_ATTR_*) */
+       uint32_t fs_attribs;
 };
 
 
index acca13888ec5d3febaa8f7073459ddb9723d40e1..93732d438da8a11043da7fc886d2722c046d23e4 100755 (executable)
@@ -41,10 +41,10 @@ tests="$tests BASE-NTDENY1 BASE-NTDENY2  BASE-RENAME BASE-OPENATTR"
 tests="$tests RAW-QFSINFO RAW-QFILEINFO RAW-SFILEINFO-BUG RAW-SFILEINFO"
 tests="$tests RAW-LOCK RAW-MKDIR RAW-SEEK RAW-CONTEXT RAW-MUX RAW-OPEN RAW-WRITE"
 tests="$tests RAW-UNLINK RAW-READ RAW-CLOSE RAW-IOCTL RAW-SEARCH RAW-CHKPATH RAW-RENAME"
-tests="$tests RAW-EAS"
+tests="$tests RAW-EAS RAW-STREAMS"
 tests="$tests LOCAL-ICONV LOCAL-TALLOC LOCAL-MESSAGING LOCAL-BINDING LOCAL-IDTREE"
 
-soon="BASE-CHARSET RAW-OPLOCK RAW-NOTIFY BASE-DELAYWRITE RAW-STREAMS"
+soon="BASE-CHARSET RAW-OPLOCK RAW-NOTIFY BASE-DELAYWRITE"
 
 for t in $tests; do
     if [ ! -z "$start" -a "$start" != $t ]; then