diff options
author | Tim Prouty <tprouty@samba.org> | 2009-01-04 19:27:06 -0800 |
---|---|---|
committer | Tim Prouty <tprouty@samba.org> | 2009-01-04 19:31:30 -0800 |
commit | c0b98297b4064812d9a6572d56d98ddab9181446 (patch) | |
tree | f1748cc798e76bf5e8eb1e9bba71fc6d4a14c409 | |
parent | 7ae992b622af62e9cfcbc9077f23eff8c2fe0d15 (diff) | |
download | samba-c0b98297b4064812d9a6572d56d98ddab9181446.tar.gz samba-c0b98297b4064812d9a6572d56d98ddab9181446.tar.bz2 samba-c0b98297b4064812d9a6572d56d98ddab9181446.zip |
s3: Remove a few unnecessary checks from the streams depot module and fix to work with NTRENAME
Handling of error codes when renaming a file to a stream and a stream
to a file is now done in rename_internals_fsp.
The NTRENAME stream path only passes in the stream name, so the new
base can now be different from the old base.
-rw-r--r-- | source3/modules/vfs_streams_depot.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/source3/modules/vfs_streams_depot.c b/source3/modules/vfs_streams_depot.c index 69d34940fd..54c17db1ce 100644 --- a/source3/modules/vfs_streams_depot.c +++ b/source3/modules/vfs_streams_depot.c @@ -525,6 +525,7 @@ static int streams_depot_rename(vfs_handle_struct *handle, char *nsname = NULL; char *ostream_fname = NULL; char *nstream_fname = NULL; + char *newname_full = NULL; DEBUG(10, ("streams_depot_rename called for %s => %s\n", oldname, newname)); @@ -536,11 +537,6 @@ static int streams_depot_rename(vfs_handle_struct *handle, return SMB_VFS_NEXT_RENAME(handle, oldname, newname); } - if (!(old_is_stream && new_is_stream)) { - errno = ENOSYS; - return -1; - } - frame = talloc_stackframe(); if (!NT_STATUS_IS_OK(split_ntfs_stream_name(talloc_tos(), oldname, @@ -549,7 +545,7 @@ static int streams_depot_rename(vfs_handle_struct *handle, goto done; } - if (!NT_STATUS_IS_OK(split_ntfs_stream_name(talloc_tos(), oldname, + if (!NT_STATUS_IS_OK(split_ntfs_stream_name(talloc_tos(), newname, &nbase, &nsname))) { errno = ENOMEM; goto done; @@ -561,17 +557,27 @@ static int streams_depot_rename(vfs_handle_struct *handle, goto done; } - if (StrCaseCmp(obase, nbase) != 0) { - errno = ENOSYS; - goto done; - } - ostream_fname = stream_name(handle, oldname, false); if (ostream_fname == NULL) { return -1; } - nstream_fname = stream_name(handle, newname, false); + /* + * Handle passing in a stream name without the base file. This is + * exercised by the NTRENAME streams rename path. + */ + if (StrCaseCmp(nbase, "./") == 0) { + newname_full = talloc_asprintf(talloc_tos(), "%s:%s", obase, + nsname); + if (newname_full == NULL) { + errno = ENOMEM; + goto done; + } + } + + nstream_fname = stream_name(handle, + newname_full ? newname_full : newname, + false); if (nstream_fname == NULL) { return -1; } |