s3:streams_depot: map 'file::$DATA' to just 'file'
authorStefan Metzmacher <metze@samba.org>
Mon, 1 Dec 2008 21:59:00 +0000 (13:59 -0800)
committerJeremy Allison <jra@samba.org>
Mon, 1 Dec 2008 21:59:00 +0000 (13:59 -0800)
metze

source/modules/vfs_streams_depot.c

index e7ecedaaed2b674fea066392f13f7c9c3b44aaff..ccb0a2ec89b3d74d3719a029039a2308908e8d19 100644 (file)
@@ -270,6 +270,11 @@ static char *stream_name(vfs_handle_struct *handle, const char *fname,
                goto fail;
        }
 
+       /* if it's the ::$DATA stream just return the base file name */
+       if (!sname) {
+               return base;
+       }
+
        dirname = stream_dir(handle, base, NULL, create_dir);
 
        if (dirname == NULL) {
@@ -409,6 +414,7 @@ static int streams_depot_open(vfs_handle_struct *handle,  const char *fname,
 {
        TALLOC_CTX *frame;
        char *base = NULL;
+       char *sname = NULL;
        SMB_STRUCT_STAT base_sbuf;
        char *stream_fname;
        int ret = -1;
@@ -420,11 +426,16 @@ static int streams_depot_open(vfs_handle_struct *handle,  const char *fname,
        frame = talloc_stackframe();
 
        if (!NT_STATUS_IS_OK(split_ntfs_stream_name(talloc_tos(), fname,
-                                                   &base, NULL))) {
+                                                   &base, &sname))) {
                errno = ENOMEM;
                goto done;
        }
 
+       if (!sname) {
+               ret = SMB_VFS_NEXT_OPEN(handle, base, fsp, flags, mode);
+               goto done;
+       }
+
        ret = SMB_VFS_NEXT_STAT(handle, base, &base_sbuf);
 
        if (ret == -1) {