Fix bug 5761 "open of mangled directory name results in 'is a stream name'"
authorJeremy Allison <jra@samba.org>
Mon, 15 Sep 2008 21:13:23 +0000 (14:13 -0700)
committerKarolin Seeger <kseeger@samba.org>
Tue, 16 Sep 2008 07:19:32 +0000 (09:19 +0200)
reported by Regan Heath <Regan.Heath@BridgeHeadSoftware.com>.
Jeremy.
(cherry picked from commit 1b839eb9e4a6312e638d1856d1225b170525da7e)

source/smbd/open.c

index ea10cdc57995e8a807f6ff5586e445146fb2c57a..afe8d5e9b3a23e481658664dddab20804c3089b8 100644 (file)
@@ -1854,7 +1854,8 @@ NTSTATUS open_file_ntcreate(connection_struct *conn,
 
        /* Handle strange delete on close create semantics. */
        if ((create_options & FILE_DELETE_ON_CLOSE)
-           && (is_ntfs_stream_name(fname)
+           && (((conn->fs_capabilities & FILE_NAMED_STREAMS)
+                       && is_ntfs_stream_name(fname))
                || can_set_initial_delete_on_close(lck))) {
                status = can_set_delete_on_close(fsp, True, new_dos_attributes);
 
@@ -2118,7 +2119,9 @@ NTSTATUS open_directory(connection_struct *conn,
                 (unsigned int)create_disposition,
                 (unsigned int)file_attributes));
 
-       if (!(file_attributes & FILE_FLAG_POSIX_SEMANTICS) && is_ntfs_stream_name(fname)) {
+       if (!(file_attributes & FILE_FLAG_POSIX_SEMANTICS) &&
+                       (conn->fs_capabilities & FILE_NAMED_STREAMS) &&
+                       is_ntfs_stream_name(fname)) {
                DEBUG(2, ("open_directory: %s is a stream name!\n", fname));
                return NT_STATUS_NOT_A_DIRECTORY;
        }
@@ -2961,7 +2964,8 @@ NTSTATUS create_file(connection_struct *conn,
                         * Check to see if this is a mac fork of some kind.
                         */
 
-                       if (is_ntfs_stream_name(fname)) {
+                       if ((conn->fs_capabilities & FILE_NAMED_STREAMS) &&
+                                       is_ntfs_stream_name(fname)) {
                                status = NT_STATUS_OBJECT_PATH_NOT_FOUND;
                                goto fail;
                        }