s3:streams_depot: map 'file::$DATA' to just 'file'
authorStefan Metzmacher <metze@samba.org>
Wed, 26 Nov 2008 11:39:07 +0000 (12:39 +0100)
committerStefan Metzmacher <metze@samba.org>
Wed, 26 Nov 2008 22:02:24 +0000 (23:02 +0100)
metze

source/modules/vfs_streams_depot.c

index c530d2adf064f2367fe7785a9615f705bb4758ee..529cf1eb7fc831fee517fc760b2720952b1518a5 100644 (file)
@@ -271,6 +271,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) {
@@ -410,6 +415,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;
@@ -421,11 +427,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) {