diff options
author | Frank Lahm <franklahm@googlemail.com> | 2011-10-17 11:10:29 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2011-10-17 21:39:32 +0200 |
commit | c3bdcab5161107be8155a7913d9cb325383a781d (patch) | |
tree | 94ef514f57d818e5550b585078e275718d3c5e82 | |
parent | b96a9e1c5b23271f42734a8045e4d95a42e8e33f (diff) | |
download | samba-c3bdcab5161107be8155a7913d9cb325383a781d.tar.gz samba-c3bdcab5161107be8155a7913d9cb325383a781d.tar.bz2 samba-c3bdcab5161107be8155a7913d9cb325383a781d.zip |
First part of fix for bug #8419 - Make VFS op "streaminfo" stackable.
Autobuild-User: Jeremy Allison <jra@samba.org>
Autobuild-Date: Mon Oct 17 21:39:32 CEST 2011 on sn-devel-104
-rw-r--r-- | source3/lib/filename_util.c | 2 | ||||
-rw-r--r-- | source3/smbd/close.c | 6 | ||||
-rw-r--r-- | source3/smbd/filename.c | 4 | ||||
-rw-r--r-- | source3/smbd/nttrans.c | 4 | ||||
-rw-r--r-- | source3/smbd/open.c | 6 | ||||
-rw-r--r-- | source3/smbd/proto.h | 6 | ||||
-rw-r--r-- | source3/smbd/trans2.c | 5 | ||||
-rw-r--r-- | source3/smbd/vfs.c | 15 |
8 files changed, 34 insertions, 14 deletions
diff --git a/source3/lib/filename_util.c b/source3/lib/filename_util.c index 2405183d53..85d9fb5a86 100644 --- a/source3/lib/filename_util.c +++ b/source3/lib/filename_util.c @@ -47,7 +47,7 @@ NTSTATUS get_full_smb_filename(TALLOC_CTX *ctx, /** * There are actually legitimate callers of this such as functions that - * enumerate streams using the SMB_VFS_STREAMINFO interface and then want to + * enumerate streams using the vfs_streaminfo interface and then want to * operate on each stream. */ NTSTATUS create_synthetic_smb_fname(TALLOC_CTX *ctx, const char *base_name, diff --git a/source3/smbd/close.c b/source3/smbd/close.c index 33e497c598..b736432a82 100644 --- a/source3/smbd/close.c +++ b/source3/smbd/close.c @@ -212,8 +212,8 @@ NTSTATUS delete_all_streams(connection_struct *conn, const char *fname) TALLOC_CTX *frame = talloc_stackframe(); NTSTATUS status; - status = SMB_VFS_STREAMINFO(conn, NULL, fname, talloc_tos(), - &num_streams, &stream_info); + status = vfs_streaminfo(conn, NULL, fname, talloc_tos(), + &num_streams, &stream_info); if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED)) { DEBUG(10, ("no streams around\n")); @@ -222,7 +222,7 @@ NTSTATUS delete_all_streams(connection_struct *conn, const char *fname) } if (!NT_STATUS_IS_OK(status)) { - DEBUG(10, ("SMB_VFS_STREAMINFO failed: %s\n", + DEBUG(10, ("vfs_streaminfo failed: %s\n", nt_errstr(status))); goto fail; } diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c index 7fe7cc8063..b7c7831008 100644 --- a/source3/smbd/filename.c +++ b/source3/smbd/filename.c @@ -1184,8 +1184,8 @@ static NTSTATUS build_stream_path(TALLOC_CTX *mem_ctx, } /* Fall back to a case-insensitive scan of all streams on the file. */ - status = SMB_VFS_STREAMINFO(conn, NULL, smb_fname->base_name, mem_ctx, - &num_streams, &streams); + status = vfs_streaminfo(conn, NULL, smb_fname->base_name, mem_ctx, + &num_streams, &streams); if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) { SET_STAT_INVALID(smb_fname->st); diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index 2d6fa264cc..8e78d3cd9c 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -702,7 +702,7 @@ void reply_ntcreate_and_X(struct smb_request *req) if (NT_STATUS_IS_OK(status) && num_names) { file_status &= ~NO_EAS; } - status = SMB_VFS_STREAMINFO(conn, NULL, smb_fname->base_name, ctx, + status = vfs_streaminfo(conn, NULL, smb_fname->base_name, ctx, &num_streams, &streams); /* There is always one stream, ::$DATA. */ if (NT_STATUS_IS_OK(status) && num_streams > 1) { @@ -1283,7 +1283,7 @@ static void call_nt_transact_create(connection_struct *conn, if (NT_STATUS_IS_OK(status) && num_names) { file_status &= ~NO_EAS; } - status = SMB_VFS_STREAMINFO(conn, NULL, smb_fname->base_name, ctx, + status = vfs_streaminfo(conn, NULL, smb_fname->base_name, ctx, &num_streams, &streams); /* There is always one stream, ::$DATA. */ if (NT_STATUS_IS_OK(status) && num_streams > 1) { diff --git a/source3/smbd/open.c b/source3/smbd/open.c index b897c8aa25..f3fccd01d2 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -2972,8 +2972,8 @@ NTSTATUS open_streams_for_delete(connection_struct *conn, TALLOC_CTX *frame = talloc_stackframe(); NTSTATUS status; - status = SMB_VFS_STREAMINFO(conn, NULL, fname, talloc_tos(), - &num_streams, &stream_info); + status = vfs_streaminfo(conn, NULL, fname, talloc_tos(), + &num_streams, &stream_info); if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED) || NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) { @@ -2983,7 +2983,7 @@ NTSTATUS open_streams_for_delete(connection_struct *conn, } if (!NT_STATUS_IS_OK(status)) { - DEBUG(10, ("SMB_VFS_STREAMINFO failed: %s\n", + DEBUG(10, ("vfs_streaminfo failed: %s\n", nt_errstr(status))); goto fail; } diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index e2b02ecef4..49bb911cbc 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -1179,6 +1179,12 @@ int vfs_lstat_smb_fname(struct connection_struct *conn, const char *fname, SMB_STRUCT_STAT *psbuf); NTSTATUS vfs_stat_fsp(files_struct *fsp); NTSTATUS vfs_chown_fsp(files_struct *fsp, uid_t uid, gid_t gid); +NTSTATUS vfs_streaminfo(connection_struct *conn, + struct files_struct *fsp, + const char *fname, + TALLOC_CTX *mem_ctx, + unsigned int *num_streams, + struct stream_struct **streams); /* The following definitions come from smbd/avahi_register.c */ diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 6ef7156c8e..8b6a15f9f8 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -4681,9 +4681,8 @@ NTSTATUS smbd_do_qfilepathinfo(connection_struct *conn, return NT_STATUS_INVALID_PARAMETER; } - status = SMB_VFS_STREAMINFO( - conn, fsp, smb_fname->base_name, talloc_tos(), - &num_streams, &streams); + status = vfs_streaminfo(conn, fsp, smb_fname->base_name, + talloc_tos(), &num_streams, &streams); if (!NT_STATUS_IS_OK(status)) { DEBUG(10, ("could not get stream info: %s\n", diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index 7f16670173..1424d502d6 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -1126,6 +1126,21 @@ NTSTATUS vfs_stat_fsp(files_struct *fsp) return NT_STATUS_OK; } +/** + * Initialize num_streams and streams, then call VFS op streaminfo + */ +NTSTATUS vfs_streaminfo(connection_struct *conn, + struct files_struct *fsp, + const char *fname, + TALLOC_CTX *mem_ctx, + unsigned int *num_streams, + struct stream_struct **streams) +{ + *num_streams = 0; + *streams = NULL; + return SMB_VFS_STREAMINFO(conn, fsp, fname, mem_ctx, num_streams, streams); +} + /* generate a file_id from a stat structure */ |