mirror of
https://github.com/samba-team/samba.git
synced 2025-03-10 12:58:35 +03:00
s3: smbd: Move the initialization of the filename and the call to canonicalize_snapshot_path() *before* zero-length string checks.
canonicalize_snapshot_path() may eat the incoming pathname in total for SMB1, so we need to check after that call. Fix the zero-length string check to look at state->smb_fname->base_name instead of state->orig_path. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
This commit is contained in:
parent
8019b3d0af
commit
2992891e27
@ -990,6 +990,19 @@ NTSTATUS unix_convert(TALLOC_CTX *mem_ctx,
|
||||
return NT_STATUS_OBJECT_NAME_INVALID;
|
||||
}
|
||||
|
||||
/* Start with the full orig_path as given by the caller. */
|
||||
if (!(state->smb_fname->base_name = talloc_strdup(state->smb_fname, state->orig_path))) {
|
||||
DBG_ERR("talloc_strdup failed\n");
|
||||
status = NT_STATUS_NO_MEMORY;
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Canonicalize any @GMT- paths. */
|
||||
status = canonicalize_snapshot_path(state->smb_fname, ucf_flags, twrp);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we trimmed down to a single '\0' character
|
||||
* then we should use the "." directory to avoid
|
||||
@ -998,7 +1011,7 @@ NTSTATUS unix_convert(TALLOC_CTX *mem_ctx,
|
||||
* As we know this is valid we can return true here.
|
||||
*/
|
||||
|
||||
if (!*state->orig_path) {
|
||||
if (state->smb_fname->base_name[0] == '\0') {
|
||||
if (!(state->smb_fname->base_name = talloc_strdup(state->smb_fname, "."))) {
|
||||
status = NT_STATUS_NO_MEMORY;
|
||||
goto err;
|
||||
@ -1025,19 +1038,6 @@ NTSTATUS unix_convert(TALLOC_CTX *mem_ctx,
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Start with the full orig_path as given by the caller. */
|
||||
if (!(state->smb_fname->base_name = talloc_strdup(state->smb_fname, state->orig_path))) {
|
||||
DBG_ERR("talloc_strdup failed\n");
|
||||
status = NT_STATUS_NO_MEMORY;
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Canonicalize any @GMT- paths. */
|
||||
status = canonicalize_snapshot_path(state->smb_fname, ucf_flags, twrp);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
* Large directory fix normalization. If we're case sensitive, and
|
||||
* the case preserving parameters are set to "no", normalize the case of
|
||||
|
Loading…
x
Reference in New Issue
Block a user