The Samba-Bugzilla – Attachment 7002 Details for
Bug 8419
Make VFS op "streaminfo" stackable
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
git-am fix I pushed to master
0001-Add-support-for-VFS-op-streaminfo-chaining-in-all-re.patch (text/plain), 8.72 KB, created by
Jeremy Allison
on 2011-10-14 18:33:47 UTC
(
hide
)
Description:
git-am fix I pushed to master
Filename:
MIME Type:
Creator:
Jeremy Allison
Created:
2011-10-14 18:33:47 UTC
Size:
8.72 KB
patch
obsolete
>From 54b5bc850c314e19a5eb406ede105c86360d46ed Mon Sep 17 00:00:00 2001 >From: Frank Lahm <franklahm@googlemail.com> >Date: Thu, 13 Oct 2011 15:41:53 -0700 >Subject: [PATCH] Add support for VFS op streaminfo chaining in all relevant VFS modules. > >Autobuild-User: Jeremy Allison <jra@samba.org> >Autobuild-Date: Fri Oct 14 03:26:06 CEST 2011 on sn-devel-104 >(cherry picked from commit 7a0b5d6fc51d5d212529e82e5ed8e21516bfbe27) >--- > source3/modules/onefs_streams.c | 17 +++-------------- > source3/modules/vfs_default.c | 25 ++++++++++--------------- > source3/modules/vfs_streams_depot.c | 18 +++--------------- > source3/modules/vfs_streams_xattr.c | 18 ++++-------------- > source3/smbd/close.c | 4 ++-- > source3/smbd/filename.c | 2 +- > source3/smbd/nttrans.c | 4 ++-- > source3/smbd/open.c | 6 +++--- > source3/smbd/trans2.c | 4 ++-- > 9 files changed, 30 insertions(+), 68 deletions(-) > >diff --git a/source3/modules/onefs_streams.c b/source3/modules/onefs_streams.c >index 85ab256..ac88573 100644 >--- a/source3/modules/onefs_streams.c >+++ b/source3/modules/onefs_streams.c >@@ -736,25 +736,14 @@ NTSTATUS onefs_streaminfo(vfs_handle_struct *handle, > return map_nt_error_from_unix(errno); > } > >- state.streams = NULL; >- state.num_streams = 0; >+ state.streams = *pstreams; >+ state.num_streams = *pnum_streams; > > if (lp_parm_bool(SNUM(handle->conn), PARM_ONEFS_TYPE, > PARM_IGNORE_STREAMS, PARM_IGNORE_STREAMS_DEFAULT)) { > goto out; > } > >- /* Add the default stream. */ >- if (S_ISREG(sbuf.st_ex_mode)) { >- if (!add_one_stream(mem_ctx, >- &state.num_streams, &state.streams, >- "", sbuf.st_ex_size, >- SMB_VFS_GET_ALLOC_SIZE(handle->conn, fsp, >- &sbuf))) { >- return NT_STATUS_NO_MEMORY; >- } >- } >- > state.mem_ctx = mem_ctx; > state.handle = handle; > state.status = NT_STATUS_OK; >@@ -778,5 +767,5 @@ NTSTATUS onefs_streaminfo(vfs_handle_struct *handle, > out: > *num_streams = state.num_streams; > *streams = state.streams; >- return NT_STATUS_OK; >+ return SMB_VFS_NEXT_STREAMINFO(handle, fsp, fname, mem_ctx, pnum_streams, pstreams); > } >diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c >index 4d06a10..27e9b9b 100644 >--- a/source3/modules/vfs_default.c >+++ b/source3/modules/vfs_default.c >@@ -1182,8 +1182,7 @@ static NTSTATUS vfswrap_streaminfo(vfs_handle_struct *handle, > struct stream_struct **pstreams) > { > SMB_STRUCT_STAT sbuf; >- unsigned int num_streams = 0; >- struct stream_struct *streams = NULL; >+ struct stream_struct *tmp_streams = NULL; > int ret; > > if ((fsp != NULL) && (fsp->is_directory)) { >@@ -1218,25 +1217,21 @@ static NTSTATUS vfswrap_streaminfo(vfs_handle_struct *handle, > goto done; > } > >- streams = talloc(mem_ctx, struct stream_struct); >- >- if (streams == NULL) { >+ tmp_streams = talloc_realloc(mem_ctx, *pstreams, struct stream_struct, >+ (*pnum_streams) + 1); >+ if (tmp_streams == NULL) { > return NT_STATUS_NO_MEMORY; > } >- >- streams->size = sbuf.st_ex_size; >- streams->alloc_size = SMB_VFS_GET_ALLOC_SIZE(handle->conn, fsp, &sbuf); >- >- streams->name = talloc_strdup(streams, "::$DATA"); >- if (streams->name == NULL) { >- TALLOC_FREE(streams); >+ tmp_streams[*pnum_streams].name = talloc_strdup(tmp_streams, "::$DATA"); >+ if (tmp_streams[*pnum_streams].name == NULL) { > return NT_STATUS_NO_MEMORY; > } >+ tmp_streams[*pnum_streams].size = sbuf.st_ex_size; >+ tmp_streams[*pnum_streams].alloc_size = SMB_VFS_GET_ALLOC_SIZE(handle->conn, fsp, &sbuf); > >- num_streams = 1; >+ *pnum_streams += 1; >+ *pstreams = tmp_streams; > done: >- *pnum_streams = num_streams; >- *pstreams = streams; > return NT_STATUS_OK; > } > >diff --git a/source3/modules/vfs_streams_depot.c b/source3/modules/vfs_streams_depot.c >index 01851cd..708a90b 100644 >--- a/source3/modules/vfs_streams_depot.c >+++ b/source3/modules/vfs_streams_depot.c >@@ -827,20 +827,8 @@ static NTSTATUS streams_depot_streaminfo(vfs_handle_struct *handle, > goto out; > } > >- state.streams = NULL; >- state.num_streams = 0; >- >- if (!S_ISDIR(smb_fname_base->st.st_ex_mode)) { >- if (!add_one_stream(mem_ctx, >- &state.num_streams, &state.streams, >- "::$DATA", smb_fname_base->st.st_ex_size, >- SMB_VFS_GET_ALLOC_SIZE(handle->conn, fsp, >- &smb_fname_base->st))) { >- status = NT_STATUS_NO_MEMORY; >- goto out; >- } >- } >- >+ state.streams = *pstreams; >+ state.num_streams = *pnum_streams; > state.mem_ctx = mem_ctx; > state.handle = handle; > state.status = NT_STATUS_OK; >@@ -861,7 +849,7 @@ static NTSTATUS streams_depot_streaminfo(vfs_handle_struct *handle, > > *pnum_streams = state.num_streams; > *pstreams = state.streams; >- status = NT_STATUS_OK; >+ status = SMB_VFS_NEXT_STREAMINFO(handle, fsp, fname, mem_ctx, pnum_streams, pstreams); > > out: > TALLOC_FREE(smb_fname_base); >diff --git a/source3/modules/vfs_streams_xattr.c b/source3/modules/vfs_streams_xattr.c >index 34e01b0..08d8d14 100644 >--- a/source3/modules/vfs_streams_xattr.c >+++ b/source3/modules/vfs_streams_xattr.c >@@ -810,19 +810,8 @@ static NTSTATUS streams_xattr_streaminfo(vfs_handle_struct *handle, > return map_nt_error_from_unix(errno); > } > >- state.streams = NULL; >- state.num_streams = 0; >- >- if (!S_ISDIR(sbuf.st_ex_mode)) { >- if (!add_one_stream(mem_ctx, >- &state.num_streams, &state.streams, >- "::$DATA", sbuf.st_ex_size, >- SMB_VFS_GET_ALLOC_SIZE(handle->conn, fsp, >- &sbuf))) { >- return NT_STATUS_NO_MEMORY; >- } >- } >- >+ state.streams = *pstreams; >+ state.num_streams = *pnum_streams; > state.mem_ctx = mem_ctx; > state.handle = handle; > state.status = NT_STATUS_OK; >@@ -842,7 +831,8 @@ static NTSTATUS streams_xattr_streaminfo(vfs_handle_struct *handle, > > *pnum_streams = state.num_streams; > *pstreams = state.streams; >- return NT_STATUS_OK; >+ >+ return SMB_VFS_NEXT_STREAMINFO(handle, fsp, fname, mem_ctx, pnum_streams, pstreams); > } > > static uint32_t streams_xattr_fs_capabilities(struct vfs_handle_struct *handle, >diff --git a/source3/smbd/close.c b/source3/smbd/close.c >index aeed4e3..603cfff 100644 >--- a/source3/smbd/close.c >+++ b/source3/smbd/close.c >@@ -201,9 +201,9 @@ static void notify_deferred_opens(struct messaging_context *msg_ctx, > > NTSTATUS delete_all_streams(connection_struct *conn, const char *fname) > { >- struct stream_struct *stream_info; >+ struct stream_struct *stream_info = NULL; > int i; >- unsigned int num_streams; >+ unsigned int num_streams = 0; > TALLOC_CTX *frame = talloc_stackframe(); > NTSTATUS status; > >diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c >index 08bc79d..ec9ca20 100644 >--- a/source3/smbd/filename.c >+++ b/source3/smbd/filename.c >@@ -1170,7 +1170,7 @@ static NTSTATUS build_stream_path(TALLOC_CTX *mem_ctx, > struct smb_filename *smb_fname) > { > NTSTATUS status; >- unsigned int i, num_streams; >+ unsigned int i, num_streams = 0; > struct stream_struct *streams = NULL; > > if (SMB_VFS_STAT(conn, smb_fname) == 0) { >diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c >index f21b62b..8f5a4c5 100644 >--- a/source3/smbd/nttrans.c >+++ b/source3/smbd/nttrans.c >@@ -693,7 +693,7 @@ void reply_ntcreate_and_X(struct smb_request *req) > if (flags & EXTENDED_RESPONSE_REQUIRED) { > uint16_t file_status = (NO_EAS|NO_SUBSTREAMS|NO_REPARSETAG); > size_t num_names = 0; >- unsigned int num_streams; >+ unsigned int num_streams = 0; > struct stream_struct *streams = NULL; > > /* Do we have any EA's ? */ >@@ -1274,7 +1274,7 @@ static void call_nt_transact_create(connection_struct *conn, > if (flags & EXTENDED_RESPONSE_REQUIRED) { > uint16_t file_status = (NO_EAS|NO_SUBSTREAMS|NO_REPARSETAG); > size_t num_names = 0; >- unsigned int num_streams; >+ unsigned int num_streams = 0; > struct stream_struct *streams = NULL; > > /* Do we have any EA's ? */ >diff --git a/source3/smbd/open.c b/source3/smbd/open.c >index e30d36e..0813496 100644 >--- a/source3/smbd/open.c >+++ b/source3/smbd/open.c >@@ -2967,10 +2967,10 @@ void msg_file_was_renamed(struct messaging_context *msg, > NTSTATUS open_streams_for_delete(connection_struct *conn, > const char *fname) > { >- struct stream_struct *stream_info; >- files_struct **streams; >+ struct stream_struct *stream_info = NULL; >+ files_struct **streams = NULL; > int i; >- unsigned int num_streams; >+ unsigned int num_streams = 0; > TALLOC_CTX *frame = talloc_stackframe(); > NTSTATUS status; > >diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c >index 114f688..ffa7309 100644 >--- a/source3/smbd/trans2.c >+++ b/source3/smbd/trans2.c >@@ -4673,8 +4673,8 @@ NTSTATUS smbd_do_qfilepathinfo(connection_struct *conn, > */ > case SMB_QUERY_FILE_STREAM_INFO: > case SMB_FILE_STREAM_INFORMATION: { >- unsigned int num_streams; >- struct stream_struct *streams; >+ unsigned int num_streams = 0; >+ struct stream_struct *streams = NULL; > > DEBUG(10,("smbd_do_qfilepathinfo: " > "SMB_FILE_STREAM_INFORMATION\n")); >-- >1.7.3.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 8419
:
6824
|
6825
|
6838
|
6843
|
6924
|
7002
|
7006
|
7011