Revert c76e4791d3ae4f180fba209c29bd3774c00858cf - "Fix the logic bug that caused...
authorJeremy Allison <jra@samba.org>
Sat, 22 Nov 2008 06:44:23 +0000 (22:44 -0800)
committerJeremy Allison <jra@samba.org>
Sat, 22 Nov 2008 06:44:23 +0000 (22:44 -0800)
Jeremy.

source/modules/vfs_streams_depot.c
source/modules/vfs_streams_xattr.c
source/smbd/open.c

index e7ecedaaed2b674fea066392f13f7c9c3b44aaff..c530d2adf064f2367fe7785a9615f705bb4758ee 100644 (file)
@@ -116,6 +116,7 @@ static char *stream_dir(vfs_handle_struct *handle, const char *base_path,
        char *id_hex;
        struct file_id id;
        uint8 id_buf[16];
+       const char *rootdir;
 
        tmp = talloc_asprintf(talloc_tos(), "%s/.streams", handle->conn->connectpath);
 
@@ -124,7 +125,7 @@ static char *stream_dir(vfs_handle_struct *handle, const char *base_path,
                goto fail;
        }
 
-       const char *rootdir = lp_parm_const_string(
+       rootdir = lp_parm_const_string(
                SNUM(handle->conn), "streams_depot", "directory",
                tmp);
        TALLOC_FREE(tmp);
index 3555654dace12cbb75c0bb2fef031609b5283c03..2ea53362953276ceea389562a208fdd6272f9240 100644 (file)
@@ -102,7 +102,7 @@ static int streams_xattr_fstat(vfs_handle_struct *handle, files_struct *fsp,
                return -1;
        }
 
-       sbuf->st_size = get_xattr_size(handle->conn, fsp,
+       sbuf->st_size = get_xattr_size(handle->conn, fsp->base_fsp,
                                        io->base, io->xattr_name);
        if (sbuf->st_size == -1) {
                return -1;
@@ -249,29 +249,29 @@ static int streams_xattr_open(vfs_handle_struct *handle,  const char *fname,
        /*
         * We use baseflags to turn off nasty side-effects when opening the
         * underlying file.
-        */
-       baseflags = flags;
-       baseflags &= ~O_TRUNC;
-       baseflags &= ~O_EXCL;
-       baseflags &= ~O_CREAT;
-
-       hostfd = SMB_VFS_OPEN(handle->conn, base, fsp, baseflags, mode);
-
-       /* It is legit to open a stream on a directory, but the base
-        * fd has to be read-only.
-        */
-       if ((hostfd == -1) && (errno == EISDIR)) {
-               baseflags &= ~O_ACCMODE;
-               baseflags |= O_RDONLY;
-               hostfd = SMB_VFS_OPEN(handle->conn, fname, fsp, baseflags,
-                               mode);
-       }
+         */
+        baseflags = flags;
+        baseflags &= ~O_TRUNC;
+        baseflags &= ~O_EXCL;
+        baseflags &= ~O_CREAT;
+
+        hostfd = SMB_VFS_OPEN(handle->conn, base, fsp, baseflags, mode);
+
+        /* It is legit to open a stream on a directory, but the base
+         * fd has to be read-only.
+         */
+        if ((hostfd == -1) && (errno == EISDIR)) {
+                baseflags &= ~O_ACCMODE;
+                baseflags |= O_RDONLY;
+                hostfd = SMB_VFS_OPEN(handle->conn, fname, fsp, baseflags,
+                                     mode);
+        }
 
-       if (hostfd == -1) {
+        if (hostfd == -1) {
                goto fail;
-       }
+        }
 
-       status = get_ea_value(talloc_tos(), handle->conn, fsp, base,
+       status = get_ea_value(talloc_tos(), handle->conn, NULL, base,
                              xattr_name, &ea);
 
        DEBUG(10, ("get_ea_value returned %s\n", nt_errstr(status)));
@@ -303,9 +303,9 @@ static int streams_xattr_open(vfs_handle_struct *handle,  const char *fname,
                        DEBUG(10, ("creating attribute %s on file %s\n",
                                   xattr_name, base));
 
-                       if (fsp->fh->fd != -1) {
+                       if (fsp->base_fsp->fh->fd != -1) {
                                if (SMB_VFS_FSETXATTR(
-                                       fsp, xattr_name,
+                                       fsp->base_fsp, xattr_name,
                                        &null, sizeof(null),
                                        flags & O_EXCL ? XATTR_CREATE : 0) == -1) {
                                        goto fail;
@@ -323,9 +323,9 @@ static int streams_xattr_open(vfs_handle_struct *handle,  const char *fname,
 
        if (flags & O_TRUNC) {
                char null = '\0';
-               if (fsp->fh->fd != -1) {
+               if (fsp->base_fsp->fh->fd != -1) {
                        if (SMB_VFS_FSETXATTR(
-                                       fsp, xattr_name,
+                                       fsp->base_fsp, xattr_name,
                                        &null, sizeof(null),
                                        flags & O_EXCL ? XATTR_CREATE : 0) == -1) {
                                goto fail;
@@ -600,7 +600,7 @@ static ssize_t streams_xattr_pwrite(vfs_handle_struct *handle,
                return SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);
        }
 
-       status = get_ea_value(talloc_tos(), handle->conn, fsp,
+       status = get_ea_value(talloc_tos(), handle->conn, fsp->base_fsp,
                              sio->base, sio->xattr_name, &ea);
        if (!NT_STATUS_IS_OK(status)) {
                return -1;
@@ -624,12 +624,12 @@ static ssize_t streams_xattr_pwrite(vfs_handle_struct *handle,
 
         memcpy(ea.value.data + offset, data, n);
 
-       if (fsp->fh->fd != -1) {
-               ret = SMB_VFS_FSETXATTR(fsp,
+       if (fsp->base_fsp->fh->fd != -1) {
+               ret = SMB_VFS_FSETXATTR(fsp->base_fsp,
                                sio->xattr_name,
                                ea.value.data, ea.value.length, 0);
        } else {
-               ret = SMB_VFS_SETXATTR(fsp->conn, sio->base,
+               ret = SMB_VFS_SETXATTR(fsp->conn, fsp->base_fsp->fsp_name,
                                sio->xattr_name,
                                ea.value.data, ea.value.length, 0);
        }
@@ -656,7 +656,7 @@ static ssize_t streams_xattr_pread(vfs_handle_struct *handle,
                return SMB_VFS_NEXT_PREAD(handle, fsp, data, n, offset);
        }
 
-       status = get_ea_value(talloc_tos(), handle->conn, fsp,
+       status = get_ea_value(talloc_tos(), handle->conn, fsp->base_fsp,
                              sio->base, sio->xattr_name, &ea);
        if (!NT_STATUS_IS_OK(status)) {
                return -1;
@@ -696,7 +696,7 @@ static int streams_xattr_ftruncate(struct vfs_handle_struct *handle,
                return SMB_VFS_NEXT_FTRUNCATE(handle, fsp, offset);
        }
 
-       status = get_ea_value(talloc_tos(), handle->conn, fsp,
+       status = get_ea_value(talloc_tos(), handle->conn, fsp->base_fsp,
                              sio->base, sio->xattr_name, &ea);
        if (!NT_STATUS_IS_OK(status)) {
                return -1;
@@ -721,12 +721,12 @@ static int streams_xattr_ftruncate(struct vfs_handle_struct *handle,
        ea.value.length = offset + 1;
        ea.value.data[offset] = 0;
 
-       if (fsp->fh->fd != -1) {
-               ret = SMB_VFS_FSETXATTR(fsp,
+       if (fsp->base_fsp->fh->fd != -1) {
+               ret = SMB_VFS_FSETXATTR(fsp->base_fsp,
                                sio->xattr_name,
                                ea.value.data, ea.value.length, 0);
        } else {
-               ret = SMB_VFS_SETXATTR(fsp->conn, sio->base,
+               ret = SMB_VFS_SETXATTR(fsp->conn, fsp->base_fsp->fsp_name,
                                sio->xattr_name,
                                ea.value.data, ea.value.length, 0);
        }
index cdd55bd17fe587045c59a438a9f7f13632e3db91..5c9fcf8864ff1b96e94d092c2d16feef361a56a7 100644 (file)
@@ -2729,10 +2729,7 @@ NTSTATUS create_file_unixpath(connection_struct *conn,
                DEBUG(10, ("Recursing into create_file_unixpath for "
                        "base %s\n", base));
 
-               /* This call will break any oplock on the base file,
-                * but will not actually open an underlying fd. */
-
-               status = create_file_unixpath(conn, req, base, 0,
+               status = create_file_unixpath(conn, NULL, base, 0,
                                              FILE_SHARE_READ
                                              | FILE_SHARE_WRITE
                                              | FILE_SHARE_DELETE,